SlideShare una empresa de Scribd logo
1 de 24
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!

Más contenido relacionado

La actualidad más candente

Python Workshop - Learn Python the Hard Way
Python Workshop - Learn Python the Hard WayPython Workshop - Learn Python the Hard Way
Python Workshop - Learn Python the Hard WayUtkarsh Sengar
 
Estrutura de dados em Java - Ponteiros e Alocação de Memória
Estrutura de dados em Java - Ponteiros e Alocação de Memória Estrutura de dados em Java - Ponteiros e Alocação de Memória
Estrutura de dados em Java - Ponteiros e Alocação de Memória Adriano Teixeira de Souza
 
Relatório da base de dados
Relatório da base de dadosRelatório da base de dados
Relatório da base de dadosBernardo Pinto
 
Sisteme de Operare: Gestiunea memoriei
Sisteme de Operare: Gestiunea memorieiSisteme de Operare: Gestiunea memoriei
Sisteme de Operare: Gestiunea memorieiAlexandru Radovici
 
Estrutura de Dados Aula 13 - Árvores (conceito, elementos, tipos e utilizações)
Estrutura de Dados Aula 13 - Árvores (conceito, elementos, tipos e utilizações)Estrutura de Dados Aula 13 - Árvores (conceito, elementos, tipos e utilizações)
Estrutura de Dados Aula 13 - Árvores (conceito, elementos, tipos e utilizações)Leinylson Fontinele
 
OODP Unit 1 OOPs classes and objects
OODP Unit 1 OOPs classes and objectsOODP Unit 1 OOPs classes and objects
OODP Unit 1 OOPs classes and objectsShanmuganathan C
 
Aprendendo Kotlin na Prática
Aprendendo Kotlin na PráticaAprendendo Kotlin na Prática
Aprendendo Kotlin na PráticaFelipe Pedroso
 
Python ppt.pdf
Python ppt.pdfPython ppt.pdf
Python ppt.pdfkalai75
 
Introduction to python
Introduction to pythonIntroduction to python
Introduction to pythonAgung Wahyudi
 
Let’s Learn Python An introduction to Python
Let’s Learn Python An introduction to Python Let’s Learn Python An introduction to Python
Let’s Learn Python An introduction to Python Jaganadh Gopinadhan
 
Revisão Sobre Programação Orientada a Objetos com Java
Revisão Sobre Programação Orientada a Objetos com Java Revisão Sobre Programação Orientada a Objetos com Java
Revisão Sobre Programação Orientada a Objetos com Java Mario Jorge Pereira
 
Parsing Expression With Xtext
Parsing Expression With XtextParsing Expression With Xtext
Parsing Expression With XtextSven Efftinge
 
Python for kids - 1.pptx
Python for kids - 1.pptxPython for kids - 1.pptx
Python for kids - 1.pptxsanyam1427
 
Banco de Dados - Modelo Lógico, Chave primária e Chave estrangeira
Banco de Dados - Modelo Lógico, Chave primária e Chave estrangeiraBanco de Dados - Modelo Lógico, Chave primária e Chave estrangeira
Banco de Dados - Modelo Lógico, Chave primária e Chave estrangeiraNatanael Simões
 

La actualidad más candente (20)

Python Workshop - Learn Python the Hard Way
Python Workshop - Learn Python the Hard WayPython Workshop - Learn Python the Hard Way
Python Workshop - Learn Python the Hard Way
 
Programando com Python
Programando com PythonProgramando com Python
Programando com Python
 
Poo
PooPoo
Poo
 
Estrutura de dados em Java - Ponteiros e Alocação de Memória
Estrutura de dados em Java - Ponteiros e Alocação de Memória Estrutura de dados em Java - Ponteiros e Alocação de Memória
Estrutura de dados em Java - Ponteiros e Alocação de Memória
 
Relatório da base de dados
Relatório da base de dadosRelatório da base de dados
Relatório da base de dados
 
Sisteme de Operare: Gestiunea memoriei
Sisteme de Operare: Gestiunea memorieiSisteme de Operare: Gestiunea memoriei
Sisteme de Operare: Gestiunea memoriei
 
Torre de hanoi
Torre de hanoiTorre de hanoi
Torre de hanoi
 
