que programacion lenguaje funcional haskell f# functional-programming ocaml introspection

haskell - programacion - Introspección de lenguajes de programación funcional.



haskell lenguaje de programacion (7)

Estoy dibujando un diseño de algo (aprendizaje automático de funciones) que preferiblemente querrá un lenguaje de programación funcional, y también introspección, específicamente la capacidad de examinar el propio código del programa en un formato bien manejable, y preferiblemente también la capacidad de obtener la máquina código generado compilado en tiempo de ejecución, y me pregunto cuál es el mejor lenguaje para escribirlo. Lisp, por supuesto, tiene capacidades de introspección sólidas, pero los lenguajes de tipo estático también tienen ventajas; Los que estoy considerando son:

¿No puedes simplemente analizar el código fuente como un intérprete o compilador ordinario? ¿Por qué necesitas la introspección?

F #: la plataforma .Net tiene una buena historia aquí, puede leer el código de bytes en el tiempo de ejecución y también emitir el código de bytes y compilarlo; Supongo que no hay problema para acceder a estas instalaciones desde F #.

F # tiene un mecanismo de cita rudimentario pero solo puede citar algunas expresiones y no otros tipos de código, especialmente las definiciones de tipo. Además, su mecanismo de evaluación es mucho más lento que la compilación genuina, por lo que es básicamente inútil. Puedes usar la reflexión para analizar definiciones de tipo pero, de nuevo, es bastante rudimentario.

Puede leer el código de bytes, pero se ha compilado, por lo que se ha perdido mucha información y estructura.

F # también tiene tecnología de análisis y análisis (especialmente fslex, fsyacc y FParsec) pero no es tan maduro como el de OCaml.

Haskell, Ocaml: ¿tienen instalaciones similares, ya sea a través del código de bytes o del árbol de análisis?

Haskell tiene Template Haskell, pero nunca he oído hablar de nadie que lo use (¿abandonware?).

OCaml tiene su sistema de macros Camlp4 y algunas personas lo usan pero está mal documentado .

En cuanto a lexing y análisis, Haskell tiene algunas bibliotecas (especialmente Parsec) y OCaml tiene muchas bibliotecas .

¿Hay otros idiomas que también debería estar mirando?

Los lenguajes de reescritura de términos como Mathematica serían una opción obvia porque hacen que sea trivial manipular el código. El lenguaje Pure puede ser de interés.

También puede considerar MetaOCaml por sus capacidades de compilación en tiempo de ejecución.

Estoy dibujando un diseño de algo (aprendizaje automático de funciones) que preferiblemente querrá un lenguaje de programación funcional, y también introspección, específicamente la capacidad de examinar el propio código del programa en un formato bien manejable, y preferiblemente también la capacidad de obtener la máquina código generado compilado en tiempo de ejecución, y me pregunto cuál es el mejor lenguaje para escribirlo. Lisp, por supuesto, tiene capacidades de introspección sólidas, pero los lenguajes de tipo estático también tienen ventajas; Los que estoy considerando son:

F #: la plataforma .Net tiene una buena historia aquí, puede leer el código de bytes en el tiempo de ejecución y también emitir el código de bytes y compilarlo; Supongo que no hay problema para acceder a estas instalaciones desde F #.

Haskell, Ocaml: ¿tienen instalaciones similares, ya sea a través del código de bytes o del árbol de análisis?

¿Hay otros idiomas que también debería estar mirando?


El enfoque de Haskell estaría más en la línea de analizar la fuente. La plataforma Haskell incluye un analizador de origen completo, o puede usar la API de GHC para obtener acceso de esa manera.


El mecanismo de introspección de Haskell es Template Haskell , que admite la metaprogramación en tiempo de compilación, y cuando se combina con, por ejemplo, llvm , proporciona llvm metaprogramación en tiempo de ejecución.



Ocaml tiene:

  • Camlp4 para manipular los sintaxis de Ocaml en Ocaml. La implementación mantenida de Camlp4 es Camlp5 .

  • MetaOCaml para la programación de múltiples etapas a gran escala.

  • Ocamljit para generar código nativo en tiempo de ejecución, pero no creo que se haya mantenido recientemente.

  • Ocaml-Java para compilar código Ocaml para la máquina virtual Java. No sé si hay buenas capacidades de reflexión.


Puede revisar la variante escrita de Racket (anteriormente conocida como PLT Scheme). Conserva la mayor parte de la simplicidad sintáctica de Scheme, pero proporciona un sistema de tipo estático. Dado que Racket es un esquema, la metaprogramación está a la par del curso, y el tiempo de ejecución puede emitir código nativo mediante un JIT .


También me gustaría ver Scala o Clojure que vienen con todas las bibliotecas que se han desarrollado para Java. Nunca tendrás que preocuparte si una biblioteca no existe. Pero más al punto de su pregunta, estos lenguajes le brindan la misma reflexión (o tipos más poderosos) que encontrará en Java.