Pergunta

A JVM já tinha três Lisps antes Clojure chegaram ao local: Kawa , Bear Armed e SISC .

O fosso faz Clojure preenchimento que foi deixado por esses Lisps?

Foi útil?

Solução

Kawa, ABCL e SISC são reimplementações de línguas existentes que são bastante longo no dente. Eles são excelentes se por algum motivo você quiser usar padrão Esquema ou padrão Lisp comum sobre a JVM.

Clojure é uma new Idioma. Ele não encher um diferença . Acrescenta possibilidades inteiramente novas. Favorece a aproximarem Esquema puramente funcional e CL são ambos multi-paradigma. Clojure empresta muito do design de vários idiomas FP (ML, Haskell).

E sim, você pode adicionar suporte a concorrência com outros Lisps, mas isso é totalmente faltando o ponto. Clojure foi concebido a partir da linguagem como concorrente início. Tanto é assim que escrever programas concorrentes é trivial em Clojure - não ciência do foguete como é em línguas não-funcionais (Esquema, CL não excluídos). Olhe desta forma:

As pessoas dizem que C permite escrever programas rápidos por padrão.

Bem, Clojure permite escrever programas concorrentes por padrão.

Outras dicas

  1. "Clojure é um Lisp não constrangidos por compatibilidade com versões anteriores" (Isso é do site do Clojure). É um novo começo. É o progresso. Use as idéias que fazem Lisp / Scheme poderoso, mas repensar-los em torno do Java plataforma .

  2. Clojure será sempre o Clojure mais recente. Com qualquer outra língua portado para o JVM, a versão JVM pode sempre estar jogando catch-up. Se você não precisa do Java Platform por uso SISC em detrimento de outro esquema? Se fizer isso, por que não usar o Lisp (Clojure) que foi projetado especificamente para ele?

  3. Projetado com simultaneidade em mente.

A resposta mais simples que eu posso vir acima com é, Clojure não é Common-Lisp. Clojure não é limitado pela história de outros Lisps. É um new Idioma construído para a JVM.

Eu simplesmente não estava ciente das pessoas, que é um benefício sério para Clojure (que as pessoas fizeram barulho suficiente Descobri). A maior coisa Clojure tem que eu não vi naqueles que você listou é Software Transactional memória .

Clojure também foi projetado para a JVM, ao contrário de ser uma camada para outra língua, por isso é um pouco mais "Java-y", que imagino que os outros seria quando você tem que fazer a interoperação.

A página lógica em clojure.org afirma:

Por que eu escrevo mais uma linguagem de programação? Basicamente, porque eu queria:

  • A Lisp
  • para programação funcional
  • simbiótica com uma plataforma estabelecida
  • projetado para concorrência

e não poderia encontrar um.

Será que os 3 idiomas que você mencionou (Kawa, ABCL e SISC) atender a esses requisitos? Eles são:

  • Lisps (quer o CL ou dialetos Esquema) ?
  • para programação funcional ?
  • simbiótica com uma plataforma estabelecida (JVM) ?

mas eles não são concebido para (STM) Concorrência; No entanto, para ser justo e completo, há pelo menos 2 bibliotecas MCT I encontrados para CL que ainda não foram mencionados:

  1. STMX
    • trabalho Testado em ABCL. Em desenvolvimento ativo.
  2. CL-STM
    • Morto? Última mudança foi em 2007.

Hmm ... Então, por que criar uma nova Lisp? Principalmente porque estes são bibliotecas . A página lógica em clojure.org continua (grifo nosso):

E sobre os Lisps padrão (Common Lisp e Scheme)?

  • Lento / não pós inovação padronização
  • estruturas de dados do núcleo mutável, não extensível
  • Sem simultaneidade em especificações
  • Boas implementações já existem para JVM (ABCL, Kawa, SISC et al)
  • Lisps padrão são suas próprias plataformas

É um projeto de simultaneidade idioma questão, como os outros.

Além disso, por parada na JVM? apoio Clojure CLR está em desenvolvimento ativo .

Esses são os 2 lacunas ele preenche, da minha perspectiva. Você deve usar Clojure se ele atende às suas necessidades. Não se preocupar em perder suas habilidades se Clojure cai fora do mapa. Suas habilidades Lisp, mas mais importante a sua maneira de pensar, irão transitar para outros dialetos Lisp.

Se eu estivesse sendo cínico, eu diria que é porque Clojure obter um mais agradável website e um nome mais sexy.

Gostaria também de acrescentar que Clojure é relativamente nova linguagem, implementado por uma pessoa, com boas habilidades de marketing e uma grande quantidade de energia. Ele está investindo muito tempo e campanha publicitária em clojure ... às vezes, o hype é uma profecia auto-realizável em que, se você pode convencer as pessoas o suficiente que é a última coisa mais importante, então você pode obter apoio e impulso suficiente para torná-lo realmente trabalho.

Eu suspeito que os implementadores de Kawa etc. não têm tanto em jogo, portanto, não estão exagerando o seu produto. Além disso, o que há para hype? "Temos uma grande linguagem .. ele é chamado Lisp" É uma venda mais difícil comercialização.

