Lua é uma linguagem de programação poderosa e leve, projetada para estender aplicações. Lua também é frequentemente usada como uma linguagem de propósito geral. Lua é software livre de código aberto.
Lua combina sintaxe simples para programação procedural com poderosas construções para descrição de dados, baseadas em tabelas associativas e semântica extensível. Lua é tipada dinamicamente, é interpretada a partir de bytecodes para uma máquina virtual, e tem gerenciamento automático de memória com coleta de lixo incremental. Essas características fazem de Lua uma linguagem ideal para configuração, automação (scripting) e prototipagem rápida.
Um conceito fundamental no projeto de Lua é fornecer meta-mecanismos para a implementação de construções, em vez de fornecer uma multidão de construções diretamente na linguagem. Por exemplo, embora Lua não seja uma linguagem puramente orientada a objetos, ela fornece meta-mecanismos para a implementação de classes e herança. Os meta-mecanismos de Lua trazem uma economia de conceitos e mantêm a linguagem pequena, ao mesmo tempo que permitem que a semântica seja estendida de maneiras não convencionais. Ter uma semântica extensível é uma das características mais marcantes de Lua.
Lua é uma engine que você pode acoplar à sua aplicação. Isso significa que, além de sintaxe e semântica, Lua fornece uma API que permite a aplicação trocar dados com programas Lua e estender Lua com funções C. Nesse sentido, Lua pode ser vista como um framework para construção de linguagens dedicadas a domínos específicos.
Tipos básicos
- Números (number) - São sempre ponto flutuante.
- Booleanos (boolean) - Um tipo tradicional. Introduzindo na versão 5.0.
- Tables (table) - Implementa várias estruturas de dados. (Vetores, records, matrizes e objetos)
- Funções (function) - Valor de primeira ordem.
- Strings (string) - Podem ser delimitados por ', " ou [[ ]].
- Dados do usuário (userdata) - Permite armazenar um ponteiro qualquer de C.
- Nil (nil) - Também conhecido como Null.
- Corotinas (thread).
Origem
Lua foi projetada e implementada por uma equipe no laboratório Lablua da PUC-Rio (Pontifícia Universidade Católica do Rio de Janeiro). Lua nasceu e cresceu no Tecgraf, o Grupo de Tecnologia em Computação Gráfica da PUC-Rio. Tanto o Tecgraf quanto Lablua são laboratórios do Departamento de Informática.
Características
- Da mesma família de Perl, Tcl, Python, etc;
- Linguagem embutida;
- Sintaxe simples e clara;
- Tipagem dinâmica;
- Coleta de lixo
- Grande poder de descrição de dados;
- Leve. Uma linguagem simples e pequena com poucos conceitos;
- Portável. (escrita em ANSI C clean)
- Execução controlada; Executa em PalmOS, EPOC (Symbian), Brew (Qualcomm), Playstation II, XBox, sistemas embutidos, mainframes, etc.
- Eficiente; Mais rápida que Perl, Python, Tcl, etc. http://shootout.alioth.debian.org/gp4/lua.php
- Fácil de ser embutida; C/C++, Java, Fortran, Ruby, OPL (EPOC), c#, etc.
Curiosidades
Função que retorna múltiplos valores.
Exemplo:
function foo()
return 'foo', 'bar'
end
x, y = foo()
print(x)
print(y)
Função definida dentro de uma função (closures), com total acesso as variáveis locais. (lexical scoping)
Exemplo:
function foo()
local str = 'foo!'
return function ()
return str
end
end
print(foo()())
-- Ou:
-- f = foo()
-- print(f())
Entre outras que estarei abordando em breve...
Para quem desejar conhecer projetos desenvolvidos com Lua: http://www.lua.org/uses.html
Bibliografia