Lua es un lenguaje de scripting diseñado con el principal objetivo de ser ligero y extensible. El pequeño tamaño de su runtime y su API C sencilla han hecho que sea elegido en muchas ocasiones para ser embebido en aplicaciones como nmap o Monotone, o en multitud de juegos (WOW, FarCry...). De hecho, viene utilizándose en videojuegos desde hace unos diez años.
Lua apareció por primera vez en 1998 y tiene su origen en la Universidad Pontifica Católica de Rio de Janeiro [PUC-Rio].
Lua es un lenguaje sencillo. Una de sus principales influencias declaradas es Lisp y su idea de una única estructura, la lista. En el caso de Lua, esta estructura clave fundamental de su arquitectura es la tabla. Como lenguaje más parecido podría nombrarse Javascript. Ambos son lenguajes de script, con soporte para OO basada en prototipos.
Lua es rápido para su naturaleza interpretada; suele quedar en buen lugar en las comparativas.
La sintaxis recuerda a una mezcla de Pascal con otros lenguajes. Un clásico:
-- Una función:
function diHola(persona)
-- Un bucle:
for i=1,3 do
print("Hola " .. persona .. "!")
end
end
print("¿Cómo te llamas?")
nombre = io.read()
-- Llamada a una función:
diHola(nombre)Lua soporta un estilo procedural imperativo, pero también un estilo funcional. De hecho, en Lua las funciones son entidades de primera categoría. La función del ejemplo anterior, en realidad se interpreta como:
diHola = function(persona)
print("Hola " .. persona .. "!")
endSi tenéis cierta experiencia con Javascript quizá esa forma de escribirlo os sea familiar.
Lua, como decía antes, también soporta orientación a objetos, y lo hace basándose en la estructura de la tabla. Una tabla como t:
t = {}puede contener funciones, como:
function t.diHola(persona)
print("Hola " .. persona .. "!")
end
t.diHola("Peter")O, si utilizamos : en lugar de . Lua nos pasará como primer parámetro self, una referencia a la tabla (u objeto):
t = {}
t.nombre = "Peter"
function t:diHola()
print("Hola " .. self.nombre .. "!")
end
t:diHola()
-- Que es lo mismo que t.diHola(t) o que t['diHola'](t)Con esto tenemos todo lo necesario para encapsular objetos. Para otros aspectos de la OO, Lua se se basa en la idea de metatabla, una forma de asociar a una tabla T otra T' en la que se irán a buscar los métodos que no se encuentren en T. Con esto tenemos un mecanismo de herencia. Entrar en detalle del manejo de las metatablas, OO, metaprogramación u otros aspectos más avanzados quedan (quizá) para posibles próximos artículos.
La referencia fundamental para aprender Lua es, sin duda, el libro Programming in Lua, del cual se puede encontrar online la primera edición. Es un buen libro, bien escrito y con explicaciones detalladas pero asequibles a cualquiera. Como complemento, el Manual de Referencia que también se puede adquirir impreso o consultar online.
La otra referencia habitual es el Wiki de Usuarios de Lua donde podemos encontrar tutoriales y código, su lista de correo lua-l o el canal de IRC en Freenode.
Existen, además, unos cuantos libros y tutoriales más específicamente orientados a desarrollar modificaciones de determinados juegos, o a la programación de juegos en general.
El soporte por parte de los editores e IDEs es suficientemente amplio. Personalmente recomiendo SciTE un editor muy sencillo con la cualidad de que utiliza Lua para programar macros. Existen también una buena cantidad de librerías y enlaces que se encuentran listadas en el Wiki.
LuaForge es un buen lugar para encontrar proyectos de y para este lenguaje. El Kepler Project es otra interesante referencia que desarrolla y mantiene una variada colección de módulos principal pero no exclusivamente orientados al desarrollo web.
Por último, para comenzar con Lua en Windows se puede encontrar un cómodo instalador que incluye binarios de Lua, un buen número de librerías fundamentales y el editor SciTE, además de unos cuántos ejemplos y documentación.
Gonzalo García (a veces Venkman) es un tipo con cierto interés por la programación, los lenguajes y el conocimiento del mundo en general. Ingeniero Industrial camuflado de programador, reparte su tiempo entre el aprendizaje y el desarrollo. Acepta ofertas de empleo. Hazle una!
ian_scho escribió
hace 1 años
Venkman escribió
hace 1 años
Una nueva razón para aprender -al menos un poco de- Lua: Acaba de ser incluído en el trunk de Apache 2.4 el mod_lua, que embede Lua en el servidor.
Su integración con el servidor es muy alta y esto permite, por ejemplo, hacer mucho de lo que haríamos con configuraciones (.conf) con Lua, lo que nos da más flexibilidad.
develCuy escribió
hace 10 meses
A mi Lua me gusta mucho porque la sintaxis es muy sencilla, no tengo que usar miles de llaves y parentesis en lógicas complejas.
@Venkman, ahora que mencionaste mod_lua, estoy trabajando en una libreria PHP para Lua(http://gitorious.org/nutria), es decir, implementa varias funciones que PHP nos acostumbra a usar para no tener que estar inventándonoslas en Lua, eso puede ahorrar mucho tiempo.
La libreria también está preparada para correr con CGILua, de tal forma que se complementa perfectamente para desarrollo web.
Lo que no recomiendo es reemplazar PHP por Lua en forma general. PHP es un lenguaje muy rico, repleto de funciones y librerias para facilitarnos el desarrollo. En cambio Lua te exige desarrollar tu propia base de código, de tal manera que tu aplicación funciona a la medida de tus necesidades y no te cargas de cosas que no te van a servir, que solo están consumiendo recursos.
Entonces, hasta el momento veo que el futuro de Lua está en lugares donde Python, RoR, ni PHP pueden llegar porque son demasiado pesados(ejm: celulares y dispositivos embebidos)
BendicioneS!
Venkman escribió
hace 10 meses
develCuy, lo que comentas es bastante cierto. Creo que la idea del proyecto Kepler es justo intentar proporcionar toda esa funcionalidad de base en forma de una serie de módulos (por ejemplo, LuaFileSystem). Pero sí es cierto que no existe realmente una librería estándar con el alcance de lo que tiene, por ejemplo, PHP.
Me parece interesante lo de Nutria, aunque no acabo de tener claro que me guste el usar exactamente los nombres de función que usa PHP. Precisamente uno de los principales problemas de PHP es la inconsistencia en los nombres de las funciones en las librerías estándar (un ejemplo, str_replace pero substr y strpos, en lugar de ser todas, por ejemplo str:pos, str:sub, str:replace). Creo que sería mejor adaptarse a Lua. Con esto me refiero a utilizar tablas y crear unos nombres consistentes y propios, aunque la funcionalidad ofrecida sí sea la misma de las funciones de PHP.
develCuy escribió
hace 10 meses
En el caso que tengas scripts muy grandes para migrar y muy bajo presupuesto, significa un ahorro importante no tener que aprender las nuevas funciones. Mi punto es, tener una librería intermedia entre PHP y Lua, va ha significar aprender funciones que luego ya no necesitaré, en vez de aprender directamente las funciones de Lua. Te confieso que conforme desarrollo la librería aprendo más de Lua y me gusta cada vez más, es lo mismo que quiero transmitir con Nutria.
Venkman escribió
hace 10 meses
Sí, lo entiendo, pero... no me termina de gustar heredar una de las peores partes de un lenguaje al pasar a otro (y ciertamente, las inconsistencias de nombre de PHP no creo que sea nada interesante conservar)
© Copyright 2008-2009 debug_mode=ON | Aviso legal | Contacto | FAQ | ¿Quiénes somos? |
#1
Me encanta que este lenguaje está ganando popularidad.
Soy un tipo vago y tengo que aprender otros lenguajes de programación para mejorar mi conocimiento. Es curioso que después de trabajar con Lua ahora no veo PHP tan... Horrible.
Pero ojo. Me parece que es un lenguaje para los frikis (es decir tú y yo, tío) - En Infojobs.net con '115.152 Puestos vacantes' no sale con ningún entrada para 'Lua'.