Quiero que sea
- generación de código nativo // Capaz de compilar con algo como GHC
- multiplataforma (win / linux)
- Funcional y un poco orientado a objetos.
- lambdas, coincidencia de patrones, tuplas y otras cosas funcionales
- Gran soporte de metaprogramación
- Sangría y bordes mínimos
- escritura estática
- También quiero soporte Mixin :)
- La posibilidad de crear sitios web basados en algunos marcos también es una buena ventaja.
- entonces sí, el rendimiento y la estabilidad son importantes.
Empecé Haskell , pero aún no estoy seguro de eso, porque hay OCaml. Y tengo experiencia en F #. Pero por lo que sé, OCalm es un poco OOP y, a veces, incluso más rápido (no estoy seguro) nunca lo intenté. También hay erlang, no sé nada sobre erlang . ¿Y tal vez me estoy perdiendo algo más ...? Python , no tengo idea acerca de Python aquí, es funcional y es excelente y admite mixin y popular y rápido, pero realmente no creo que Python sea capaz de toda la magia funcional, creo que no puede.
Sé que este hilo / tema es como hablar sobre nada o como una guerra de idiomas, pero en serio y realmente quiero escuchar tu visión al respecto.
Respuestas:
Clojure parece un ajuste bastante bueno para todos sus requisitos.
Generación de código nativo / Capaz de compilar con algo como GHC - Sí (todo el código Clojure se compila en código de bytes Java que posteriormente se compila en código nativo a través de JIT en la JVM)
multiplataforma (win / linux): Sí, en cualquier lugar donde se ejecute la JVM
Funcional y un poco orientado a objetos: sí, Clojure es un lenguaje funcional en primer lugar, pero también tiene soporte OO si lo desea (a través de la interoperabilidad de Java o los objetos de estilo CL). Dicho esto, OO generalmente se considera unidiomático en Clojure.
lambdas, coincidencia de patrones, tuplas y otras cosas funcionales: sí, es un lenguaje funcional bastante estándar a este respecto. El autor (Rich Hickey) fue algo inspirado por Haskell.
Gran soporte de metaprogramación - Sí - "código-es-datos" se aplica como con todos los Lisps y obtienes una gran funcionalidad macro
Sangría y bordes mínimos: sí, aunque seguramente eso es en realidad un editor en lugar de una función de idioma.
tipeo estático - Sí - Clojure es dinámico de forma predeterminada, pero puede proporcionar sugerencias de tipo estático o primitivo cuando lo desee para aumentar el rendimiento
también quiero compatibilidad con Mixin :) - Sí, se puede lograr de varias maneras (por ejemplo, macros), aunque probablemente no lo desee o lo necesite después de haber descubierto la funcionalidad del protocolo de Clojure ...
La posibilidad de crear sitios web basados en algunos marcos también es una buena ventaja. - Sí, hay marcos como Ring / Compojure en Clojure y también puede usar cualquier marco Java
entonces sí, el rendimiento y la estabilidad son importantes. - Sí - Básicamente obtienes todo el rendimiento / estabilidad de la JVM que está bastante bien probado en aplicaciones empresariales ...
Además de todo eso, Clojure tiene algunas capacidades realmente impresionantes en torno a la concurrencia. Realmente vale la pena ver este video: http://www.infoq.com/presentations/Value-Identity-State-Rich-Hickey
fuente
Lisp común
Parece admitir todos los requisitos anteriores. El enlace lo llevará a un libro en línea que cubre todo lo que necesita saber para comenzar.
fuente
eval
función? Es solo una función, puede implementarla de la forma que desee. Algunas implementaciones tienen un intérprete separado que se envían con el ejecutable compilado. Algunos simplemente envían el compilador en sí con el ejecutable compilado. Algunos solo compilan el código en tiempo de ejecución de todos modos. Y si usted está hablando de macros: los que sólo se ejecute en tiempo de compilación de todos modos. Esa es la belleza de eso.OCaml es el único idioma que proporciona todas las funciones que solicita. (Pero no sé para mixin). Incluso tiene un marco web llamado Ocsigen y es más que un lenguaje exagerado, es un idioma antiguo, con una base de usuarios real (empresas, universidades, aficionados) y años de mejoras y pruebas. .
fuente
Definitivamente Scala puede cumplir con sus requisitos:
Además, Scala tiene un gran soporte para programación paralela (por actores). La comunidad Scala está creciendo y se utiliza en proyectos reales (Twitter). El lenguaje es bastante difícil de aprender, ya que tiene muchas características y azúcar sintáctico, pero una vez que lo manejes, seguramente disfrutarás de la programación con él.
fuente