A intenção da minha pergunta não é iniciar uma guerra de insultos, mas sim determinar em que circunstâncias cada idioma é "a melhor ferramenta para o trabalho".
Eu li vários livros sobre Clojure ( Programming Clojure , Practical Clojure , The Joy of Clojure e a edição Manning Early Access de Clojure in Action ) e acho que é uma linguagem fantástica. No momento, estou lendo Let Over Lambda, que lida principalmente com macros Common Lisp e, também, é uma linguagem muito interessante.
Estou não um especialista em Lisp (mais de um novato), mas esta família de línguas me fascina, assim como a programação funcional, em geral.
Vantagens do Clojure (e desvantagens de "outros"):
É executado no JVM.
A JVM é um ambiente de linguagem muito estável e de alto desempenho que atende muito bem ao sonho da Sun de "Escreva uma vez, execute [quase] em qualquer lugar". Posso escrever código no meu Macbook Pro, compilá-lo em um arquivo JAR executável e executá-lo no Linux e no Microsoft Windows com poucos testes adicionais.
O (Hotspot e outros) JVM suporta coleta de lixo de alta qualidade e compilação e otimização just-in-time de muito desempenho. Onde, há poucos anos, escrevi tudo o que precisava ser executado rapidamente em C, agora não hesito em fazê-lo em Java.
Modelo padrão, simples, multithreading. O Common Lisp tem um pacote multithreading padrão?
Rompe a monotonia de todos aqueles parênteses com
[]
,{}
e#{}
, embora os especialistas em Common Lisp provavelmente me digam que com macros de leitor, você pode adicioná-los ao CL.
Desvantagens do Clojure :
- É executado no JVM.
- Sem recursão de cauda ou continuações. O Common Lisp suporta continuações? O esquema requer suporte para ambos, eu acredito.
Vantagens dos outros (Lisp comum, em particular) (e desvantagens do Clojure):
Macros de leitor definidas pelo usuário.
Outras vantagens?
Pensamentos? Outras diferenças?