Estrutura de Dados Aula 13 - Árvores (conceito, elementos, tipos e utilizações)
Estrutura de Dados Aula 13 - Árvores (conceito, elementos, tipos e utilizações)Estrutura de Dados Aula 13 - Árvores (conceito, elementos, tipos e utilizações)
Estrutura de Dados Aula 13 - Árvores (conceito, elementos, tipos e utilizações)
 
Linguagem C clecioamerico
Linguagem C clecioamericoLinguagem C clecioamerico
Linguagem C clecioamerico
 
Python collections
Python collectionsPython collections
Python collections
 
OODP Unit 1 OOPs classes and objects
OODP Unit 1 OOPs classes and objectsOODP Unit 1 OOPs classes and objects
OODP Unit 1 OOPs classes and objects
 
Aprendendo Kotlin na Prática
Aprendendo Kotlin na PráticaAprendendo Kotlin na Prática
Aprendendo Kotlin na Prática
 
Python ppt.pdf
Python ppt.pdfPython ppt.pdf
Python ppt.pdf
 
Introduction to python
Introduction to pythonIntroduction to python
Introduction to python
 
Let’s Learn Python An introduction to Python
Let’s Learn Python An introduction to Python Let’s Learn Python An introduction to Python
Let’s Learn Python An introduction to Python
 
Revisão Sobre Programação Orientada a Objetos com Java
Revisão Sobre Programação Orientada a Objetos com Java Revisão Sobre Programação Orientada a Objetos com Java
Revisão Sobre Programação Orientada a Objetos com Java
 
Parsing Expression With Xtext
Parsing Expression With XtextParsing Expression With Xtext
Parsing Expression With Xtext
 
Python for kids - 1.pptx
Python for kids - 1.pptxPython for kids - 1.pptx
Python for kids - 1.pptx
 
Banco de Dados - Modelo Lógico, Chave primária e Chave estrangeira
Banco de Dados - Modelo Lógico, Chave primária e Chave estrangeiraBanco de Dados - Modelo Lógico, Chave primária e Chave estrangeira
Banco de Dados - Modelo Lógico, Chave primária e Chave estrangeira
 
Mini-Curso: gnuplot
Mini-Curso: gnuplotMini-Curso: gnuplot
Mini-Curso: gnuplot
 

Destacado

A Linguagem Lua - Uma abordagem inicial
A Linguagem Lua - Uma abordagem inicialA Linguagem Lua - Uma abordagem inicial
A Linguagem Lua - Uma abordagem inicialFlávio Schuindt
 
Linguagem de programação darwin
Linguagem de programação darwinLinguagem de programação darwin
Linguagem de programação darwindiokavalan
 
Palestra: Desafios do desenvolvedor no mercado de trabalho
Palestra: Desafios do desenvolvedor no mercado de trabalhoPalestra: Desafios do desenvolvedor no mercado de trabalho
Palestra: Desafios do desenvolvedor no mercado de trabalhoJanynne Gomes
 
Logica programar
Logica programarLogica programar
Logica programarManawydan
 
Linguagens de Script: Caso de Estudo Lua
Linguagens de Script: Caso de Estudo LuaLinguagens de Script: Caso de Estudo Lua
Linguagens de Script: Caso de Estudo LuaSérgio Souza Costa
 
A Evolução de Lua (Pycon Brasil 2008)
A Evolução de Lua (Pycon Brasil  2008)A Evolução de Lua (Pycon Brasil  2008)
A Evolução de Lua (Pycon Brasil 2008)guest55e576
 
Apresentando a Linguagem de Programação Python
Apresentando a Linguagem de Programação PythonApresentando a Linguagem de Programação Python
Apresentando a Linguagem de Programação PythonPriscila Mayumi
 
Introdução ao paradigma imperativo
Introdução ao paradigma imperativoIntrodução ao paradigma imperativo
Introdução ao paradigma imperativoTony Alexander Hild
 
Seminário - Guido van Rossum: Breve história da linguagem Python
Seminário - Guido van Rossum: Breve história da linguagem PythonSeminário - Guido van Rossum: Breve história da linguagem Python
Seminário - Guido van Rossum: Breve história da linguagem PythonGiancarlo Silva
 
Curso de programação para iniciantes: Qual linguagem de programação escolher?
Curso de programação para iniciantes: Qual linguagem de programação escolher?Curso de programação para iniciantes: Qual linguagem de programação escolher?
Curso de programação para iniciantes: Qual linguagem de programação escolher?Harlley Oliveira
 

