2010-05-04 8 views
8

He desnatado la Programación en Lua, he consultado la Referencia de Lua.Descripción sucinta de Lua vm?

Sin embargo, ambos me dice esta función hace esto, pero no cómo .

Al leer el SICP, tengo esta sensación de: "ah, aquí está el esquema subyacente del modelo computacional"; Estoy tratando de tener el mismo sentido con respecto a Lua, es decir, una descripción concisa de su vm, un "cómo" en lugar de un "qué".

¿Alguien sabe de un buen documento (además de la fuente C) que describe esto?

Respuesta

15

Es posible que desee leer el No-Frills Intro to Lua 5(.1) VM Instructions (seleccione un enlace, haga clic en la pestaña Documentos, elija Inglés -> Ir).

No recuerdo exactamente donde Lo he visto, pero recuerdo haber leído que los autores de Lua específicamente desaniman a los usuarios finales de entrar en demasiados detalles en la máquina virtual; Creo que quieren que sea un detalle de implementación lo más posible.

+2

[Enlace directo a PDF 5.1] (http://luaforge.net/docman/view.php/83/98/ANoFrillsIntroToLua51VMInstructions.pdf), [Enlace directo a 5.1 ODT] (http://luaforge.net/ docman/view.php/83/98/ANoFrillsIntroToLua51VMInstructions.pdf) –

3

El modelo computacional que subyace a Lua es prácticamente el mismo que el modelo computacional subyacente al Esquema, excepto que la estructura central de datos no es la celda cons; es la tabla de hash mutable. (Al menos hasta que ingrese a la metaprogramación con metatabla). De lo contrario, todo lo familiar está ahí: funciones de primera clase anidadas con variables locales variables (variables de límite de tiempo en Scheme), y así sucesivamente.

No tengo claro que obtendrías mucho de un estudio de la máquina virtual. Intenté piratear la máquina virtual hace un tiempo y es muy similar a cualquier otra máquina virtual orientada a registros, aunque quizás un poco más limpia. Solo un puñado de instrucciones son específicas de Lua.

Si tiene curiosidad acerca de los metatablas, la semántica se describe claramente, aunque de forma muy detallada, en Section 2.8 of the reference manual for Lua 5.1. Si observa el código VM en src/lvm.c, verá casi exactamente esa lógica implementada en C (por ejemplo, la función interna Arith). Las instrucciones de VM están especializadas para casos comunes, pero todo es terriblemente sencillo; nada inteligente está involucrado.

Durante años he estado esperando una especificación más formal del modelo computacional de Lua, pero mis gustos van más hacia la semántica formal ...

+0

Tengo mucha curiosidad sobre todo lo que implica metatablas. Si no están documentados en la VM, ¿dónde están documentados? – anon

+0

He agregado algunas notas sobre metatablas, pero realmente no hay mucho que decir. –

3

He encontrado The Implementation of Lua 5.1 muy útil para entender lo que Lua realmente está haciendo.

Explica las técnicas de hashing, recolección de basura y algunas otras partes y piezas.

+1

Ese documento es bueno, pero tenga en cuenta que es para Lua 5.0 no 5.1. – mlepage

-3

Me sorprende que se refiera a la fuente C de la VM, ya que está protegida por lua.org y el tecgraf/puc rio en Brasil, especialmente porque el lenguaje se usa para aplicaciones empresariales y comerciales reales en varios países. El documento sobre la implementación de lua contiene detalles sobre la VM en la mayor cantidad de detalles que se permite incluir, pero la estructura de la máquina virtual es de propiedad exclusiva. Vale la pena señalar que las versiones 5.0 y 5 'fueron encargados por IBM en Europa para su uso en mainframes de clientes y su versión basada en registro tiene una VM que acepta el formato definido por IBM de instrucciones intermedias.

+7

La fuente Lua VM es software gratuito y se puede usar libremente. Su respuesta lo hace parecer que Lua es de código cerrado con problemas legales si se incluye en algún otro proyecto. También proporcione prueba de que IBM encargó la máquina virtual Lua. – Neopallium

0

Otro gran documento es The Implmentation of Lua 5.0, que describe el diseño y las motivaciones de varios sistemas clave en la máquina virtual. Descubrí que leerlo era una excelente manera de analizar y entender lo que estaba viendo en el código C.