Eu acho que Java é um exemplo disso. Ele tinha algumas deficiências muito graves, mas porque foi comercializado e sensacionalistas tão fortemente alcançou muita força o que significava o apoio de fornecedores de hardware / software, fabricantes de ferramentas, investimento da indústria, etc. De qualquer maneira, ele conseguiu um certo grau de sucesso, embora eu odiava programação nele. Clojure pode alcançar um sucesso similar em outros Lisps não tem.

A vantagem de Clojure é que ele dá-lhe acesso a todas as bibliotecas Java / código lá fora, e multi-threading apoio, porque ele é baseado em JVM. Além disso, ele foi projetado com simultaneidade em mente, algo que geralmente não são projetados para Lisp, embora por causa das primitivas de mapeamento que provavelmente não seria difícil de conceber um lisp que iria apoiar a simultaneidade bem.

Dito isto, eu tentei Clojure e odiado a sintaxe ea dor no fator de bunda que parece ir junto com qualquer coisa Java-conectado.

Clojure é uma "língua presa", não é qualquer lisp você já sabe. Eu passei o último alguns dias lendo o material e visualização dos vídeos, e eu estou impressionado. Está premissa é que os programas funcionais (com base em dados imutáveis) são a melhor maneira de gerenciar a simultaneidade. implementos Clojure um lisp-like sistema baseado em JVM para fornecê-la.

Não temos de ter mais uma resposta (e eu não espero votos para este), mas aqui estão algumas pequenas melhorias para várias outras respostas.

recente não é necessariamente melhor. Mais recente e mal projetado não é bom, mais nova e não mantida não é bom, e mais recente sem um (ou pelo menos crescimento) comunidade de usuários maior não é bom. (Novos idiomas sair regularmente, mas a maioria deles cair no esquecimento por causa da falta de uso.)

Eu amo Common Lisp. Parte de sua beleza é a sua estranheza, que vem do fato de que ele foi projetado por comitês com o objetivo de compatibilidade com vários dialetos incompatíveis.

Eu amo Scheme. É uma bela linguagem, elegante. No entanto, o seu desenvolvimento depende de comitês, e talvez isso tenha abrandado-lo para baixo, às vezes. Em qualquer caso, seus objetivos são diferentes de Clojure do.

Common Lisp e Scheme têm ênfases, como a recursão de cauda que não são bem adaptados para a eficiência na JVM. Clojure foi projetado desde o início para mapear bem para a JVM, e para interoperar (razoavelmente) bem com Java. (Eu não tenho certeza o que isso significa sobre os dialetos Clojurescript e CLR).

O fato de que Clojure foi desenvolvido, inicialmente, por uma pessoa, Rich Hickey, e é controlado por ele, juntamente com uma equipe pequena, não necessariamente torná-lo melhor do que uma linguagem controlada por comitês. Se essa pessoa fez más decisões, Clojure não seria uma boa linguagem.

No entanto, e este é o ponto importante : Hickey projetou uma linguagem que é bem pensado, elegante, e que desde o início incluiu um conjunto sistematicamente relacionado de funções que tornam mais fácil para fazer um muito com pouco. Isso vale para a interoperabilidade JVM básica, bem como o resto da língua. As pessoas que controlam Clojure continuar a ser rigoroso sobre furar com os objetivos da língua, até agora.

Esta é uma grande parte do que eu amo sobre Clojure: É bem concebido tanto como um todo e nos seus detalhes. Isso significa que uma vez que você se acostumar com isso, é um prazer para o programa na mesma.

Seria apenas um pouco de exagero (ou understatment?) Para dizer que Clojure tem o poder de Lisp comum com a elegância do Esquema. Lisp Comum tem muitos e muitos do que você precisa construído dentro da linguagem, mas é uma bagunça (digo isso com amor), e quando você precisa de algo mais do que o que está na linguagem, por vezes, existem várias bibliotecas incompatíveis com diferentes vantagens e desvantagens. Esquema do projeto é pequeno, embora existam bibliotecas disponíveis. Clojure tem um corpo crescente de padrão bibliotecas (ao contrário CL), que são mais ou menos partes da linguagem. Uma ilustração agradável de este é o projeto core.matrix, que fornece uma interface comum para várias implementações de matriz diferentes. Isto é importante, porque há diferentes implementações de matriz que são melhores para uso ocasional de pequenas matrizes, ou para o uso extensivo de grandes matrizes, por exemplo.

Nada disso tem a intenção de dizer que Clojure é melhor do que Lisp comum ou Esquema; não é. As três línguas têm virtudes diferentes.

É novo! O que não significa um monte de lispers velhos irão utilizá-lo desde que a comunidade lisp tradicional é bem tradicional, mas também significa que as pessoas sem experiência lisp anterior irá buscá-lo como a coisa nova.

IMHO, Clojure é Lisps mais velhos que o Ruby era a Smalltalk. Não necessariamente melhor, mas bom o suficiente. E crucialmente, é mais aceitável para o seu empregador, porque tem força e é visto como uma língua em ascensão, tanto como Ruby era uma vez.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top