Introducción al Lenguaje de Programación Lua

por F.Javier Párraga (@japargon)
  1. Presentación de LUA

Comenzamos una serie de artículos en Louesfera para poder introducirnos en el desarrollo de Apps nativas multiplataforma, utilizando Lua como Lenguaje de Programación (LP).

Cuando necesitamos desarrollar aplicaciones para diferentes Sistemas, con el requisito fundamental de no tener que realizar de nuevo el programa ni cambiar de LP, Lua es probablemente el Lenguaje más conocido y utilizado.

A lo largo de la serie de artículos iremos descubriendo el increíble mundo Lua.

Si no conoces Lua, podemos afirmar que va a sorprenderte por su facilidad, potencia y capacidad de adaptarse a cualquier entorno. Comprobaremos lo sencillo que puede convertirse la programación de apps y juegos, con las herramientas de desarrollo que existen, que además nos proporcionan diferentes capacidades y niveles de complejidad, de forma que podamos ir evolucionando en el desarrollo de juegos 2D para iOS y Android.

Seas o no programador, podrás ver como Lua te ayudará tanto si deseas empezar con la programación en iOS o en Android, como utilizarlo de Lenguaje Script si quieres exprimir al máximo las capacidades de juegos como World of Warcraft, MTA San Andreas, Minecraft, Roblox, SimCity, etc, e incluso el desarrollo de juegos para consolas como Nintendo DS, PSP, Wii, PS3, XBOX de forma sencilla.

Por otra parte, Lua también es para usuarios avanzados de herramientas de diseño e imagen como Adobe Photoshop Lightroom, para hackers que desean automatizar procesos con sus herramientas de análisis (Nmap, Wireshark,…), para robótica sencilla como Lego Mindstorms o en control para robótica avanzada, también en “embedded systems” para dispositivos de marcas tan importantes como Wavecom o en firmware de impresoras, en investigación para biotecnología, o incluso en Asterisk.

En cuanto a juegos famosos, tenemos Angry Bird como el más conocido. Lo encontramos para prácticamente todas las plataformas. Su desarrollo no ha requerido la reprogramación para cada dispotisivo, es decir, en cada plataforma se dispone de motor de física (normalmente Box2D, Chipmunk2D,…), acceso a los sensores del dispositivo, gráficos 2D (OpenGL ES), un sprite sheet engine, sonido (OpenAL). Por encima de estos motores, disponemos de Lua enlazando a todos estos SDKs, lo que nos permite realizar una programación mucho más sencilla, encapsulando la complejidad de cada plataforma.

Podríamos preguntarnos ¿cómo es posible que un solo Lenguaje de Programación tenga todas estas posibilidades y no sea el más conocido y utilizado del mundo?, pues sencillo, porque Lua es un lenguaje pensado y desarrollado para integrarse como script en otras aplicaciones o sistemas.

La potencia de Lua, se ha visto reconocida en enero de 2012, cuando Lua ganó el Front Line Award 2011 de Game Developers Magazine en la categoría de Programming Tools.

Si nos centramos en el desarrollo de Apps para iOS y Android, ya antes del éxito comercial de estas plataformas, Lua era considerado como una de las mejores opciones de máquina virtual para los teléfonos móviles. Podéis ver un resumen completo de porque Lua era y es una muy buena opción en: http://lua-users.org/lists/lua-l/2007-11/msg00248.html

Por supuesto, en el caso del desarrollo para iOS y Android, las herramientas que veremos generan en todos los casos código nativo de cada Sistema, consiguiendo cosas increíbles como tener incluso mejor rendimiento final en iOS que utilizando Objective-C, y en Android utilizando Java. ¿Cómo es posible esta paradoja?, bueno hay que explicar que los motores de juegos utilizados por debajo de Lua están realizados normalmente en C o C++, que son probablemente los lenguajes de alto nivel con mejor rendimiento. Además, LuaVM (Lua Virtual Machine) también está realizado en C, siendo muy compacto y rápido. A o que podemos sumar que, el tiempo de ejecución en la LuaVM con respecto al tiempo empleado por el resto de los SDKs, es proporcionalmente muy pequeño, lo que nos deja al final una App (un juego por ejemplo) con mejor rendimiento que realizado en el propio lenguaje del Sistema analizado (sea iOS o Android).

