A L IN G U A G E M L U A
RobertoIerusalimschy,PUC-Rio
Lua t he la n gu
a g e
1
R O T E IR O D A A P R E S E N T A C ¸ ˜ A O
Oque´e?
Ondeest´a?
Porqueusar?
Como´e?
Comofoi?
2
O Q U E ´ E L U A
•Maisumalinguagemdescript
◦n˜aototalmentediferentedePerl,Python,Tcl
•UmalinguagemdeDescric¸˜aodeDados
◦n˜aototalmentediferentedeXML
•Caracter´ısticasb´asicas:simples,por
t´atil,
eficiente,pequena
• ´Unicalinguagemdeprogramac¸˜aodesenvolvidaforadoprimeiromundoater aceitac¸˜aomundial
◦centenasdemilharesdeusu´arios
◦usadaporIntel,Conectiva,Microsoft,LucasArts,Petrobras,etc.
3
O N D E E S T ´ A
Nichoemjogos
◦LucasArts:GrimFandango,EscapeFromMonkeyIsland
◦BioWare:Baldur’sGate,MDK2
◦Microsoftgames:Mythica
◦freeware:Angband(RPG)
OutrosUsos
◦Conectiva:APT-RPM(padr˜aoparadistribuic¸˜oesRPM)
◦Intel:ferramentainternaparalayoutdechips
◦tomsrtbt:“ThemostLinuxononefloppydisk”
◦...
4
O N D E E S T ´ A
5
P O R Q U E L U A
Pequena
◦interpretadorcompletomaisbibliotecasb´asicastem140K
Por
t´atil
◦escritaemANSIC,compilaomesmoc´odigoemtodasasplataformas
◦Unix,Windows(incluindoCE),PlaystationII,OS/390,XBox,BeOS,DOS,
PalmOS,EPOC,sistemasembutidos,etc.
Eficiente
◦verwww.bagley.org/˜doug/shootout
6
P O R Q U E L U A . . .
•Acopl´avel
◦biblioteca,comAPIbemdefinidaesimplesparaC
◦bibliotecasb´asicasimplementadasemCatrav´esdaAPI
◦acopladaadiversaslinguagens:C/C++,Java,Fortran,Ruby,OPL(lin-
guagemdoEPOC),etc.
•Simpleseflex´ıvel
◦linguagempequena,compoucos(maspoderosos)mecanismos.
◦poucoscasosespeciais
7
C O M O ´ E L U A
Linguagemcomcaraconvencional
Gerˆenciaautom´aticademem´oria
tipagemdinˆamica
functionfact(n)
ifn==0then
return1
else
returnn*fact(n-1)
end
end
8
T A B E L A S
• ´UnicaestruturadedadosemLua
•Arraysassociativos
◦podemserindexadosporqualquervalor(n˜aoapenasstrings),earmazenar
qualquervalor
•Permiteimplementac¸˜aoeficienteesimplesdamaioriadasestruturasdedadosusadasnormalmente
◦arrays,records,conjuntos,matrizesesparsas,tabelas(!),etc.
•Implementac¸˜aoaltamenteotimizada
9
E S T R U T U R A S D E D A D O S
Arrays
locala={}
fori=1,Ndoa[i]=0end
Records
--a.x´eomesmoquea["x"]
locala.x="hello"
print(a.x)
Conjuntos:valorescomochaves
a[x]=true--inserex
a[x]=nil--removex
ifa[x]then...--testapertinˆencia
10
C O N S T R U T O R E S
•Express˜oesparacriareinicializartabelas
•EstiloEstrutura:
p={x=10,y=20}
print(p.x)-->10
•EstiloLista/Array:
p={"seg","ter","qua","qui","sex","sab","dom"}
print(p[3])-->qua
•EstiloMisto:
p={10,20,30;n=3}
11
D E S C R IC ¸ ˜ A O D E D A D O S
Construtoress˜aoumformatoadequadoparadescric¸˜aodedados
◦inspiradoemBiBTeX
Paralerumarquivodedados,bastaexecut´a-lo
Opc¸˜aoaXML
◦criadopornecessidade,bemantesdeXML(1993)
◦parsermaissimples,e(diferentementedeoutraslinguagens)bastanteefi-
ciente
◦temosdegrac¸aoutrasfacilidades,comocondicionais,var
i´av
eis(referˆencias
internas),coment´arios,etc.
12
<POEM>
<TITLE>LinesWritteninEarlySpring</TITLE>
<AUTHOR>
<FIRSTNAME>William</FIRSTNAME>
<LASTNAME>Wordsworth</LASTNAME>
</AUTHOR>
<STANZA>
<LINEN="1">Iheardathousandblendednotes,</LINE>
<LINEN="2">WhileingroveIsatereclined,</LINE>
<LINEN="3">Inthatsweetmoodwhenpleasantthoughts</LINE>
<LINEN="4">Bringsadthoughtstothemind.</LINE>
</STANZA>
<STANZA>
<LINEN="5">Toherfairworksdidnaturelink</LINE>
<LINEN="6">Thehumansoulthatthroughmeran;</LINE>
<LINEN="7">Andmuchitgriev’dmemyhearttothink</LINE>
<LINEN="8">Whatmanhasmadeofman.</LINE>
</STANZA>
</POEM>
13
POEM{
TITLE="LinesWritteninEarlySpring",
AUTHOR={firstname="William",lastname="Wordsworth"};
STANZA{
LINE{N=1;"Iheardathousandblendednotes,"},
LINE{N=2;"WhileingroveIsatereclined,"},
LINE{N=3;"Inthatsweetmoodwhenpleasantthoughts"},
LINE{N=4;"Bringsadthoughtstothemind."},},
STANZA{
LINE{N=5;"Toherfairworksdidnaturelink"},
LINE{N=6;"Thehumansoulthatthroughmeran;"},
LINE{N=7;"Andmuchitgriev’dmemyhearttothink"},
LINE{N=8;"Whatmanhasmadeofman."},}}
14
E D A ´ I ?
•Podemosfazeromesmoemv´ariasoutraslinguagens
•Masarquivosdedadospodemsermuitograndesquandovistoscomoprogra-
mas...
•Paraumarquivocom100K,Luaotrataem1.2seg,Perlem5.3seg,ePython
em16.8seg.
•Paraumarquivocom1M,Luaotrataem12seg,PerlePythonderrubama
m´aquina(“trash”).
15
F A C IL ID A D E S F U N C IO N A IS
Luaintegrapoderosasfacilidadesfuncionais
◦masdentrodeumalinguagemconvencional;n˜aoforc¸aoprogramadora
outroparadigma
Func¸˜oesdeprimeiraclasse;visiblidade
l´exica localalunos={"maria","jo˜ao","suzana"}
localnotas={maria=10,jo˜ao=6.5,suzana=8.7}
table.sort(alunos,function(a,b)
returnnotas[a]<notas[b]
end)Implementac¸˜aoeficiente
16
C O R O T IN A S
•multi-threadingcooperativo
•Bemmaisleve(emaissimples)quemulti-threading“real”
•Implementac¸˜aototalmentepor
t´atil!
17
C O M O F O I : O I N ´ IC IO
Motivac¸˜aoindustrialdupla
◦DentrodeumaparceriacomaPetrobras
PGM(ProgramaGr´aficoMestre)necessitavadeumalinguagemde“descric¸˜ao
dedados”
◦XMLseriaumaboaopc¸˜ao,masissoera1993...
ED:programadeentradadedados,
j´atinhaumalinguagemde“descric¸˜ao”,
masprecisavadefacilidadesoperativas
◦ProblemaaindarecorrenteemXML
18
P R O G R A M A G R ´ A FI C O M E S T R E
19
L U A V E R S ˜ A O 1 .0
BatizadadeVers˜ao1.0aposteriori
Thesimplestthingthatcouldpossiblywork
Implementac¸˜ao“padr˜ao”,comyacc/lex
Sucessodep´ublico(noTecgraf)
◦usadacomsucessonoPGMenoED,logousadaemoutrosprojetos
tamb´em
20
L U A V E R S ˜ A O 1 .1 — 1 9 9 4
•Maiseficiente
•Primeiradistribuic¸˜aop´ublicaviaInternet
◦ftp
•Licenc¸alivreparausoacadˆemico,restritivaparausocomercial
◦C´odigoaberto,masn˜aolivre
◦problemascomaconcorrˆencia(Tcl,Perl,...)
21
L U A 2
Lua2.1(Fevereiro1995)—2.5(Novembro1996)
Primeiravers˜aocomlicenc¸alivre(“freesoftware”)
◦licenc¸apr´opria,posteriormentereconhecidapelaFSFeOS
fallbacks:mecanismodeextens˜ao
◦suporteparaprogramac¸˜aoOO
Pattern-matching
◦viabiblioteca
CGILua(HTMLLua):primeiravers˜aoentre1994–1995
22
E X P O S IC ¸ ˜ A O I N T E R N A C IO N A L
•Noin´ıciode1995,criamosaprimeirahomepagedeLua
•Trocademensagenscomv´ariosusu´ariosemv´ariasinstituic¸˜oes
•Emjunhode1996,saiartigonaSoftware:Practice&Experience
•Emdezembrode1996,artigonaDr.Dobb’s
•Noin´ıciode1997,criamosalistadediscuss˜ao
•Emmeadosde1997,prˆemioCOMPAQ
23
L U A E M J O G O S
BretMogilefsky<[email protected]>
"’[email protected].br’"<[email protected]r>LUArocks!Question,too.
Thu,9Jan199713:21:41-0800
there...
readingtheDr.DobbsarticleonLuaIwasveryeagertocheckit
andsofarithasexceededmyexpectationsineveryway!It’sandsimplicityastoundme.Congratulationsondevelopingsuchwell-thoughtoutlanguage.
background:IamworkingonanadventuregamefortheLucasArtsCo.,andIwanttotryreplacingourolderadventuregame
language,SCUMM,withLua.
24
L U A 3
•Lua3.0(Julho1997)—Lua3.2(Julho1999)
•Em1998,surgiuologodeLua:
Lua
the languag e
•Tamb´emem1998,CameronLaird(quemantinhaumacolunasobrelinguagens
descriptnaSunWorld)escreveusobreLua:
Itsuserbaseisalsosmall;theremightbeonlyafewtensofthousands
ofLuaprogrammersintheworld.They’reveryfondofthislanguage,
though,andtheimminentexplosionofubiquitousembeddedprocessing
(computersinyourcar,inyourplumbing,andinyourkitchenappliances)
canonlyworkinfavorofLua.
•Paran´os,essa“pequena”basedeusu´arioseramuitomaiordoqueima-
gin´avamos
25
L U A 4
Lua4.0(Novembro2000–Marc¸o2003)
C´odigoem“cleanC”(intersec¸˜aoentreCeC++)
Finalde2000,s´eriedereportagensnoBrasil
Emmarc¸ode2001,novoenderec¸oemwww.lua.org
◦cortesiadeumusu´ario
Poucodepois,sitedosusu´ariosdeLua(lua-users.org)
◦wiki,gerenciadosemnossaparticipac¸˜ao
Ap´osdoisanos,um´unicorelease4.0.1corrigindobugs
◦menosdedezbugs
26
L U A 5
•Lanc¸adaemmarc¸o2003
•Corotinas,visibilidade
l´exica,
melhoresfacilidadesparam´odulos
•Implementac¸˜aocomv´ariasnovidades:
◦m´aquinavirtualviaregistradores
◦novoalgoritmoparatabelas
27
L U A A T U A L M E N T E
Sitecomquase1000visitasdi´arias
◦vindasdemaisde80pa´ıses
Listacommaisde400participantes
◦15%doBrasil
◦cortesiadaConectiva
◦m´ediademaisdedezmensagenspordia
Usadaemcentenas(milhares?)deprodutos
Manualtraduzidoparacoreanoejaponˆes
28
L U A A T U A L M E N T E
•Quasedezanosdeevoluc¸˜ao
•Compromissosfortescomestabilidade
◦Lua4.0ficoumaisdedoisanossemalterac¸˜oes
•Requisitosoriginaismantidos
◦simplicidade
◦portabilidade
◦extensibilidade
◦pequenotamanho
◦eficiˆencia
29
Lua the la ng u
a g e
www .lua.org
30