Escolar Documentos
Profissional Documentos
Cultura Documentos
A Evoluo de Lua
Lua
O qu? Onde? Por qu? Como?
O que Lua
Mais uma linguagem dinmica
alguma similaridade com Perl, Python, Tcl
nfase em scripting
de linguagem dinmica! nfase em comunicao inter-linguagens enfatiza desenvolvimento em mltiplas linguagens
63% of the main Lightroom-team authored code is Lua, Troy Gaul, Adobe
Ginga
middleware padro brasileiro para TV digital
Wireshark
analisador de protocolos
Snort
intrusion detection and prevention system
nmap
rastreador de redes para segurana
E muitas outras...
Lua em Jogos
It is easy to see why Lua is rapidly becoming the de facto standart for game scripting. Artificial Intelligence for Games, Morgan Kaufmann, 2006. Its quite possible that game developers will look back at the 2000s as the decade of Lua., Game Programming Gems 5, Charles River Media, 2005.
Porque Lua
Portabilidade Simplicidade Pequeno tamanho Acoplabilidade (embedding)
scripting
Eficincia
Portabilidade
Roda em praticamente todas as plataformas que j ouvimos falar
Unix, Windows, Windows CE, Symbian, BREW, hardware dedicado, Palm, PSP, etc.
Simplicidade
Um nico tipo de estrutura de dados
tabelas
Pequeno Tamanho
Incluir Lua numa aplicao no aumenta quase nada o seu tamanho.
O pacote de Lua 5.1.4, contendo o cdigo fonte, documentao e exemplos, ocupa 212K comprimido e 860K descompactado. O fonte contm cerca de 17000 linhas de C. No Linux, o interpretador Lua contendo todas as bibliotecas padres de Lua ocupa 153K e a biblioteca Lua ocupa 203K.
Acoplabilidade
Lua uma biblioteca C API simples e bem definida
tipos simples operaes primitivas modelo de pilha
Bi-direcional! Acoplada em C/C++, Java, Fortran, C#, Perl, Ruby, Ada, etc.
Eficincia
Benchmarks independentes mostram Lua entre as mais rpidas no grupo de linguagens interpretadas com tipagem dinmica Mistura de algumas tcnicas especiais e simplicidade
O Incio de Lua
Interfaces Grficas
1992: Tecgraf projeto entre PUC e PETROBRAS (CENPES)
A PETROBRAS passou a economizar tempo e conseguiu organizar mais os detalhes especficos das escavaes, como temperatura certa da gua e local de atuao das escavadeiras (disse o professor Roberto Ierusalimschy, associado do Departamento de Informtica da PUC-Rio).
Limitaes de DEL
Tomada de deciso Predicados Necessidade de maior poder de expresso
Limitaes de SOL
Recursos para construo de dilogos Mecanismos de programao procedural Mecanismos de abstrao mais poderosos
1993
SEL e SOL tinham vrios problemas em comum Roberto Ierusalimschy (PGM), Luiz Henrique de Figueiredo (DEL) e Waldemar Celes (PGM) se juntaram para achar uma soluo comum a seus problemas...
De Que Precisavam?
Uma linguagem de configurao genrica Uma linguagem completa Facilmente acoplvel Porttil O mais simples possvel Sintaxe no intimidante
para usurios finais (engenheiros, gelogos, etc.)
function track (t) if not t.x then t.x = 0.0 end if type(t.x) = number then print(invalid x value) end if type(t.y) = number then print(invalid y value) end end
Lua 1.0
Implementada como uma biblioteca Chamada de 1.0 posteriormente A coisa mais simples que poderia funcionar
tabelas implementadas via listas!
Implementao padro
pr-compilador com yacc/lex opcodes para uma mquina virtual baseada em pilha
Lua 1.0
Expectativas: solucionar os problemas com PGM e DEL
poderia ser usada em outros projetos do Tecgraf
Satisfez as expectativas
tanto DEL quanto PGM usaram Lua com sucesso PGM ainda em uso hoje
Lua 1.1
J tinha vrios usurios reais Novos usurios trazem novas demandas Manual de referncia API com C bem definida e bem documentada
Tipos de Dados
So oito tipos de dados, que so utilizados em Lua, que so eles:
nil representa ausncia de valor; boolean true ou false; number nmeros reais; string cadeia de caracteres, definido por uma sequencia de caracteres delimitados por ( ) ou ( ); userdata no um tipo de dados nativo de Lua, sendo utilizado para manipular os dados em C, atravs de uma API; thread, function e table so tipos de dados utilizados para referncia.
Operadores Relacionais
< menor que > maior que <= menor que ou igual a >= maior que ou igual a == igual a = diferente de
Lua 2
De Lua 2.1 (02/1995) at 2.5 (11/1996) Suporte para OO
Delegao
Casamento de padres
Biblioteca prpria
Lua 3
De Lua 3.0 (07/1997) at Lua 3.2 (07/1999) Melhor suporte a funes
funes annimas, upvalues
Lua 4
Uma nica verso: Lua 4.0, 11/2000 at 04/2003 Nova API com C
baseada em pilha
Lua 5
Lua 5.0 (04/2003) e 5.1 (02/2006) Maturidade da linguagem
livro texto
Co-rotinas Sistema de mdulos Funes annimas com escopo lxico Mquina virtual de registradores Coleta de lixo incremental
Evoluo
nfase nos requisitos originais
minimalismo pragmtico implementao free-standing mecanismos mais gerais nfase em funes
Aspectos no funcionais
documentao, robustez, mensagens de erros, ...
Lua Atualmente
Site com mais de 4.000 visitas por dia
de mais de 100 pases mais de 14.000 downloads por ms
Lua Atualmente
Licena atual: MIT
uso livre, no viral
Lua Atualmente
Requisitos originais mantidos
simplicidade, portabilidade, extensibilidade, pequeno tamanho
www.tiobe.com
ndice TIOBE Comunidade programao para novembro de 2010. O ndice TIOBE Programming Comunidade um indicador da popularidade de linguagens de programao. O ndice atualizado uma vez por ms e pode ser utilizado para verificar se suas habilidades de programao ainda esto atualizadas. Lua est na 22 posio.
Download e Instalao
A instalao de Lua simples. Utilizaremos como base o Windows 7
1. Faa o download de Lua no site www.lua.org/download.html 2. Execute o arquivo como administrator: next next finish
2.1. Assim que a instalao for concluda, existe a opo de visualizar exemplos. uma boa pedida.
Download e Instalao
3. Para testar a instalao basta abrir o prompt do DOS (iniciar executar cmd) e executar o comando lua
O interpretador Lua dever ser iniciado Microsoft Windows 7 [verso 7100] (C) Copyright 1985-2010 Microsoft Corp. C:\Documents and Settings\...>lua Lua 5.1.4 Copyright (C) 1994-2008 Lua.org, PUC-Rio
Exemplos
Concatenao
local name = nome de algum print(Oi ..name.., voce quer ser meu amigo?)
Leitura de Dados
io.write(Qual seu nome?\n ) local name = io.read() print (Oi ..name.., voce quer ser meu amigo?)
Exemplo
Joguinho de Par ou mpar
x = 1 while x == 1 do printvoce quer par(0) ou impar(1)? a = io.read(*n) if a == 0 then human = 0 computer = 1 printvoc escolheu par e o computador escolheu mpar else human = 1 computer = 0 printvoc escolheu mpar e o computador escolheu par end printagora escolha seu nmero
humannumber = io.read(*n) computernumber = math.random(50) print(o computador escolheu ..computernumber soma = humannumber + computernumber d = math.mod(soma,2) if d == o then if human == 0 then print(voc ganhou!!!) else print(o computador ganhou) end
else if human == 1 then print(voc ganhou :)) else print)o computador ganhou :() end end printpara jogar mais uma vez digite (1) para sair digite (2) x = io.read(*n) end
A mente que se abre a uma nova idia jamais voltar ao seu tamanho Albert Einstein original.