¿Qué tipo de lenguaje es Lua?
Lua es un lenguaje ligero, y su versión oficial sólo incluye un núcleo simplificado y las bibliotecas más básicas. Esto hace que Lua sea pequeño en tamaño y rápido para comenzar.
Está escrito en lenguaje ANSI C y es abierto como código fuente. El intérprete de referencia compilado completo pesa sólo unos 247 kB. En la versión 5.4.3, el tamaño pasó a ser 283kB (Linux, AMD64), que todavía es muy pequeño y se puede integrar fácilmente en otros programas. A diferencia de muchos lenguajes "grandes y completos", la comunicación de red y las interfaces gráficas no se proporcionan de forma predeterminada.
Pero Lua es fácilmente extensible: estas funciones las proporciona el lenguaje anfitrión (generalmente C o C++), y Lua puede usarlas como funciones integradas. De hecho, hay muchos módulos de extensión maduros para elegir.
Lua es un lenguaje de escritura dinámica que admite una estrategia de recolección de basura incremental. Hay soporte integrado, independiente del sistema operativo, para subprocesos múltiples cooperativos. Lua admite de forma nativa muy pocos tipos de datos y solo proporciona valores numéricos (el valor predeterminado es un número de coma flotante de doble precisión, configurable), valores booleanos, cadenas, tablas, funciones, subprocesos y datos definidos por el usuario.
Pero procesa tablas y cadenas de manera muy eficiente. Con el soporte de metatablas, los desarrolladores pueden simular eficientemente tipos de datos complejos (como conjuntos, matrices, etc.).
Lua es un. Lenguaje de programación con múltiples paradigmas de programación: solo proporciona un pequeño conjunto de funciones para satisfacer las necesidades de diferentes paradigmas de programación, en lugar de proporcionar soporte de funciones complejas para paradigmas de programación específicos.
Por ejemplo, Lua no proporciona herencia para esta característica, pero puedes simularla con una metatabla. Conceptos como espacios de nombres, clases, etc. no están implementados en las características básicas del lenguaje, pero podemos simularlos fácilmente con estructuras de tablas (la única estructura de datos compleja proporcionada por Lua). Al proporcionar estas metafunciones básicas, podemos cambiar de idioma a voluntad.
Lua implementa algunas características avanzadas, como funciones de primer nivel, recolección de basura, cierres, llamadas de cola apropiadas, coerción (conversión automática entre cadenas y valores en tiempo de ejecución), coordinación (multitarea cooperativa) y Carga dinámica de módulos.
Implementación
Los programas Lua no se interpretan directamente a partir de archivos de texto Lua, sino que se compilan en código de bytes y luego se ejecutan en la máquina virtual Lua. El proceso de compilación suele ser invisible para el usuario y ocurre en tiempo de ejecución, pero se puede realizar sin conexión para mejorar el rendimiento de la carga o reducir la huella de memoria del entorno host excluyendo el compilador.
El código de bytes de Lua también se puede generar y ejecutar dentro de Lua, utilizando la función dump y las funciones load/loadstring/loadfile en la biblioteca de cadenas. La versión 5.3.4 de Lua se implementó en aproximadamente 24.000 líneas de código C.
Como la mayoría de las CPU, y a diferencia de la mayoría de las máquinas virtuales (basadas en pila), Lua VM se basa en registros, por lo que se parece más a un diseño de hardware real. La arquitectura de registro no sólo evita la duplicación excesiva de valores sino que también reduce el recuento total de instrucciones por función. La máquina virtual de Lua 5 fue la primera máquina virtual basada puramente en registros ampliamente utilizada.
Parrot y Dalvik de Android son otras dos máquinas virtuales basadas en registro muy conocidas. La VM de PCScheme también se basa en registros.