• Ginga • middleware padrão brasileiro para TV digital
• VLC media player • set-top boxes: Verizon (FiOS TV), Active-
TV, VUDU
• Wireshark • analisador de protocolos
• Snort • intrusion detection and prevention system
• nmap • rastreador de redes para segurança
• firmware para impressoras (Olivetti e Oce), teclados (Logitech) e cameras (Canon)
• biblioteca para GIS (INPE), monitoramento remoto (Omnitronix), pós-produção de filmes (Digital Fusion, eyeon), servidores Web (RealTimeLogic), dispositivos de segurança de redes (Cisco), LuaTeX, etc.
• "It is easy to see why Lua is rapidly becoming the de facto standard for game scripting." Artificial Intelligence for Games, Morgan Kaufmann, 2006.
• "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.
• como funciona um jogo como o WoW • clientes e servidores de jogos • uso de várias linguagens de programação
• onde entra a programação em Lua? • para o desenvolvedor do jogo • para o jogador
• Portabilidade • Simplicidade • Pequeno tamanho • “Acoplabilidade” (embedding)
• scripting • Eficiência
• 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 padrão
• Núcleo é praticamente uma aplicação free-standing
• Menos de 200K • Distribuição completa com menos de
210K • Núcleo + bibliotecas
• núcleo com menos de 100K • bibliotecas independentes (e removíveis)
• uma única implementação principal, com diversas distribuições
• stand alone x embutida em algum programa
• para Windows, Lua for Windows vem se firmando como principal instalação
• para Linux, maioria das distribuições oferecem pacotes prontos • e.g., lua5.1 para Debian/Ubuntu
• quatro maneiras de executar um "programa"
$ lua -e "print(2^0.5)"!
$ lua nome-do-arquivo!
$ lua!> print(2^0.5)!
$ lua!> dofile("nome-do-arquivo")!
• http://luaforwindows.luaforge.net/ • (ou navegando a partir de www.lua.org)
• instalar • nessa aula, vamos fazer alguns exercícios
com Lua, para depois entrar em sua interação com o WoW
> print(“alo alo”)!alo alo!> print(2+3*5)!17!> print(2^0.5) !1.4142135623731!> print(math.pi) !3.1415926535898 !
• usadas para guardar valores • atribuições: = • diferentes das variáveis da álgebra!
> pontos = 4!> print (pontos + 2)!6!
> pontos = pontos + 1!> print (pontos)!7!
• variáveis podem armazenar vários tipos de valores
> pontos = 5!> mensagem = “Muito bom total de pontos!” !> print (mensagem, pontos)!Muito bom total de pontos! 5!
• podemos descobrir o tipo de um valor armazenado com type()
> pontosLuiz = 5!> pontosAna = 10!> msg = “parabens!”)!> print (pontosLuiz < pontosAna)!true!> print (pontosLuiz < msg)!stdin:1: attempt to compare number with string!stack traceback:!
!stdin:1: in main chunk!![C]: ?!
valores não comparáveis!
> function parabens ()!>> print (“muito muito muito bem!”)!>> end!> parabens()!muito muito muito bem!!> function parabens (ganhador)!>> print (“muito muito muito bem, “ ..!>> ganhador .. “!”)!>> end!> parabens("Ana")!muito muito muito bem, Ana!!> !
interpretador esperando final da construção!
> function parabens ()!>> for i = 1, 10 do print (“mto bem!”)!>> end!> parabens()!mto bem!!mto bem!!mto bem!!mto bem!!mto bem!!mto bem!!mto bem!!mto bem!!mto bem!!mto bem!!
> function parabens (pontos, jogador)!>> !>> if pontos > 10 then!>> print (“parabens!”)!>> else print (“vc pode melhorar!”)!>> end!>> end!> parabens(5)!
function add (a)! local sum = 0! for i = 1, #a do sum = sum + a[i] end! return sum!end!
print(add({10, 20, 30.5, -9.8}))