Lua – O simples é tudo Aluno: Flávio Henrique Schuindt da Silva Características das Linguagens de Programação.

Slides:



Advertisements
Apresentações semelhantes
C/C++ para Sistemas Operacionais Professor: André Luis Meneses Silva /msn: Página:
Advertisements

Capítulo II – Algoritmos e Programas
Parte I Capítulo 5 Reutilizando código e escrevendo funções.
Programação para Engenharia I
1 Tipos definidos O programador pode definir seus próprios tipos de dados tipos complexos usados da mesma forma que os simples declaram-se variáveis utilizando-se.
Listas lineares Listas Lineares Fila Dupla Pilha Fila Saída restrita
The language of tecnical computing
Linguagem C LPG-I – Variáveis Estruturadas – Vetores
LPG - I: Alocação Dinâmica de Memória - Ponteiros
Alexandre Parra Site: Linguagem Java Alexandre Parra Site:
Curso Sistemas de Informação Disciplina: Arquitetura de Software
Softwares.
Universidade Federal do Espírito Santo
Análise Léxica Supondo o trecho de programa abaixo:
Construção de Compiladores
Linguagem C Strings.
Prof. Msc. Raul Paradeda Aula 2 Introdução
Robson Godoi / Sandra Siebra
Ponteiros.
Revisão da Linguagem C.
Paradigmas de programação
Introdução a linguagem Python
Unidade I: “Dê um mergulho rápido”
PROGRAMAÇÃO I UNIDADE 1.
A Linguagem de Programação LUA
Funções Declaração function nomedafunção (arg_1, arg_2,..., arg_n) corpoDaFunção end.
PHP Tipos de dados Constantes.
Curso básico de PHP 1 Vantagens: Gratuito Multiplataforma Estável Rapidez Comunicação.
Linguagem de Programação II Parte IX
JAVA Linguagem Ambiente de Desenvolvimento
Conceitos de Linguagem de Programação
CADEIA DE CARACTERES (Strings)
Estrutura de dados II Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.
Laboratório de Programação I Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.
Programação I Aula 2 (Métodos)
Linguagem de programação I A Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.
Ruby Viviane Souza (vess).
DESIGN E COMUNICAÇÃO MULTIMÉDIA 2011 / 2012 DESIGN E COMUNICAÇÃO MULTIMÉDIA 2011 / 2012 FORMADOR Gonçalo Miguel MÓDULO 25. Introdução ao ActionScript 3.0.
Introdução à Programação Orientada a Objetos com Java Paulo Borba Centro de Informática Universidade Federal de Pernambuco Programação Imperativa (e Ponteiros.
Java Bytecode Software Básico Mitsuo Takaki.
Ambiente de Execução - Rotinas
Aula 1 - Fundamentos Java SE Instituto Metodista Izabela Hendrix Curso de Tecnologia em Análise e Desenvolvimento de Sistemas Prof. Gilmar Medeiros – Agosto/2009.
Paradigmas de Linguagens de Programação Aula 2
Capítulo VIII Ambientes de Execução
Paradigmas da Programação – Semestre 1 – Aula 9 Professor: Eduardo Mantovani )
Algoritmos - Profa. Alciléia1 Profa. Maria Alciléia Alves Rocha Funções em C 2011.
Laboratório de Programação I Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.
Regras de escopo Escopo: trecho de codificação no qual o identificador possui significado Escopo de função: identificador válido dentro do trecho de uma.
Vetores Bidimensionais – Debug - Ponteiros – Listas Encadeadas Simples
Acabias Marques Luiz. I - Introdução ao Ruby Parte 1 – Introdução a linguagem  O que é Ruby  Instalação  O IRB  Operadores Aritméticos  Tipos de.
STRINGS Dilvan Moreira (baseado no livro Big Java e Z. Liang)
Caio Neves Leila Soriano
JAVA Sintaxe.
Ruby André Braga Patrícia Lustosa. Yukihiro Matsumoto (“Matz”), 1993 Perl Smalltalk Eiffel Ada Lisp “Natural, not simple” “More powerful than Perl and.
Introdução JAVA Faculdade Mauricio de Nassau
Aula Prática 5 Monitoria IP/CC (~if669). Roteiro 1. 1.Recursão 2. 2.Escopo de Variáveis 3. 3.Arrays 4. 4.Strings.
Recursividade Profs. De Prog2 e Lab2.
Java Disciplina: Programação II Professora: Mai-Ly Vanessa.
Paradigmas de Linguagens de Programação Conceitos da Linguagem Imperativa 1 Augusto Sampaio e Paulo Borba Centro de Informática Universidade Federal de.
Estrutura de Dados II Alocação Dinâmica. Alocação de memória Ao ser executado, um programa carrega seu código executável para a memória; Uma parte da.
Shell Script Parte 2.
Algoritmo e Estrutura de Dados I Aulas 15 – Linguagem C Alocação Dinâmica de Memória Márcia Marra
COMPILADORES 07 Prof. Marcos.
Estrutura de Dados Prof. André Cypriano M. Costa
COMPILADORES 02 Prof. Marcos. COMPILADORES Do Programa à Execução Computadores das mais variadas arquiteturas têm funcionamento:
Alocação Dinâmica Dilvan Moreira. Objetivos  Entender o que são e como usar:  Gerenciamento de Memória  Alocação Dinâmica em C.
Variáveis, expressões e comandos Dilvan Moreira. Lembrando …  Instalação normal (para utilizar no PC com Windows) 
Clique para editar o título Linguagem C Para programadores Python PMR
Laboratório de Computação Aula 06 e 07 – Implementação de classes Prof. Fábio Dias
Introdução à Orientação a Objetos em Java Prof. Gustavo Wagner (Alterações) Slides originais: Prof. Tiago Massoni Desenvolvimento de Sistemas FATEC-PB.
Transcrição da apresentação:

