Pregunta

Quiero hacer algunas metaprogramming en un lenguaje de tipos estáticos, en la que se escriben los dos mis programas y mis meta programas. Me refiero a esto en un sentido fuerte:. Si mis compila generador de programa, quiero que el tipo de sistema que sea lo suficientemente fuerte que sólo los programas de tipo-correctos se pueden generar

Por lo que yo sé, solamente metaocaml puede hacer esto. (Plantillas No, ni la plantilla ni Haskell C ++ forma la factura - ver este papel). Pregunta: ¿qué otros idiomas / sistemas permiten que este

EDIT: Por lo que yo puedo decir, metaocaml está muerto. Oleg tratado de resucitar , pero que es todavía varias versiones atrapado detrás de OCaml sí mismo. Si uno quiere ir con lenguajes experimentales (es decir, incluso más que metaocaml, parece que Ur y bastante posiblemente Idris se ajustaba perfectamente. Cualesquiera otras nuevas entradas al campo?

¿Fue útil?

Solución

F # puede hacer esto también a través Citas Código .

Otros consejos

Para hacer eso, usted tiene que asegurarse de que el sistema de tipos de la Languge subyacente es honrado directamente / revisado por el propio metaprograma. Como cuestión práctica, esto casi obliga al metaprogramming a estar en el idioma subyacente ... así que supongo que no estoy sorprendido de que usted podría ser capaz de hacer esto en metaocaml.

La mayoría de nosotros no consigue herramientas integradas en el lenguaje subyacente metaprogramming (C ++ es más bien una excepción, y lo rechazo y sistemas basados ??en la reflexión por ser demasiado débil para llevar a cabo transformaciones arbitrarias).

Un sistema que puede llevar a cabo arbitraria transformaciones (o metaprograms compuestas de conjuntos de aquellos) en código es el software DMS Reingeniería Toolkit . DMS tiene extremos delanteros para muchos langauges reales, construye estructuras de datos del compilador al analizar (incluyendo AST). DMS proporciona transformaciones programa de código-fuente que representan transformaciones como AST-reescrituras usando la sintaxis de la superficie de la lengua meta. Se reúne el requisito de un cierto grado: si sus reglas de transformación son sintácticamente correcta (y ellos son comprobados por DMS), a continuación, el programa será transformado sintácticamente correcta. No alcanza su requerimiento Tipo-corrección, como se implementan los mecanismos de verificación de tipos fuera de la lengua de destino. En principio, se podría un corrector de tipo seguro para aumentar las transformaciones del programa; En la práctica, hemos encontrado que podemos codificar transformaciones suficientemente fiable.

E incluso si usted tiene las transformaciones de tipo-seguro, usted no tiene una garantía de semántica de seguridad con respecto a su programa original. Por lo tanto, usted todavía tiene que depurar los meta-programas.

metaprogramming tiempo de compilación en Scala.

Our flavor of macros is reminiscent of Lisp macros, adapted to incorporate type safety and rich syntax. Unlike infamous C/C++ preprocessor macros, Scala macros: 1) are written in full-fledged Scala, 2) work with expression trees, not with raw strings, 3) cannot change syntax of Scala.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top