Você está na página 1de 52

O Pequeno Bonito

A Evoluo de Lua

Lua
O qu? Onde? Por qu? Como?

O que Lua
Mais uma linguagem dinmica
alguma similaridade com Perl, Python, Tcl

Uma linguagem de descrio de dados


anterior a XML

nfase em scripting
de linguagem dinmica! nfase em comunicao inter-linguagens enfatiza desenvolvimento em mltiplas linguagens

Onde Lua Desenvolvida


Desenvolvida na PUC-Rio
desde 1993

Incio modesto, para uso interno


expanso lenta e gradual

Comit de trs pessoas


Roberto Ierusalimschy, Luiz Henrique de Figueiredo, Waldemar Celes

Onde Lua Usada


Todo tipo de aplicao Nicho em jogos

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

Eyeons Digital Fusion


ps-produo de filmes

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.

Alguns Jogos que usam Lua

Alguns Jogos que usam Lua

Alguns Jogos que usam Lua

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.

Escrita em ANSI C, ANSI C++


evita #ifdefs evita pontos obscuros do padro

Ncleo praticamente uma aplicao freestanding

Simplicidade
Um nico tipo de estrutura de dados
tabelas

Um nico tipo numrico


tipicamente double

Mecanismos ao invs de polticas


e.g., orientao a objetos

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).

Programa Grfico Mestre


1993: Projeto com a PETROBRAS
programa para visualizao de perfis geolgicos configurvel

DEL Linguagem para Especificao de Dilogos Definio de formulrio


lista de parmetros tipos e valores default

Limitaes de DEL
Tomada de deciso Predicados Necessidade de maior poder de expresso

SOL Simple Object Language Linguagem para descrio de objetos


sintaxe inspirada em BibTex
type @track {x:number, y:number=23, z} type @line {t:@track=@track{x=8}, z=number*} -- create an object t1, of type track t1 = @track{y=9, x=10, z=hi!} l = @line{t=@track{x=t1.y, y=t1.x}, z=[2,3,4]}

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.)

Como estavam largando SOL,

eis que surge...

Como era Lua 1.0?


No muito diferente de SOL...
t1 = @track{x = 10.3, y = 25.9, title = depth}

Como era 1.0?


Mas bem diferente...
t1 = @track{x = 10.3, y = 25.9, title = depth}

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

Menos de 6000 linhas de cdigo C

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

Foi um grande sucesso no Tecgraf

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

Interface para depurao

Lua em Jogos (o incio)


From: Bret Mogilefsky <mogul@lucasarts.com> To: lua@icad.puc-rio.br <lua@icad.puc-rio.br> Subject: LUA rocks! Question, too. Date: Thu, 9 Jan 1997 13:21:41 -0800 Hi there After reading the Dr. Dobbs article on Lua I was very eager to check it out, and so far it has exceeded my expectations in every way! Its elegance and simplicity astound me. Congratulations on developing such a well-thought out language. Some background: I am working on an adventure game for the LucasArts Entertainment Co., and I want to try replacing our older adventure game scripting language, SCUMM, with Lua.

Lua 3
De Lua 3.0 (07/1997) at Lua 3.2 (07/1999) Melhor suporte a funes
funes annimas, upvalues

Grande reorganizao interna

Lua 4
Uma nica verso: Lua 4.0, 11/2000 at 04/2003 Nova API com C
baseada em pilha

Mltiplos estados Todas as bibliotecas implementadas via API oficial

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

Compromissos fortes com estabilidade


Lua 4.0 ficou mais de dois anos sem alteraes Lua 5.1 lanada em fevereiro de 2006 Lua 5.1.4 a verso atual e a 5.2 est sendo testada.

Lua Atualmente
Licena atual: MIT
uso livre, no viral

Modelo de desenvolvimento centralizado


importante no caso de Lua, onde tamanho fundamental (evitar efeito comit)

mas com grande participao da comunidade


lista, verses variantes, site de usurios

Lua Atualmente
Requisitos originais mantidos
simplicidade, portabilidade, extensibilidade, pequeno tamanho

nica linguagem desenvolvida fora do eixo EUA/Europa/Japo a ser adotada mundialmente


entre as 25 mais populares do ndice TIOBE Ruby (a nica) do Japo

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

4. Lua instalado e pronto para utilizao

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?)

Fluxo de Controle Simples


io.write(numero \n) n = io.read(*number) if(n == 0) then print(Voce digitou o numero zero) end

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.

Você também pode gostar