¿Qué tipo de lenguaje es Lua?
Lua es un lenguaje de scripting conciso, ligero y extensible. Lua tiene una API C relativamente simple y es fácil de integrar en aplicaciones. Muchas aplicaciones utilizan Lua como lenguaje de programación integrado para lograr configurabilidad y escalabilidad.
Lua es un lenguaje liviano y su versión oficial solo incluye un núcleo optimizado 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 está abierto en forma de código fuente. El intérprete de referencia completo después de la compilación ocupa solo unos 247 kB. En la versión 5.4.3, el volumen pasa a ser 283 kB (Linux, AMD64). Es muy pequeño y puede integrarse fácilmente en otros programas. A diferencia de muchos lenguajes "grandes y completos", la comunicación de red, las interfaces gráficas, etc. no se proporcionan de forma predeterminada.
Pero Lua se puede ampliar fácilmente: el lenguaje anfitrión (normalmente C o C++) proporciona estas funciones, y Lua puede utilizarlas como si fueran funciones integradas. De hecho, ya hay muchos módulos de extensión maduros disponibles.
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. Solo proporciona valores numéricos (el valor predeterminado es un número de coma flotante de doble precisión, configurable), booleanos, cadenas, tablas, funciones, subprocesos y datos definidos por el usuario.
Sin embargo, su eficiencia en el procesamiento de tablas y cadenas es muy alta. Con el soporte de metatablas, los desarrolladores pueden simular de manera eficiente los tipos de datos complejos requeridos (como conjuntos, matrices, etc.).
Lua es un lenguaje de programación de paradigmas de programación múltiple: solo proporciona un pequeño conjunto de funciones para satisfacer las necesidades de diferentes paradigmas de programación, en lugar de proporcionar un paradigma de programación específico.
Por ejemplo, Lua no proporciona herencia, pero puedes simularla usando metatablas. Conceptos como espacios de nombres y clases no están implementados en las características básicas del lenguaje, pero podemos simularlos fácilmente usando estructuras de tablas (la única estructura de datos compleja proporcionada por Lua). Es proporcionando estas metacaracterísticas básicas que podemos transformar arbitrariamente el lenguaje según sea necesario.
Lua implementa una pequeña cantidad de características avanzadas como funciones de primera clase, recolección de basura, cierres, llamadas de cola legítimas, coerción (conversión automática entre cadenas y valores en tiempo de ejecución), corrutinas (multitarea cooperativa) ) y carga dinámica de módulos.
Implementación
Los programas Lua no se interpretan directamente a partir de archivos textuales de 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 aumentar 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 de 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 (que están basadas en pilas), Lua VM se basa en registros y, por lo tanto, se parece más al diseño de hardware real. La arquitectura de registro evita la copia excesiva de valores y reduce el número 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 registros muy conocidas. La VM de PCScheme también se basa en registros.