Descobrindo Lua
S´ergio Queiroz de Medeiros
smedeiros@inf.puc-rio.br LabLua
Campus Party 2009
Significado de LUA
I Leave Us Alone
I Little Useful Application
I Lua is Universally Applicable
I Lua is Ubiquitously ANSI (C)
I Lua is Undoubtlessly an Acronym
I Lua, the Undefined Acronym
I Lua ´e Um Acrˆonimo
Meu nome ´
e Lua, p**rra!
Defini¸c˜oes segundo o Wikcion´ario:
I (Astronomia) sat´elite natural da Terra, que se destaca no c´eu durante a noite
I (Astronomia) astro que ´e sat´elite natural de algum planeta
I (Ictiologia) peixe encontrado na costa portuguesa de formas
arredondadas e aparentemente sem barbatana traseira
Lua
I Uma linguagem de script:
I Robusta;
I R´apida;
I Port´avel;
I Linguagem de extens˜ao;
I Pequena;
I Livre;
Lua
I Alguma semelhan¸ca com outras linguagens de script (Perl,
Python, Tcl);
I Linguagem de descri¸c˜ao de dados (anterior a XML);
I Linguagem de extens˜ao extens´ıvel:
I Enfatiza o desenvolvimento em m´utiplas linguagens
Importˆ
ancia
I Unica linguagem criada em um pa´ıs em desenvolvimento a´
ganhar proje¸c˜ao mundial;
I De outra forma: ´unica linguagem relevante que n˜ao foi
desenvolvida no eixo EUA/Europa/Jap˜ao.
I Jap˜ao == Ruby
Usos de Lua
I Especialmente utilizada em jogos;
I Uma pesquisa informal feita em 2003 pelo sitegamedev.net
apontou Lua como a linguagem de script mais utilizada para jogos;
Lua em Jogos
I ”It is easy to see why Lua is rapidly becoming the de facto
standard for game scripting.- Artificial Intelligence for Games, Morgan Kaufmann,2006;
I ”It’s quite possible that game developers will look back at the 2000s as the decade of Lua- Game Programming Gems 5, Charles River Media, 2005.
Jogos que Usam Lua
Jogos que Usam Lua
Jogos que Usam Lua
Jogos que Usam Lua
Mais Aplica¸c˜
oes
I 63% of the main Lightroom-team authored code is
Lua.
Troy Gaul (Adobe Systems)
Mais Aplica¸c˜
oes
Mais aplica¸c˜
oes
I Impressoras Olivetti;
I P´os-produ¸c˜ao de filmes;
I Monitoramento remoto;
I Desenvolvimento Web;
Raz˜
oes para usar Lua
I Portabilidade I Simplicidade I Pequeno tamanho I ”Acoplabilidade” I EficiˆenciaPortabilidade
I Lua roda em praticamente todas as plataformas conhecidas:
I Unix I Windows I Windows CE I Symbian I Palm I PS2
I Escrita em ANSI C ∩ ANSI C++
Simplicidade
I Somente um tipo num´erio (geralmente double);
I Um ´unico tipo de estruturas de dados:
I Tabelas
I Mecanismos ao inv´es de pol´ıticas
I e.g., orienta¸c˜ao a objetos;
Pequeno Tamanho
I Menos de 200k;
I Distribui¸c˜ao completa cabe (com folgas) em um disquete;
I N´ucleo + Bibliotecas
I N´ucleo com menos de 100k;
I Bibliotecas independentes (podem ser removidas).
Acoplabilidade
I Lua ´e uma biblioteca C;
I API simples e bem definida:
I modelo de pilha I Biderecional; I Acoplada em: I C/C++ I Java I Fortran, I C# I Perl I Ruby I Ada I etc
Eficiˆ
encia
I Benchmarks independentes mostram Lua como uma das mais
r´apidas linguagems de script interpretadas com tipagem dinˆamica;
I Lua n˜ao ´e r´apida somente em benchmarks.
Lua x Ruby
Lua x Perl
Lua x PHP
Lua x Python
LuaJIT
I Compilador Just In Time para Lua;
Hist´
oria de Lua
Como tudo come¸cou
I Lua nasceu em 1993, dentro do Tecgraf, na PUC-Rio;
I Criadores:
I Roberto Ierusalimschy;
I Luiz Henrique de Fiqueiredo;
I Waldemar Celes.
O Ambiente
I Tecgraf foi criado em 1987;
I Laborat´orio de pesquisa e desenvolvimento;
I Parceria com a PETROBRAS;
I Pol´ıtica de reserva de mercado para hardware e software;
I Vigorou de 1977 a 1992;
I Precisa de alguma coisa? Fa¸ca!
Predecessoras
I DEL - Linguagem para Especifica¸c˜ao de Di´alogos
I Util para a descri¸c˜´ ao de dados;
I Falta de estruturas de controle;
I Pouco poder de express˜ao.
I SOL - Simple Object Language
I Linguagem para descri¸c˜ao de objetos;
I Sintaxe inspirada noBibTeX.
I Ausˆencia de mecanismos de abstra¸c˜ao mais poderosos.
DEL + SOL = ?
I DEL e SOL compartilhavam v´arios problemas;
I Achar uma solu¸c˜ao comum:
I Roberto Ierusalimschy (SOL)
I Luiz Henrique (DEL)
I Waldemar Celes (SOL)
Precisa-se de uma linguagem
I Estruturas de controle, sub-rotinas, atribui¸c˜ao;
I Capaz de descrever dados facilmente;
I Port´avel;
I Converse amigavelmente com C;
I Sintaxe f´acil.
1993
I Tcl estava dispon´ıvel;
I Scheme e Lisp tamb´em;
I Python estava nascendo;
I Vamos fazer nossa pr´opria linguagem! :-)
Adeus, SOL!
I SOL estava saindo de cena;
I um novo nome foi sugerido...
Bem-vinda, Lua!
Lua 1.0
I Chamada de 1.0 posteriormente;
I “The simplest thing that could possibly work”
I tabelas implementadas via listas!
I Implementa¸c˜ao padr˜ao:
I yacc + lex
I m´aquina de pilha
I Menos de 6000 linhas de c´odigo C.
Lua 1.0
I Expectativas: solucionar problemas com SOL e DEL
I dispon´ıvel para uso em outros projetos do Tecgraf
I Correspondeu `as expectativas:
I Programas daquela ´epoca ainda usam Lua
I Foi um grande sucesso no Tecgraf
Usando Lua adoidado
Lua 1.1
I 1994: primeira vers˜ao lan¸cada publicamente;
I V´arios usu´arios reais;
I Manual de referˆencia;
I Defini¸c˜ao e documenta¸c˜ao da API com C;
I Licen¸cas para uso comercial negociadas.
Ganhando o Mundo
I Artigo publicado em 1996 na revista Dr. Dobb’s;
I Bret Mogilefsky (LucasArts);
I 1998: lan¸camento de Grim Fandango;
Atremendous amount of the game was written in Lua
I Mesa redonda na Game Developer’s Conferece (principal
evento para desenvolvedores de jogos).
Lua rocks!
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! It’s 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 Bar
lua-l
I 1997: cria¸c˜ao da lista de discuss˜ao de Lua;
I Principal f´orum da linguagem;
I Menos de 10% dos usu´arios s˜ao do Brasil;
I Mais de 50000 mil mensagens.
Lua 5
I Vers˜ao 5.0 lan¸cada em 2003 e vers˜ao 5.1 em 2006
I Livro texto (Programming in Lua)
I Pontos chave:
I Co-rotinas
I Sistema de m´odulos
I Fun¸c˜oes anˆonimas com escopo l´exico
I M´aquina virtual de registradores
I Coleta de lixo incremental
Linhas de C´
odigo com o Tempo
Evolu¸c˜
ao
I Enfase nos requisitos originais:ˆ
I ”minimalismo pragm´atico”
I mecanismos mais gerais
I ˆenfase em fun¸c˜oes
Lua atualmente
I Site com mais de 4.000 visitas por dia
I de mais de 100 pa´ıses
I mais 14.000 downloads por mˆes
I Lista com mais de 1.700 participantes
I Compromisso com estabilidade
I Lua 4.0 ficou mais de dois anos sem altera¸c˜oes
I Lua 5.0 foi lan¸cada em mar¸co de 2003
Lua Atualmente
I Licen¸ca atual: MIT
I uso livre, n˜ao ”viral”
I Modelo de desenvolvimento centralizado
I Participa¸c˜ao da comunidade:
I lista
I patches para vers˜oes alternativas
I Wiki da comunidade: http://lua-users.org/wiki
Lua Atualmente
I LuaForge
I Servi¸co de hospedagem de projetos Lua;
I Hospeda mais de 400 projetos de mais de 1500 usu´arios;
I Alguns projetos: I LuaSocket I LuaSQL I Kepler I LuaEclipse I LuaEdit
Lua Atualmente
I LuaWorkshop:
I Encontro da comunidade Lua
I 2005: Estados Unidos;
I 2006: Holanda;
I 2008: Washinghton D.C., Estados Unidos.
Lua Atualmente
I Pesquisa envolvendo Lua
I LabLua
I Laborat´orio na PUC-Rio coordenado por Roberto Ierusalimschy
I http://www.lua.inf.puc-rio.br/
Lua Atualmente
I Fiel aos requisitos originais:
I Simplicidade;
I Portabilidade;
I Extensibilidade;
I Pequeno tamanho.
I Entre as 20 linguagens mais populares (segundo TIOBE).
Popularidade
Livros
Programming in Lua, 2006 Lua 5.1 Reference Manual, 2006
Livros
Livros
Beginning Lua Programming, 2007 Game Development With Lua, 2005
Livros
World of Warcraft, 2008 Introductory Lua Programming, 2007
Livros
Lua Programming Gems, 2008 First Lua Programming, 2008