En algunos casos podemos necesitar un acceso a más bajo nivel o a una característica nueva. En estos casos con Lua se utilizan los plug-in que nos permiten acceder a esas funcionalidades sin requerir el conocimiento del desarrollo a bajo nivel.

Cuando avancemos en los próximos artículos, podremos descubrir como Lua, en una simple línea de llamada a una función con los parámetros necesarios, es capaz de eliminar la complejidad. Por ejemplo, en el manejo de la gestión de gráficos y sprites por la pantalla, eliminando sobre todo la dificultad de desarrollar para Android con el conocido problema de la fragmentación de la configuración de las pantallas (incontables resoluciones diferentes).

Durante varios artículos abordaremos Lua como un Lenguaje genérico, sin orientación concreta a ningún entorno. Comentaremos los diferentes Sistemas y plataformas en los que podemos encontrar Lua y utilizarlo.

Posteriormente veremos que existen bastantes paquetes de desarrollo muy completos y avanzados para programar con Lua para iOS y Android, presentaremos sus características principales y podremos ver una introducción al manejo de cada una de las principales herramientas de desarrollo para juegos con Lua, como son CoronaSDK, Gideros y Moai. Además, mostraremos una breve introducción a Codea para iPad y Löve2D para Windows, Mac y Linux. Aquí podemos ver una comparativa:

http://www.gamefromscratch.com/post/2012/09/21/Battle-of-the-Lua-Game-Engines- Corona-vs-Gideros-vs-Love-vs-Moai.aspx

Además de las herramientas de desarrollo como las comentadas, que utilizan Lua, existen otras que no trataremos por utilizarse para programar en una sola plataforma. Un caso de ejemplo, sería Kobold2D que como pone en su web, es una versión mejorada y ampliada del popular motor de juegos cocos2D para el iPhone (y MacOSX), pero utilizando Lua en lugar de Objective-C, lo que hace el desarrollo mucho más sencillo.

Si queremos conocer un poco más de sobre donde se utiliza Lua podemos ver en los siguientes enlaces donde más se suele se usar Lua:

http://lua-users.org/wiki/LuaUses clasificados

también en https://sites.google.com/site/marbux/home/where-lua-is-used

y lista software donde se ha integrado Lua http://en.wikipedia.org/wiki/Category:Lua- scriptable_software

Existe además un área de desarrollo de enorme crecimiento, donde Lua comienza a utilizarse mucho, por su potencia, sencillez y fácil enlace a C. Se le conoce como Internet de las Cosas “IoT” (Internet of Thing) o también Machine to Machine “M2M”, donde probablemente el proyecto más importante es http://m2m.eclipse.org/.

Desde la Fundación Eclipse han decidido crear:

Herramientas http://www.eclipse.org/koneki/ldt , http://www.eclipse.org/koneki/

Frameworks http://www.eclipse.org/mihini/

Protocolos http://www.eclipse.org/paho/

Un buen esquema resumen: http://www.slideshare.net/kartben/using-eclipse-and-lua- for-the-internet-of-things-14902405 

Si queremos ver como funcionaría con CoronaSDK lo podemos ver en el siguiente video:

EclipseCon 2012: Koneki, Paho, MQTT, CoronaSDK

 

 

Using Koneki LDT debugger for CoronaSDK applications:

 

 

y   http://mehrantm.blogspot.com.es/2012/07/how-to-edit-and-debug-corona-sdk.html

 

Aqui se termina esta primera parte. La siguiente, “Introducción a Lua” en los próximos días…

Compartir

1 Comentario

Dejar respuesta