Destacado (14)

A Linguagem Lua - Uma abordagem inicial
A Linguagem Lua - Uma abordagem inicialA Linguagem Lua - Uma abordagem inicial
A Linguagem Lua - Uma abordagem inicial
 
Linguagem de programação darwin
Linguagem de programação darwinLinguagem de programação darwin
Linguagem de programação darwin
 
Palestra: Desafios do desenvolvedor no mercado de trabalho
Palestra: Desafios do desenvolvedor no mercado de trabalhoPalestra: Desafios do desenvolvedor no mercado de trabalho
Palestra: Desafios do desenvolvedor no mercado de trabalho
 
Logica programar
Logica programarLogica programar
Logica programar
 
Linguagens de Script: Caso de Estudo Lua
Linguagens de Script: Caso de Estudo LuaLinguagens de Script: Caso de Estudo Lua
Linguagens de Script: Caso de Estudo Lua
 
A Evolução de Lua (Pycon Brasil 2008)
A Evolução de Lua (Pycon Brasil  2008)A Evolução de Lua (Pycon Brasil  2008)
A Evolução de Lua (Pycon Brasil 2008)
 
Apresentando a Linguagem de Programação Python
Apresentando a Linguagem de Programação PythonApresentando a Linguagem de Programação Python
Apresentando a Linguagem de Programação Python
 
Introdução ao paradigma imperativo
Introdução ao paradigma imperativoIntrodução ao paradigma imperativo
Introdução ao paradigma imperativo
 
Lógica de Programação
Lógica de ProgramaçãoLógica de Programação
Lógica de Programação
 
Seminário - Guido van Rossum: Breve história da linguagem Python
Seminário - Guido van Rossum: Breve história da linguagem PythonSeminário - Guido van Rossum: Breve história da linguagem Python
Seminário - Guido van Rossum: Breve história da linguagem Python
 
Curso de programação para iniciantes: Qual linguagem de programação escolher?
Curso de programação para iniciantes: Qual linguagem de programação escolher?Curso de programação para iniciantes: Qual linguagem de programação escolher?
Curso de programação para iniciantes: Qual linguagem de programação escolher?
 
Python - Introdução
Python - IntroduçãoPython - Introdução
Python - Introdução
 
Seminário: Lua
Seminário: LuaSeminário: Lua
Seminário: Lua
 
Slideshare
SlideshareSlideshare
Slideshare
 

Similar a Apresentação sobre a linguagem lua

Aula5 introducao c
Aula5 introducao cAula5 introducao c
Aula5 introducao cprofwtelles
 
Paradigmas de Linguagens de programacao - Aula #2
Paradigmas de Linguagens de programacao - Aula #2Paradigmas de Linguagens de programacao - Aula #2
Paradigmas de Linguagens de programacao - Aula #2Ismar Silveira
 
Matlab – curso básico (1)
Matlab – curso básico (1)Matlab – curso básico (1)
Matlab – curso básico (1)Felipe Meganha
 
Lógica de programação pascal
Lógica de programação   pascalLógica de programação   pascal
Lógica de programação pascalJocelma Rios
 
5.II SACIC - 2010 - Desenvolvimento de Aplicações para TVDigital com NCLUA
5.II SACIC - 2010 - Desenvolvimento de Aplicações para TVDigital com NCLUA5.II SACIC - 2010 - Desenvolvimento de Aplicações para TVDigital com NCLUA
5.II SACIC - 2010 - Desenvolvimento de Aplicações para TVDigital com NCLUACândido Sales Gomes
 
Otimizações em Sistemas de Armazenamento mediadas por anotações em Metadados
Otimizações em Sistemas de Armazenamento mediadas por anotações em MetadadosOtimizações em Sistemas de Armazenamento mediadas por anotações em Metadados
Otimizações em Sistemas de Armazenamento mediadas por anotações em Metadadosricardoas
 
Python Funcional
Python FuncionalPython Funcional
Python Funcionalpugpe
 
Python para desenvolvedores - material apoio (parte I)
Python para desenvolvedores - material apoio (parte I)Python para desenvolvedores - material apoio (parte I)
Python para desenvolvedores - material apoio (parte I)Marcelo Barros de Almeida
 
