Pregunta

Estoy buscando un compilador front-end Lua que se verifica por tipo en tiempo de compilación, pero genera el código de byte Lua 5.1 estándar (que solo tiene tipos de tiempo de ejecución). Lo que quiero es una cantidad decente de análisis sintáctico estático en tiempo de compilación y mecanografía opcional, para detectar errores triviales antes del tiempo de ejecución. El código de bytes resultante tendría que funcionar bien con el código de bytes Lua existente que se compiló con LoadString estándar ().

Para ser claros, cualquier diferencia solo ocurriría en el momento de la compilación de bytes. En tiempo de ejecución, el código de bytes no tendría idea de que algo diferente / inusual le sucedió durante la fase de compilación.

Lo que tengo en mente se parece mucho a ActionScript; ¡Ni siquiera me importaría un compilador de ActionScript que genere código de bytes Lua!

¿Alguien ha oído hablar de tal esfuerzo? He visto algunas referencias al uso de MetaLua para hacer esto, pero, sinceramente, no soy lo suficientemente brillante como para hacer un montón de su documentación

¿Fue útil?

Solución

En el verano de 2005 o por ahí, trabajé con un estudiante universitario increíblemente inteligente sobre el problema de hacer algo inferencia de tipo en tiempo de compilación para Lua, posiblemente asistida por anotaciones. ¡Este problema resulta ser increíblemente difícil! (Mi alumno escribió una breve nota técnica, pero en realidad no está destinada a la circulación general).

Si quisiera resolver el problema que ha planteado, con las restricciones gemelas de que permite una verificación de tipo estático significativo y que interopera con el código Lua estándar compilado por código de bytes , diseñaría un nuevo lenguaje desde cero para satisfacer estas dos restricciones. Sería una cantidad considerable de trabajo, pero significativamente más fácil que intentar adaptar un sistema de tipos a Lua.

Otros consejos

Consulte esta publicación de blog de Metalua .

-{ extension "types" }

function sum (x :: list(number)) :: number
  local acc :: number = 0
  for i=1, #x do acc=acc+x[i] end
  return acc
end

Sin embargo, parece una solución en tiempo de ejecución.

De todos modos, no dude en hacer su pregunta en Lista de correo de Metalua . Si desea ampliar la sintaxis de Lua, Metalua es la primera herramienta que debe mirar.

P.S. ¡ nunca escriba Lua como mayúsculas !

Esta pregunta tiene seis años ... pero aquí hay una nueva respuesta: http://terralang.org/

  

Al igual que C, Terra es un lenguaje simple, compilado estáticamente con   Gestión manual de la memoria. Pero a diferencia de C, está diseñado a partir de   comenzando a interoperar con Lua. Las funciones de Terra son de primera clase   Valores de Lua creados con la palabra clave terra. Cuando sea necesario son   JIT-compilado al código de máquina.

No existe tal cosa. Puede ser posible extender MetaLua para hacer esto, pero nadie lo ha hecho, y AFAIK, no hay planes para hacerlo. Lua está destinado a ser un lenguaje dinámico, si desea un idioma estáticamente escrito, use uno.

Lo que esencialmente está buscando es algo como Java o C #. En ese caso, puede utilizar un proyecto como Lua.NET para integrar código Lua existente con C #. También hay Kahlua para Java.

Hay un nuevo documento "Typed Lua: Un sistema de tipo opcional para Lua" de PUC-Rio recién publicado en Dyla'14. http://dl.acm.org/citation.cfm?id=2617553

Se trata del diseño inicial de Typed Lua, una extensión opcionalmente escrita del lenguaje de script Lua. Todavía está en progreso, y el sistema de tipos sigue siendo relativamente simple. No se proporciona ninguna herramienta de inferencia de tipo / verificación de tipo.

Con respecto al sistema de mecanografía basado en metalua, Tidal Lock: verificación de tipo estático opcional e inferencia para Lua de Fabien. http://lua-users.org/lists/lua-l /2013-02/msg00403.html .

También hay Ravi https://github.com/dibyendumajumdar/ravi

El lenguaje de programación Ravi es un derivado de Lua 5.3 con mecanografía estática opcional limitada y compiladores JIT basados ??en LLVM y libgccjit

Realmente disfruto programando en Terra (ver arriba)

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