Lua – O simples é tudo Aluno: Flávio Henrique Schuindt da Silva Características das Linguagens de Programação

A origem de Lua Lua foi criada no Tecgraf, o laboratório de computação gráfica da PUC-Rio. Atualmente, seu desenvolvimento e manutenção é responsabilidade do laboratório Lablua, também localizado na PUC-Rio.

Usos de Lua Jogos "Is Lua the ultimate game scripting language?" (GDC 2010) Angry Birds, Civilization V, Fable II, Ragnarok Online, World of Warcraft, The Sims, Farcry Linguagem de extensão Sistemas Embarcados Câmeras, Teclado, Impressoras e, claro, TV DIGITAL! Ginga

Por que Lua? Rapidez Uma das linguagens de script com melhores resultados em testes de benchmark Portabilidade Basta a plataforma possuir um compilador ANSI/ISO C. Roda em Unix, Windows e em dispositivos móveis (BREW, Symbian, Pocket PC, Android, iPhone, DS, PSP, PS3) e microprocessadores embutidos (ARM, Rabbit) para aplicações como Lego MindStorms.

Por que Lua? Embutível API bem documentada e engine rápida, favorecendo a extensão da sua aplicação em C, C++, C#, Java, Smalltalk, Ruby, Python, etc. Pequena

Por que Lua? Livre Código aberto distribuído na licença MIT. Pode ser usada para qualquer propósito, inclusive comerciais.

Uma visão geral de Lua Tipagem dinâmica Não exige declaração de tipo de dado Interpretada a partir de bytecodes para uma máquina virtual baseada em registradores (LVM) Gerenciamento automático de memória com coleta de lixo incremental (Garbage Collector) Linguagem de extensão e embutida Interface com C, por exemplo

Talk is cheap...SHOW ME THE CODE!

Interface com C – A extensabilidade de Lua Escrevendo o script em Lua... --script.lua io.write("A tabela recebida pelo script foi: \n"); x = 0 for i = 1, #foo do print(i, foo[i]) print(i, foo[i]) x = x + foo[i] x = x + foo[i]end io.write("Retornando dados para o C...\n"); return x