Linguagem de programação haskell
Linguagem de programação haskellLinguagem de programação haskell
Linguagem de programação haskellDaniel Farias
 
Programação funcional
Programação funcionalProgramação funcional
Programação funcionalNatan Mai
 
Escrevendo modulos python com rust
Escrevendo modulos python com rustEscrevendo modulos python com rust
Escrevendo modulos python com rustBruno Rocha
 
Ruby - Criando código para máquinas e humanos
Ruby - Criando código para máquinas e humanosRuby - Criando código para máquinas e humanos
Ruby - Criando código para máquinas e humanosGregorio Kusowski
 
R: a alternativa ao SPSS e ao NVivo em software livre
R: a alternativa ao SPSS e ao NVivo em software livreR: a alternativa ao SPSS e ao NVivo em software livre
R: a alternativa ao SPSS e ao NVivo em software livreLuis Borges Gouveia
 

Similar a Apresentação sobre a linguagem lua (20)

Aula5 introducao c
Aula5 introducao cAula5 introducao c
Aula5 introducao c
 
Aula5 introducao c
Aula5 introducao cAula5 introducao c
Aula5 introducao c
 
Paradigmas de Linguagens de programacao - Aula #2
Paradigmas de Linguagens de programacao - Aula #2Paradigmas de Linguagens de programacao - Aula #2
Paradigmas de Linguagens de programacao - Aula #2
 
Introdução ao paradigma funcional com scala
Introdução ao paradigma funcional com scalaIntrodução ao paradigma funcional com scala
Introdução ao paradigma funcional com scala
 
Haskell - Introdução
Haskell - IntroduçãoHaskell - Introdução
Haskell - Introdução
 
Matlab – curso básico (1)
Matlab – curso básico (1)Matlab – curso básico (1)
Matlab – curso básico (1)
 
Lógica de programação pascal
Lógica de programação   pascalLógica de programação   pascal
Lógica de programação pascal
 
5.II SACIC - 2010 - Desenvolvimento de Aplicações para TVDigital com NCLUA
5.II SACIC - 2010 - Desenvolvimento de Aplicações para TVDigital com NCLUA5.II SACIC - 2010 - Desenvolvimento de Aplicações para TVDigital com NCLUA
5.II SACIC - 2010 - Desenvolvimento de Aplicações para TVDigital com NCLUA
 
Otimizações em Sistemas de Armazenamento mediadas por anotações em Metadados
Otimizações em Sistemas de Armazenamento mediadas por anotações em MetadadosOtimizações em Sistemas de Armazenamento mediadas por anotações em Metadados
Otimizações em Sistemas de Armazenamento mediadas por anotações em Metadados
 
Pythonfuncional
PythonfuncionalPythonfuncional
Pythonfuncional
 
Python Funcional
Python FuncionalPython Funcional
Python Funcional
 
Python para desenvolvedores - material apoio (parte I)
Python para desenvolvedores - material apoio (parte I)Python para desenvolvedores - material apoio (parte I)
Python para desenvolvedores - material apoio (parte I)
 
Linguagem de programação haskell
Linguagem de programação haskellLinguagem de programação haskell
Linguagem de programação haskell
 
Oz
OzOz
Oz
 
Programação funcional
Programação funcionalProgramação funcional
Programação funcional
 
Aula4
Aula4Aula4
Aula4
 
Escrevendo modulos python com rust
Escrevendo modulos python com rustEscrevendo modulos python com rust
Escrevendo modulos python com rust
 
Ruby - Criando código para máquinas e humanos
Ruby - Criando código para máquinas e humanosRuby - Criando código para máquinas e humanos
Ruby - Criando código para máquinas e humanos
 
Workshop Python
Workshop PythonWorkshop Python
Workshop Python
 
R: a alternativa ao SPSS e ao NVivo em software livre
R: a alternativa ao SPSS e ao NVivo em software livreR: a alternativa ao SPSS e ao NVivo em software livre
R: a alternativa ao SPSS e ao NVivo em software livre
 

Apresentação sobre a linguagem lua

  • 1. 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
  • 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
  • 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 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!
  • 23. REFERÊNCIAS 23  http://www.lua.org/  http://www.tecgraf.puc-rio.br/  http://coronalabs.com/  http://www.telemidia.puc-rio.br/