LABORATÓRIO
DE PESQUISA
E INOVAÇÃO
EM
TECNOLOGIAS
E
ESTRATÉGIAS
DE
AUTOMAÇÃO
TEAR
Particularidades e aplicações
Rafael Sanches & Rogers Cristo
Prof. Dr. Antonio Francisco do Prado
ÍNDICE
• História da Linguagem
• Paradigmas suportados
• Sintaxe da Linguagem
• Aplicações da Linguagem
• Conclusão
• Referências Bibliográficas
2
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
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
PARADIGMAS SUPORTADOS
5
Scripting Imperativo
Funcional Orientado a Objetos
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
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
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)
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.
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
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
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)
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.
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;
}
APLICAÇÕES DA LINGUAGEM
15
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.
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
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
APLICAÇÕES DA LINGUAGEM
19
EXEMPLO DE JOGO
APLICAÇÕES DA LINGUAGEM
20
• Aplicações recentes Tecgraf/Petrobras
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/
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!
REFERÊNCIAS
23
 http://www.lua.org/
 http://www.tecgraf.puc-rio.br/
 http://coronalabs.com/
 http://www.telemidia.puc-rio.br/
www.tear.dc.ufscar.br
OBRIGADO!

Apresentação sobre a linguagem lua

  • 1.
    LABORATÓRIO DE PESQUISA E INOVAÇÃO EM TECNOLOGIAS E ESTRATÉGIAS DE AUTOMAÇÃO TEAR Particularidadese aplicações Rafael Sanches & Rogers Cristo Prof. Dr. Antonio Francisco do Prado
  • 2.
    ÍNDICE • História daLinguagem • 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
  • 5.
  • 6.
    SINTAXE DA LINGUAGEM 6 IFTHEN 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; }
  • 15.
  • 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
  • 19.
  • 20.
    APLICAÇÕES DA LINGUAGEM 20 •Aplicações recentes Tecgraf/Petrobras
  • 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 queescolher Lua?  Lua é linguagem estabelecida e robusta.  Lua é rápida.  Lua é portátil e embutível.  Lua é simples pequena.  Lua é poderosa.  Lua é opensource. Lua é BRASILEIRO!
  • 23.
    REFERÊNCIAS 23  http://www.lua.org/  http://www.tecgraf.puc-rio.br/ http://coronalabs.com/  http://www.telemidia.puc-rio.br/
  • 24.