Eu quero que seja
- geração de código nativo // Capaz de compilar com algo como o GHC
- multiplataforma (win / linux)
- Funcional e um pouco orientado a objetos
- lambdas, correspondência de padrões, tuplas e outras coisas funcionais
- Ótimo suporte à metaprogramação
- Recuo e bordas mínimas
- digitação estática
- Também quero apoio Mixin :)
- A possibilidade de criar sites com base em algumas estruturas também é uma boa vantagem.
- então, sim, o desempenho e a estabilidade são importantes.
Comecei o Haskell , mas ainda não tenho certeza, porque existe o OCaml. E eu tenho experiência em F #. Mas, tanto quanto eu sei, o OCalm é um pouco POO e, às vezes, mais rápido (não tenho certeza), nunca tentei. Também há erlang, não sei nada sobre erlang . E talvez eu esteja perdendo algo mais ..? Python , eu não tenho idéia do python aqui, é funcional e oop e suporta mixin, popular e rápido, mas eu realmente não acho que o python seja capaz de toda a magia funcional, acho que não pode.
Eu sei que esse tópico / tópico é como falar sobre nada ou como uma guerra de idiomas, mas eu realmente quero ouvir sua visão sobre isso.
Respostas:
Clojure parece ser um bom ajuste para todos os seus requisitos.
geração de código nativo / Capaz de compilar com algo como GHC - Sim (todo o código Clojure é compilado no bytecode Java que posteriormente é compilado no código nativo via JIT na JVM)
multiplataforma (win / linux) - Sim - em qualquer lugar que a JVM seja executada
Funcional e um pouco orientado a objetos - Sim - O Clojure é uma linguagem funcional em primeiro lugar, mas também oferece suporte a OO, se você desejar (via interoperabilidade Java ou objetos no estilo CL). Dito isto, o OO é geralmente considerado unidiomatic em Clojure.
lambdas, correspondência de padrões, tuplas e outras coisas funcionais - Sim - é uma linguagem funcional bastante padrão nesse sentido. O autor (Rich Hickey) foi um pouco inspirado por Haskell.
Ótimo suporte à metaprogramação - Sim - o "código é dados" se aplica como em todos os Lisps e você obtém excelente funcionalidade de macro
Recuos e bordas mínimas - Sim, embora certamente esse seja realmente um editor, e não um recurso de idioma?
digitação estática - Sim - Clojure é dinâmico por padrão, mas você pode fornecer dicas de tipo estático ou primitivo sempre que desejar para melhorar o desempenho
Também quero o suporte ao Mixin :) - Sim - pode ser alcançado de várias maneiras (por exemplo, macros), embora você provavelmente não queira ou precise dele depois de descobrir a funcionalidade do protocolo do Clojure ....
A possibilidade de criar sites com base em algumas estruturas também é uma boa vantagem. - Sim - existem estruturas como Ring / Compojure no Clojure e você também pode usar qualquer estrutura Java
então, sim, o desempenho e a estabilidade são importantes. - Sim - Você basicamente obtém todo o desempenho / estabilidade da JVM, que é bastante comprovado em aplicativos corporativos ...
Além de tudo isso, Clojure tem alguns recursos realmente impressionantes em relação à simultaneidade. Realmente vale a pena assistir a este vídeo: http://www.infoq.com/presentations/Value-Identity-State-Rich-Hickey
fonte
Lisp comum
Parece apoiar todos os requisitos acima. O link levará você a um livro on-line que cobre tudo o que você precisa saber para começar.
fonte
eval
função? É apenas uma função, você pode implementá-la como quiser. Algumas implementações possuem um intérprete separado, que é enviado com o executável compilado. Alguns apenas enviam o próprio compilador com o executável compilado. Alguns só compilam o código em tempo de execução de qualquer maneira. E se você estiver falando sobre macros: elas só são executadas em tempo de compilação de qualquer maneira. Essa é a beleza disso.O OCaml é o único idioma que fornece todos os recursos solicitados. (Mas eu não conheço o mixin.) Ele ainda possui uma estrutura da web chamada Ocsigen e é mais do que uma linguagem exagerada, é uma linguagem antiga, com uma base de usuários real (empresas, universidades, amadores) e anos de aprimoramento e testes .
fonte
Definitivamente, o Scala pode atender aos seus requisitos:
Além disso, Scala tem um ótimo suporte para programação paralela (por atores). A comunidade Scala está crescendo e é usada em projetos reais (Twitter). A linguagem é bastante difícil de aprender, pois possui muitos recursos e açúcar sintático, mas uma vez que você a manipule, certamente gostará de programar com ela.
fonte