Por ejmplo WoW (World of Warcraft) lo utiliza como lenguaje de script en
el cliente del juego. Aquí podéis encontrar una lista exhaustiva de
otros juegos que lo utilizan.
http://en.wikipedia.org/wiki/Category:Lua-scripted_video_games
El lenguaje probablemente se haya hecho tan popular, por lo sencillo que
resulta incluirlo en nuestras aplicaciones. Y para muestra un botón:
http://drj11.wordpress.com/2008/04/03/embedding-lua-in-5-minutes/
Como podéis ver es tremendamente sencillo. El ejemplo tal cual aparece
no funciona directamente con LUA 5.1 en Ubuntu. Sólo he tenido que
cambiar los includes del principio, así que comprobad la installación de
LUA en vuestro sistema si algo falla.
Aprovechando la coyuntura he ampliado el ejemplo para mostrar como
ejecutar funciones de nuestro programa principal desde nuestros scripts
en LUA. Aquí tenéis mis cambios:
---8<------------------------------------------
#include <stdio.h>
// Con LUA 5.1 en Ubuntu los includes están aquí
#include <lua5.1/lua.h>
#include <lua5.1/lauxlib.h>
static lua_State *l;
int
my_func (lua_State *L)
{
int x;
if (lua_gettop(L) >= 0) {
x = (int) lua_tonumber (L, -1);
printf ("Me dices : %d\n", x);
/* Devolvemos el parámetro + 1*/
lua_pushnumber(L, x + 1);
}
return 1;
}
int
main(int argc, char *argv[])
{
if (argc >= 3 && strcmp(argv[2], "-l"))
{
l = luaL_newstate ();
luaL_openlibs (l);
/* Añade nuestra función t la llama simon_dice */
lua_pushcfunction(l, my_func);
lua_setglobal(l, "simon_says");
luaL_dostring (l, argv[2]);
printf ("%s\n", lua_tostring (l, -1));
/* Borramos la pila */
lua_settop (l, 0);
}
else
fprintf (stderr, "Número incorrecto de parámetros\n"
"Uso: %s -l 'codigo_lua'\n",
argv[0]);
return 0;
}
--8<----------------------------------------------------------
Para compilar el programa:
$ gcc -o test test.c -llua5.1
o
$gcc -o test test.c -llua
Dependiendo de que librería tengáis instalada.
Para probar esta modificación podéis ejecutar algo como lo siguiente:
$ ./test -l 'print ("Simon Dice:" .. simon_dice (10)); return "YaTá"'
Que dará como resultado algo así:
--8<----------------------------
Me dices : 10
Simon Dice:11
YaTá
--8<----------------------------
Como podéis ver... si que es fácil ¿no?
Saludos
--
GNU/EDMA HomePage : http://www.gnu.org/software/edma
Personal Web Pages : http://papermint-designs.com/dmo
Blogs (dmartin/picoFlamingo) : http://community.papermint-designs.com
Revista Occam's Razor : http://webs.uvigo.es/occams-razor