Interface com C – A extensabilidade de Lua Escrevendo o código em C e invocando o script em Lua #include #include intmain(void){ int status, result, i; int status, result, i; double sum; double sum; lua_State L; Guarda todos os contextos de lua nesta estrutura */ lua_State L; /* Guarda todos os contextos de lua nesta estrutura */ L = luaL_newstate(); L = luaL_newstate(); luaL_openlibs(L); /* Carrega as bibliotecas de Lua*/ luaL_openlibs(L); /* Carrega as bibliotecas de Lua*/ status = luaL_loadfile(L, "script.lua"); /*Carrega o script desejado*/ status = luaL_loadfile(L, "script.lua"); /*Carrega o script desejado*/ if (status) { if (status) { fprintf(stderr, "Falha ao carregar o arquivo: %s\n", lua_tostring(L, -1)); fprintf(stderr, "Falha ao carregar o arquivo: %s\n", lua_tostring(L, -1)); exit(1); exit(1); } lua_newtable(L); /* Passaremos uma tabela */ lua_newtable(L); /* Passaremos uma tabela */ for (i = 1; i <= 5; i++) { for (i = 1; i <= 5; i++) { lua_pushnumber(L, i); /* Empilha o index da tabela na pilha */ lua_pushnumber(L, i); /* Empilha o index da tabela na pilha */ lua_pushnumber(L, i*2); /* Empilha o valor da célula */ lua_pushnumber(L, i*2); /* Empilha o valor da célula */ lua_rawset(L, -3); /* Guarda o par na tabela */ /*-1 refere-se ao topo da pilha. -3 é a posição da tabela na pilha.*/ lua_rawset(L, -3); /* Guarda o par na tabela */ /*-1 refere-se ao topo da pilha. -3 é a posição da tabela na pilha.*/ } lua_setglobal(L, "foo"); /*Referência da tabela no script Lua*/ lua_setglobal(L, "foo"); /*Referência da tabela no script Lua*/ result = lua_pcall(L, 0, LUA_MULTRET, 0); result = lua_pcall(L, 0, LUA_MULTRET, 0); if (result) { if (result) { fprintf(stderr, "Falha ao iniciar o script: %s\n", lua_tostring(L, -1)); fprintf(stderr, "Falha ao iniciar o script: %s\n", lua_tostring(L, -1)); exit(1); exit(1); } sum = lua_tonumber(L, -1); printf("Script retornou: %.0f\n", sum); lua_pop(L, 1); /*Retira o valor retornado da pilha*/ lua_close(L); Return 0; }

Pode isso, Arnaldo!? Afinal, que raio de tabela mágica é essa!?

Entendendo a tabela de Lua O tipo table representa um vetor associativo, implementado internamente com o uso de uma eficiente combinação de array e hash (tabela de dispersão). As tabelas são a única forma de estruturação de dados em Lua. Todas as estruturas de dados comumente encontradas em programação (tais como vetores, listas, filas, conjuntos e hash) podem ser eficientemente (e facilmente) implementadas com o uso de tabelas.

Um pouquinho mais de tabela... local t = {} -- cria nova tabela t[1] = 4 -- armazena 4 no índice 1 t[2] = "alo" -- armazena "alo" no índice 2 t["alo"] = 5 -- armazena 5 no índice "alo" t[t[2]] = 0 -- armazena 0 no índice "alo" (sobrescrevendo) armas = { faca = { agressao = 0.3, faixaDeAtaque = 0.5, precisao = 1.0, }, espada = { agressao = 0.5, faixaDeAtaque = 1.5, precisao = 0.8, }

Conceitos básicos de Lua Variáveis e Tipos Lua apresenta tipagem dinâmica, isto é, o interpretador, em tempo de execução pressupõe qual o tipo de dado da variável. Os tipos estão associados diretamente aos valores armazendos nas variáveis e não às variáveis em si. a = "Exemplo" -- a armazena string b = b armazena número b = nil -- b armazena nil a = 3 -- a armazena número

Conceitos básicos de Lua Variáveis e Tipos Toda variável em lua, por padrão, é declarada como global, a menos que a palavra reservada ”local” seja usada. local a -- a é local dentro do bloco declarado ou a um chunk (sequência de comandos Lua em um arquivo de script) a = 3

Conceitos básicos de Lua Funções Funções em Lua são valores de primeira classe. Isso significa que, como qualquer outro valor, uma função pode ser criada, armazenada em uma variável (local ou global) ou campo de tabela e passada adiante como parâmetro ou valor de retorno de uma outra função. Uma função pode receber zero ou mais valores. A lista de parâmetros é especificada da maneira usual: entre os parênteses que seguem o nome da funcão.

Conceitos básicos de Lua Exemplo de Função fat = function (n) if n==0 then return 1 else return n*fat(n-1) end

$ cat despedida.lua print 'Dúvidas?' duvidas = io.stdin:read'*l' if duvidas == 's' then print('Sim. Qual?') elseif duvidas == 'n' then print('Até a próxima, pessoal!') end