Introducción al Lenguaje de Programación Lua
por F.Javier Párraga (@japargon)
2. Introducción a LUA
Uno de los puntos importante que tendremos que tener en cuenta con Lua, es que no importa que Framework utilicemos lo importante es lo que mantendrá todo unido: Lua.
En los años 90, Microsoft impulsó la arquitectura Cliente/Servidor y el modelo de 3 capas, similar al MVC (Modelo-Vista-Controlador) que utiliza Apple en el desarrollo con Objective-C.
Una aplicación en Lua se compondrá de todos los recursos (gráficos,…) que se compilan en la aplicación con el código Lua y el código del Framework utilizado. Cuando se ejecuta, el Framework lanza el motor OpenGL, que gestionará todos los gráficos que se muestren. Lua no sabrá nada de como se representan, ni como se tratan esos gráficos, sólo se comunica con el Framework que se encarga de hacerle transparente el funcionamiento del resto de SDKs. Es así como se consigue la compatibilidad entre plataformas.
El patrón MVC, es aplicable en esta arquitectura si lo utilizamos como en Objective-C. Si programamos pensando en Objective-C, podremos crear aplicaciones multiplataforma y multiFramework. De esta forma, conseguiríamos que el código fuera independiente, no solo de la plataforma destino si no también del Framework utilizado. De estos conceptos cvolveremos a hablar en algunos artículos más adelante.
Para trabajar con Lua, lo primero que debemos hacer, es disponer de la instalación básica cuya versión actual es la 5.2.1. Como Lua es Software Libre, podríamos bajarnos los fuentes y compilarlos para la plataforma en la que trabajemos, pero para comenzar, vamos a descargar todo lo necesario ya listo para funcionar en cada uno de los S.O. en los que normalmente trabajemos.
Utilizaremos el enlace http://lua-users.org/wiki/LuaDistributions donde encontramos la distribución 5.0/5.1 casi para todas las plataformas posibles (Windows, MacOSX, Linux, iOS, Android, BSD, Consolas Sony, consolas Nintendo, Windows CE, Palm OS, Symbian OS y otros…).
Para Windows y MacOSX descargar los binarios de http://luabinaries.sourceforge.net/ >> http://sourceforge.net/projects/luabinaries/files/5.2.1/ (Lua 5.2.1 del 26/6/2012)
La versión de Lua que mantiene la máxima compatibilidad entre todas las plataformas es la 5.1.4 que podremos descargar para Windows desde:
- http://code.google.com/p/luaforwindows/
- http://sourceforge.net/projects/luabinaries/files/5.1.4/Executables/.
Y para MacOSX desde:
- http://ilua.sourceforge.net/
- http://lua-users.org/wiki/MacOsxLua
- http://lua-users.org/wiki/MacOsClassicLua
Además de las herramientas de desarrollo multiplataforma para iOS y Android que vamos a ver (unas comerciales y otras Software Libre / Código Abierto), existen otras para la ejecución de Lua en iOS y en Android. Veamos unos ejemplos:
- Para Android disponemos de Lua también en S4A «Scripting for Android» (Python, Lua, Perl, Rino, Beanshell,…).
- Para iOS hay apps comerciales para ejecutar también Lua interactivamente como son: iLuaBox (5.2), Simply_Lua (5.3) y LuaConsole (5.1.4)
Para seguir estos artículos, vamos a seleccionar la distribución para Windows, donde «Lua for Windows» no es solo los binarios para la ejecución de los Script en Lua, si no una gran cantidad de librerías, editor, etc…
LfW dispone de todo lo necesario para escribir, ejecutar y depurar los Script de Lua en Windows. Se incluye además de una gran cantidad de librerías y ejemplos que en su mayor parte funcionarán para el resto de plataformas sin problemas.
Los componente de LfW son el interprete, la documentación, una guía rápida, ejemplos, librerías con documentación, el compilador, los editores y los ficheros con las cabeceras para enlace con C.
- http://code.google.com/p/luaforwindows/
- LuaBinaries es una distribución de las librerías Lua y los ejecutables compilados para varias plataformas
Como ya hemos visto en los párrafos anteriores, Lua es un lenguaje de scripting multiplataforma, por lo que se compila a pseudocódigo y se ejecuta por su VM que está realizada en ANSI C, que le permite ser fácilmente portable a cualquier plataforma, muy ligero (un core unos 150Kb), y rápido (algunos benchmarks muestran a Lua como el lenguaje script interpretado más rápido) manteniendo su semántica muy similar a otros lenguajes de scripting.
La diferencia con los lenguajes compilados como C, es la sencillez que presenta a la hora de hacer pruebas y de programar, por varias razones:
- Una sintaxis muy sencilla, y modular con diversas funciones útiles.
- Es un lenguaje dinámico donde no es necesario declarar lo tipos de variables.
- Tiene acceso asociativo a las tablas.
- No dispone de la complejidad de tipos de variables.
- Para su ejecución solo hace falta el fichero texto con el bloque de código, sin requerir compilaciones, ya que la VM se encargará de todo el trabajo.
- Aún siendo un lenguaje scripting tiene su propio «recolector de basura» (garbage collector) para liberar de memoria todo lo que ya no se utiliza.
- Estructuras de datos como vectores, conjuntos, tablas hash, listas y registros pueden ser representadas utilizando la única estructura de datos de Lua: la tabla.
- Permite la programación orientada a objetos
- Permite la multitarea (corutinas)
Existen algunas propiedades que, precisamente por ser tan sencillas y flexibles, pueden ser un inconveniente si no se es un programador «ordenado».
- En Lua las variables no tienen tipo y puede asignársele distintos tipos de datos a lo largo de la ejecución.
- La mala utilización del ámbito de las variables puede acarrear no solo problemas difíciles de lo localizar, si no también un mal rendimiento general de la App.
- La referenciación a objetos o funciones y uso inadecuado de referencias de las variables hace que el problema de los Memory Leaks sea frecuente (aunque este es un problema bastante general en muchos lenguajes).
Algunas de las principales implementaciones de Lua son:
- http://luajit.org/ un Just-In-Time Compiler for Lua.
- http://code.google.com/p/llvm-lua/ LLVM-Lua, es un JIT y compilador estático de Lua que usa una VM de bajo nivel (LLVM) como compilador backend.
- http://code.google.com/p/lua-alchemy/ Lua es un gran lenguaje de programación dinámico, Adobe Flash es una gran plataforma universal para aplicaciones y Adobe Alchemy es la herramienta para unirlas.
Algunos de los principales dialectos de Lua son:
Cartel de publicidad de Lua y el resumen de sus principales características: