O documento discute a história, sintaxe e aplicações da linguagem de programação Lua. A linguagem foi desenvolvida no Brasil em 1992 com foco em interfaces gráficas e simulações. Lua suporta paradigmas imperativo, funcional e orientado a objetos utilizando tabelas e funções. Exemplos de aplicações incluem jogos, navegadores e projetos de código aberto.
2. ÍNDICE
• História da Linguagem
• Paradigmas suportados
• Sintaxe da Linguagem
• Aplicações da Linguagem
• Conclusão
• Referências Bibliográficas
2
3. HISTÓRIA
3
1992: Tecgraf - projeto entre PUC e PETROBRAS (CENPES)
Roberto Ierusalimschy, Luiz H. de Figueiredo, Waldemar Celes
Construção de interfaces gráficas para diversos programas de simulação
1993: Projeto com a PETROBRAS programa para visualização de perfis
geológicos configurável
4. SINTAXE DA LINGUAGEM
4
• Tipos de dados
Nil – Vazio = a = nil
Number – a = 3 ou a = 3.5 ele assume tanto inteiros quanto flutuantes
String – texto = “Cadeia de Caracteres” ou texto2 = [[Programacao Lua]]
Table – Unica estrutura de dados assumida pela Linguagem == Array
Associativo
UserData - É usado para representar objetos externos a Lua (e.g., arquivos).
Function - foo = function { print(“Tipo Função”) } pode ou não ter retorno
Boolean – True ou False == Verdadeiro ou Falso
Coroutines – Threads em Lua
6. SINTAXE DA LINGUAGEM
6
IF THEN ELSE
if expr then
bloco
end
if exp then
bloco1...
else
bloco2...
end
OR OR
if expr1 then
bloco1
elseif expr2 then
bloco2
...
elseif expr N then
bloco N
else
bloco N+1
end
• Comandos de controle
7. SINTAXE DA LINGUAGEM
7
• Comandos de controle
WHILE FOR
Tomadas de decisão no início
while expr do
bloco
end
f = 1
--valor do fatorial
i = n
--controle do laço
while i > 0 do
f = f * i
i = i – 1
end
for var=init, limit do
--bloco
end
for var in list do
--bloco1
end
for key,value in ipairs(table) do
--bloco2
end
for var=init, limit, range do
--bloco3 o range e o intervalo
--da passagem exe 1..3..5..7
end
repeat
--bloco
until exp
REPEAT
Tomadas de decisão no fim
f = 1
--valor do fatorial
i = 1
--controle do laço
repeat
f = f * i
i = i + 1
until i > n
8. SINTAXE DA LINGUAGEM
8
Matrizes
vet = { {}, {}, {} }
vet[1][1] = 4
vet[1][2] = 34.5
Objetos
obj = {}
obj.atrib1 = 4
obj.met1 = f
Records
strut = {}
strut.campo = valor
strut.outro = 2.3
Vetores
vet = {}
vet[1] = 2.3
vet[2] = 3.45
vet[3] = 5.0
Tabelas
t = {}
t[‘nome’] = “Teste”
print(t.nome)
9. SINTAXE DA LINGUAGEM
9
• Criação de Funções
function name(p1,p2,p3)
local x = p1
local y = p2
local z = p3
end
function name(parameters)
return
end
function teste()
return 10,20
end
x,y = teste()
print("X = "..x.." Y = "..y)
Lua ainda tem a vantagem de atribuição múltipla e retorno múltiplo
Funções são criadas dinamicamente
Sintaxe function (<pars>) <body> end
Cria uma nova função
Equivalente a notação (lambda (<pars) <body>) da linguagem Scheme
Esta é uma abstração no λ -cálculo.
10. SINTAXE DA LINGUAGEM
10
• Paradigma Funcional
Lua não é uma linguagem puramente funcional
Funções definidas pelo programador como: cons, head, tail e empty
(semântica similar as presentes em outras linguagens funcionais), que
operam sobre tabelas.
local lista = cons ( 3 , cons (2 , cons (1 , Nil ) ) ) -- 1, 2 , 3
print ( lista ) -- (1 2 3)
print ( head ( lista ) ) -- 1
print ( tail ( lista ) ) -- (2 3)
print ( empty ( lista ) ) -- (false)
print ( lista ) -- (1 2 3), lista e ́imutável
11. SINTAXE DA LINGUAGEM
11
• Paradigma Orientado a Objetos
Também se vale da combinação de tabelas com funções de primeira classe.
Em Lua, um objeto é meramente uma tabela, contendo campos com seus
dados (variáveis de instância) e operações (métodos).
Rectangle = {x = 0, y = 0, width = 10, height = 20}
Rectangle.__index = Rectangle
function Rectangle:new (objeto)
setmetatable(objeto, self)
return objeto
end
function Rectangle:area ()
return self.width * self.height
end
r = Rectangle:new{width = 40, height = 60}
print(r:area()) → 2400
12. SINTAXE DA LINGUAGEM
12
• Paradigma Concorrente
Cada co-rotina em Lua representa uma linha de execução independente com
sua própria pilha de chamadas.
Bastante similares a linhas de execução (threads) cooperativas.
co = coroutine.wrap(function (x)
print(x)
coroutine.yield()--da um time aqui
print(2*x)
coroutine.yield()--da um time aqui
print(10*x)
end)
co(20)
--ela para no yield
co()
--ela continua de onde parou a execução anterior
co()
coroutine.create(f)
coroutine.wrap(f,corpo)
coroutine.resume(co,argumentos)
coroutine.running()
coroutine.status(f)
coroutine.yield(sim,nao)
13. SINTAXE DA LINGUAGEM
13
• User Data – Lua “Embarcada”
Lua foi projetada para se comunicar com C.
Uma distinção útil é entre embutir (embed) e estender uma linguagem de script.
Embutir é usar a linguagem como uma biblioteca C dentro de um programa
hospedeiro.
Enquanto estender é escrever o programa principal na linguagem dinâmica
estendida com funções escritas em C.
14. SINTAXE DA LINGUAGEM
14
• User Data – Lua “Embarcada”
Estendendo Lua.
#include "lua.h“
#include "lauxlib.h“
int main (int argc, char **argv) {
lua_State *L = luaL_newstate();
if (luaL_loadfile(L, argv[1]) != LUA_OK)
fprintf(stderr, "error: %sn",
lua_tostring(L, -1));
else if (lua_pcall(L, 0, 0, 0) != LUA_OK)
fprintf(stderr, "error: %sn",
lua_tostring(L, -1));
else {
lua_getglobal(L, "result");
printf("resultado: %fn", lua_tonumber(L, -1));
}
lua_close(L);
return 0;
}
16. APLICAÇÕES DA LINGUAGEM
16
Abrangência: chegou a possuir mais de
12 milhões de jogadores ativos.
Lua é utilizado em modificações de UI.
Abrangência: em 2012 bateu o número de
1 bilhão de downloads.
Lua é utilizado em conjunto com Objective-C
nas aplicações específicas de iOS.
Abrangência: possui atualmente 450
milhões de usuários.
Lua é a principal linguagem, junto com
Javascript, utilizada nas famosas extensões do
browser.
17. APLICAÇÕES DA LINGUAGEM
17
• Outras aplicações - Projetos
Celestia
Cheat Engine
ClanLib
CryEngine 3
Corona SDK
Damn Small Linux
Ginga
Kepler (software)
lighttpd
Liquid Feedback
MinGW
Monotone
Nmap
PlayStation Home
18. APLICAÇÕES DA LINGUAGEM
18
• Outras aplicações - Games
Baldur's Gate
The Battle for Wesnoth
Civilization V
Escape from Monkey Island
Fable II
Far Cry
FlyFF
Freeciv
Freelancer
Grim Fandango
Impossible Creatures
Lego Universe
MapleStory
MDK2
Monopoly Tycoon
Multi Theft Auto
Psychonauts2
Ragnarok Online
Roblox
Tibia
21. APLICAÇÕES DA LINGUAGEM
21
• Aplicação em TV Digital
A PUC-Rio continua o desenvolvimento da linguagem LUA
Foco em programas interativos para TV Digital
Mais informações: http://www.telemidia.puc-rio.br/
22. CONCLUSÃO
22
• Por que escolher Lua?
Lua é linguagem estabelecida e robusta.
Lua é rápida.
Lua é portátil e embutível.
Lua é simples pequena.
Lua é poderosa.
Lua é opensource. Lua é BRASILEIRO!