2010-01-20 5 views

Respuesta

129

Esta es una pregunta muy interesante. Mi trabajo diario es estudiar lenguajes de programación, y Lua pagará un estudio cuidadoso. Diría eso sobre muy pocos otros idiomas (quizás Icon y CLU). Tenga en cuenta que es el idioma como un todo, no las características individuales, lo que hace que Lua sea tan digno de estudio.

¿Es esto resultado de nuevas ideas interesantes que tuvieron los implementadores, o es el resultado de una buena ejecución de ideas bien establecidas?

Ambos. Para más detalles, la mejor fuente para obtener una respuesta a esta pregunta es el documento The Evolution of Lua, que apareció en el Tercer Simposio de ACM sobre la Historia de los Lenguajes de Programación. Pero agregaré algunos comentarios.

  • El uso de tablas Lua como la única tipo mutable, no atómica de los datos fue inventado por el equipo de Lua. Se inspiraron en los desarrollos de CLU, y creo que estaban al tanto de trabajos similares en Awk e Icon, pero el refinamiento de este grado es una contribución importante del equipo de Lua.

    Las tablas también tienen una implementación muy eficiente, que fue inventada por el equipo de Lua.

  • Las características funcionales de Lua tienen la misma semántica que el esquema, pero Lua tiene una aplicación única de funciones de primera clase, que creo que deben presentar para su publicación en el Diario de programación funcional.

  • La API para incrustación se ha ido perfeccionando a lo largo de los años. Su principal característica distintiva es que los tipos abstractos definidos por el usuario pueden participar plenamente en la incrustación. Esta es la propiedad que hace que la API Lua sea superior a la API Tcl, por ejemplo. La API de Lua ha sufrido una gran cantidad de refinamiento en los últimos años, incluso desde su primera publicación en la versión 2.5. Los diseñadores de Lua merecen un gran crédito aquí.

  • La tecnología de recolección de basura es estándar.

  • Lua corutines representan una nueva versión de algunas ideas muy antiguas. La nueva toma se consideró digna de publicación en ACM Transactions on Programming Languages ​​and Systems, así que de nuevo creo que el equipo de Lua obtiene crédito por su originalidad.

  • Los metatables Lua están relacionados con el protocolo de metaobjetos Common Lisp.

creo que ese resultado el éxito de Lua de una combinación única de los puntos fuertes del equipo de Lua:

  • Si usted lee la HOPL paper, verá que el equipo Lua eran muy conscientes de muchos desarrollos en lenguajes de programación y pudieron elegir entre las mejores ideas. La mayoría de los diseñadores de lenguajes de scripting populares han sido aficionados y no han estado tan bien informados.

  • Lua es magníficamente diseñado para que las piezas encajen muy bien, con una excelente relación potencia-peso. Este es el resultado de una gran cantidad de refinamiento en el tiempo, y PUC-Rio estaba dispuesta a que el equipo de Lua trabajara en el diseño del lenguaje y la implementación en lugar de preparar una gran cantidad de documentos. Este trabajo no pudo haber sido hecho en una universidad norteamericana.

  • Lua es magníficamente ingeniería. La implementación es asombrosamente buena. Eso es en parte un gran trabajo de grandes ingenieros y en parte la oportunidad de seguir revisando el diseño durante un período de 15 años.

Voy a cerrar preguntando a los lectores a no subestimar la dificultad de elegir y refinación las ideas bien establecidas para formar un todo coherente. Este es un trabajo extremadamente difícil y rara vez se reconoce como debería ser.

+9

+1: muy buena respuesta –

+5

Por el momento, consulte "La implementación de Lua 5.0" en http://www.lua.org/doc/jucs05.pdf Estamos trabajando en ese documento, Norman, pero Lua 5.2 nos está llamando la atención ahora ... – lhf

+1

El artículo de TOPLAS, Revisiting Coroutines, fue discutido en LtU, que por alguna razón no le presté atención: http://lambda-the-ultimate.org/node/ 2868 –

4

Lua es pequeña, el código total es de solo decenas de miles de líneas en ANSI C. (Python tiene líneas de código diez veces más).

Lua es muy estable, o digamos, el lenguaje está arreglado ahora.

Lua tiene una buena ingeniería. Su código es fácil de leer y piratear. (también porque es pequeño)

Su licencia le permite hacer lo que quiera.

Escribir C extensiones en Lua es más fácil que en otros lenguajes, por ejemplo, Python.

+4

Entonces, ¿todo esto cuenta como una buena ingeniería, en lugar de tener nada que ver con el diseño del lenguaje? –

+2

No, hay mucha ingeniería buena, pero hay decisiones de diseño innovadoras, como señaló Norman. Lee el documento de HOPL. – lhf

0

Creo que esto se debe a que Lua es relativamente simple y pragmático. No intenta ser el lenguaje para construir el próximo sistema operativo, Crysis 3 o un clon de SAP, pero lo que hace, lo hace bien, es decir, sirve como lenguaje de scripting.

7

Lua es compatible con la programación funcional y se basa en el estilo de programación Prototype-based, que es flexible y potente.

IMO es un lenguaje interesante.

Si quieres leer algunos pensamientos sobre la herencia de prototipo, lo que sugeriría
Leer mensaje The Universal Design Pattern el blog de Steve Yegge.

+0

Gracias: el enlace es interesante. El trabajo en Lua comenzó en 1993, 3 años después del lanzamiento de Self, y 7 años después de "Clases versus prototipos en lenguajes orientados a objetos" de Borning. ¿Lua introdujo algo nuevo en la programación basada en prototipos? –

+0

@Charles, solo he experimentado con prototipos en Lua y realmente no sé la respuesta a su pregunta. Tal vez alguien más pueda dar sombra a algo de luz sobre eso. –

+0

Claro. Ciertamente, me interesa no poder pensar en un lenguaje anterior basado en prototipos que haya tenido un amplio uso. –

2

Hay una historia de Lambda the Ultimate, Small is Beautiful: the design of Lua, que habla sobre la reciente charla de Robert Ierusalimschy en Stanford del mismo nombre. La discusión actualmente se enfoca en los méritos de tener tablas como la única estructura de datos del contenedor; hasta ahora, poco se ha dicho en la otra parte de la charla, que trata sobre la interfaz C de Lua.

Cuestiones relacionadas