SlideShare uma empresa Scribd logo
Integrando Lua & C++
                               Vinicius Jarina (viniciusjarina@gmail.com)

                                           @viniciusjarina



Saturday, September 17, 2011
Overview linguagem Lua

                               Vantagens de utilizar Lua

                               Entendendo melhor o Lua

                               Introdução a API C

                               Chamando funções Lua do C

                               Chamando funções C do Lua

                               Usando modelo OO

                               Utilizando geradores de código (toLua++)

Saturday, September 17, 2011
Lua

                                                             Normalized fraction of total hits (%)
                               Linguagem leve e rápida
                                                                                                          2
                               Portável (ANSI C)
                                                                                                         1.5
                               Facilmente embarcável
                                                                                                     1

                               Licença livre (MIT)                                                   0.5
                                                           2003
                                                                   2006
                               Projeto ativo e crescendo                      2009              0
                                                                                          2011/Q2




Saturday, September 17, 2011
Lua

                               Alguns exemplos de projetos que usam Lua

                                 SimCity / The Sims

                                 World of Warcraft

                                 Adobe Lightroom

                                 CryENGINE




Saturday, September 17, 2011
Vantagens
                               Mas afinal para que utilizar uma linguagem
                               script na minha aplicação?

                                 Isolamento

                                 Abstração

                                 Extensão e personalização




Saturday, September 17, 2011
Primeiros Passos
                               Exemplo código Lua:
                          local count = 10
                          -- comentário

                          g = 2*count

                          print("count = ", count, " g = ", g)




                                  http://www.lua.org/demo.html




Saturday, September 17, 2011
Tipos de dado
                               Lua suporta 8 tipos básico de dado: nil,
                               boolean, number, string, userdata, function,
                               thread, table

                               print(type(x))    -- nil (variáveis nascem nil)
                               x = "farandula"
                               print(type(x))    -- string
                               x = 10
                               print(type(x))    -- number
                               x = print
                               x(type(x))        -- function




Saturday, September 17, 2011
Tabelas

                               Tabelas são arrays associativos, podem ser
                               indexados por qualquer valor, exceto nil.

                        t = {} -- cria uma tabela, associa uma ref. a t
                        t2 = { x = 20, y = "foo" }

                        t["bar"] = "value"     -- sintáxe dicionário
                        t.campo = 10           -- sintáxe registro

                        print(t.bar)        -- value
                        print(t["campo"])   -- 10
                        print(t2.x, t2["y"])-- 20 foo




Saturday, September 17, 2011
Funções
                      Definindo funções:
                   function soma(a, b)         soma = function(a, b)
                       return a + b               return a + b
                   end                         end


                      Retornando múltiplos resultados:

                   function func(a, b)
                       return b, a, 10
                   end

                   x, y, z    = func(15, 20) -- x = 20, y = 15 , z = 10
                   p, q, r, s = func(2,1) -- p = 1,q = 2,r = 10, s = nil




Saturday, September 17, 2011
+Funções
                      Funções anônimas:

                   function inverso(f)
                      return function(x) return 1/(f(x)) end
                   end


                      Exemplo:

                   function square(x) return x*x end

                   f = inverso(square)

                   print(f(2), f(3)) -- 0.25   0.11111111111111




Saturday, September 17, 2011
Closures
                    Exemplo de closure (usando up-values):
                         function fibbo_gen()
                             local i = 0
                             local j = 1
                             return function()
                                 local k = i + j
                                i = j
                                 j = k
                                 return k
                             end
                         end
                    Exemplo:
                         f1 = fibbo_gen()
                         print(f1()) -- 1
                         print(f1()) -- 2
                         print(f1()) -- 3
                         print(f1()) -- 5


Saturday, September 17, 2011
Metatabelas
                    Permitem alterar comportamento através de
                    metametodos ex: __tostring, __index,
                    __add, __eq, etc...
                         t = {}
                         mt = { __index = function(table, key)
                                             return "fixo"
                                          end
                         }

                         setmetatable(t, mt)

                      Exemplo:
                         print(t[1]) -- fixo (não encontrou 1, invoca __index)
                         t[1] = "casa"
                         print(t[1]) -- casa



Saturday, September 17, 2011
Objetos
                   Usando tabela com cara de objeto:
                t = { }
                t.func   = function (a, ...)
                               print("func:", a, ...)
                           end
                t.membro = 10
                function t:getmembro() return self.membro end
                -- t.getmembro = function(self) return self.membro end

                    Exemplo:
                 t.func(10)      -- func:! 10
                 t:func(11)      -- func:! table: 0x256a3f0! 11
                 t.func(t, 12)   -- func:! table: 0x256a3f0! 12

                 print(t:getmembro())   -- 10




Saturday, September 17, 2011
Módulos
                   Definindo um módulo:
               module (..., package.seeall) -- size.lua
               function new (x, y)
                return {x = x, y = y}
               end

               function area(s)
                  return s.x * s.y
               end

                    Usando módulo:
               require ‘size’

               local s1 = size.new(10,20)

               print(size.area(s1)) -- 200




Saturday, September 17, 2011
Compilação Dinâmica
                   Compilando uma string:
               i = 10 -- global i
               f = loadstring(“i = i + 10; print(i)”)
               g = function() i = i + 10; print(i) end

               f() -- 20

                Compilando uma arquivo Lua:
           -- file_foo.lua
           function foo() print(“inside foo”) end


          f = loadfile(“file_foo.lua”) -- compilou foo mas não executou
          print(foo)              -- nil, pois foo ainda nao existe
          f()                     -- definiu foo
          foo()                   -- inside foo



Saturday, September 17, 2011
Tratando Erros
                     Usando pcall e error
                i = 101
                status, err = pcall( function() -- pcall (try)
                    i = i + 1
                    if(i > 100) then
                      error(“i maior que 100”) -- error (throw)
                    end
                    print(“i = “,i ) -- i será sempre menor que 100
                  end)
                if not status then -- (catch, se pcall false, houve erro)
                  print(err)       -- i maior que 100
                end




Saturday, September 17, 2011
Overview linguagem Lua

                               Vantagens de utilizar Lua

                               Entendendo melhor o Lua

                               Introdução a API C

                               Chamando funções Lua do C

                               Chamando funções C do Lua

                               Utilizando geradores de código (toLua++)


Saturday, September 17, 2011
API C
                     Funções API Lua lua_* e luaL_*
                #include “lua.h”     /* header principal do Lua */
                #include “lauxlib.h” /* header lib auxiliar do lua (luaL) */
                #include “lualib.h” /* header para usar std libs do lua */

                int main() {
                  lua_State * L = luaL_newstate(); /* */
                  luaL_openlibs(L); /* carrega libs std (string, table, etc*/
                  const char * szScript = “ i = 0 ; function test(a) n“
                                           “ return 2*a + 1 n end    n“
                                           “ print(test(i))           n”
                  int nErr = luaL_loadstring(L,szScript) ||
                             lua_pcall(L, 0, 0, 0);
                  if(nErr) {
                    printf(lua_tostring(L, -1));
                    lua_pop(L, 1);
                  }
                  lua_close(L);
                  return 0;
                }

Saturday, September 17, 2011
Pilha
                      Empilhando e desempilhando valores

                lua_pushboolean(L, 1);              6        nil
                lua_pushnumber(L, 10);
                lua_pushnil(L);                     5        nil
                lua_pushstring(L, "hello");
                                                    4      “hello”
                lua_pushvalue(L, -4);
                lua_replace(L, 3);
                lua_settop(L, 6);
                                                    3        nil
                lua_remove(L, -3);
                lua_settop(L, -5);              -5 2         10
                                                -5
                                                -4
                                                -3
                                                -2 1
                                                -1
                                                -6          true




Saturday, September 17, 2011
Chamando funções Lua
                     Chamando uma função global:
                         -- file_modulo.lua
                         function modulo(real, imag)
                             return math.sqrt(real*real + imag*imag)
                         end

               luaL_dofile(“file_modulo.lua”); // compila e executa o
                                               // arquivo file_modulo.lua
               double real = 3;
               double imag = 5;

               lua_getglobal(L,“modulo”); // empilha a global modulo
               lua_pushnumber(L, real);   // empilha param 1 (real)
               lua_pushnumber(L, imag);   // empilha param 2 (imag)

               lua_pcall(L, 2, 1, 0); // chama modulo(2 entradas, 1 saída)

               double mod = lua_tonumber(L, -1); // mod == 5

               lua_pop(L, 1);
Saturday, September 17, 2011
Chamando funções C
                Registrando função C
          static int pow_l(lua_State *L) {
               double a = luaL_checknumber (L, 1);
               double b = luaL_checknumber (L, 2);
               lua_pushnumber (L, pow (a, b));
               return 1;
          }
          static const struct luaL_Reg mylib [] = {
            {"pow", pow_l},
            {NULL, NULL}
          };

          int luaopen_mylib (lua_State *L) {
             luaL_register (L, "mylib", mylib);
             return 1;
          }

                        print(“chamando mylib.pow”, mylib.pow(3))
                        -- chamando mylib.pow   9



Saturday, September 17, 2011
Usando toLua++
             Exportando uma classe:
          class car { // tolua_export
                   int m_speed;
              public:
          ! !     //tolua_begin                  // arquivo: car.pkg
                  car();                         $cfile "car.h"
                  ~ car();
                  void set_speed(int speed);
                  int get_speed();
          }; // tolua_end


             #>toluapp -o tolua_car.cpp -H tolua_car.h -n car car.pkg

        -- cria um novo carro, e seta velocidade
        local c1 = car:new_local("McQueen")
        c1:set_speed(10)
        print("Carro: " .. c1:name() .. " velocidade:" .. c1:speed());
        -- Carro: McQueen velocidade: 10




Saturday, September 17, 2011
DEMO
Saturday, September 17, 2011
Dúvidas?

Saturday, September 17, 2011
Fim
       http://lua-users.org/wiki/
       Programming in Lua, 2Nd Edition   @viniciusjarina
       http://www.lua.org/docs.html      viniciusjarina@gmail.com

Saturday, September 17, 2011

Mais conteúdo relacionado

Mais procurados

Linguagem Go
Linguagem GoLinguagem Go
Linguagem Go
Natã Melo
 
Aula09 traducaosin110
Aula09 traducaosin110Aula09 traducaosin110
Aula09 traducaosin110
Aldo Henrique Dias Mendes
 
Linguagem c
Linguagem cLinguagem c
Estruturas de dados aulas - bloco 1
Estruturas de dados   aulas - bloco 1Estruturas de dados   aulas - bloco 1
Estruturas de dados aulas - bloco 1
Alessandro Gonçalves, MBA, ITIL
 
Compiladores 1
Compiladores 1Compiladores 1
Compiladores 1
Ivan Ricarte
 
Introdução a Linguagem C
Introdução a Linguagem CIntrodução a Linguagem C
Introdução a Linguagem C
apolllorj
 
Estrutura de dados em Java - Ponteiros e Alocação de Memória
Estrutura de dados em Java - Ponteiros e Alocação de Memória Estrutura de dados em Java - Ponteiros e Alocação de Memória
Estrutura de dados em Java - Ponteiros e Alocação de Memória
Adriano Teixeira de Souza
 
Curso de Linguagem C
Curso de Linguagem CCurso de Linguagem C
Curso de Linguagem C
Rogerio R. Lima Cisi
 
Aula5 introducao c
Aula5 introducao cAula5 introducao c
Aula5 introducao c
profwtelles
 
Aula5 introducao c
Aula5 introducao cAula5 introducao c
Aula5 introducao c
Mauricio Wieler
 
Linguagem C - Ponteiros
Linguagem C - PonteirosLinguagem C - Ponteiros
Linguagem C - Ponteiros
Elaine Cecília Gatto
 
Linguagem C - Estruturas
Linguagem C - EstruturasLinguagem C - Estruturas
Linguagem C - Estruturas
Elaine Cecília Gatto
 
Python - Programação funcional
Python - Programação funcionalPython - Programação funcional
Python - Programação funcional
fabiocerqueira
 
Introduçãso a linguagem c
Introduçãso a linguagem cIntroduçãso a linguagem c
Introduçãso a linguagem c
sergiocrespo
 
05 poo-ii
05   poo-ii05   poo-ii
05 poo-ii
Ialis Cavalcante
 
Estrutura de Dados - Alocação dinâmica de memória
Estrutura de Dados - Alocação dinâmica de memóriaEstrutura de Dados - Alocação dinâmica de memória
Estrutura de Dados - Alocação dinâmica de memória
Adriano Teixeira de Souza
 
Introdução a Linguagem de Programação C
Introdução a Linguagem de Programação CIntrodução a Linguagem de Programação C
Introdução a Linguagem de Programação C
Gercélia Ramos
 
Introdução à Linguagem C
Introdução à Linguagem CIntrodução à Linguagem C
Introdução à Linguagem C
Elaine Cecília Gatto
 
Apostila de Alocação Dinâmica em C
Apostila de Alocação Dinâmica em CApostila de Alocação Dinâmica em C
introdução a linguagem java-2003
introdução a linguagem java-2003introdução a linguagem java-2003
introdução a linguagem java-2003
elliando dias
 

Mais procurados (20)

Linguagem Go
Linguagem GoLinguagem Go
Linguagem Go
 
Aula09 traducaosin110
Aula09 traducaosin110Aula09 traducaosin110
Aula09 traducaosin110
 
Linguagem c
Linguagem cLinguagem c
Linguagem c
 
Estruturas de dados aulas - bloco 1
Estruturas de dados   aulas - bloco 1Estruturas de dados   aulas - bloco 1
Estruturas de dados aulas - bloco 1
 
Compiladores 1
Compiladores 1Compiladores 1
Compiladores 1
 
Introdução a Linguagem C
Introdução a Linguagem CIntrodução a Linguagem C
Introdução a Linguagem C
 
Estrutura de dados em Java - Ponteiros e Alocação de Memória
Estrutura de dados em Java - Ponteiros e Alocação de Memória Estrutura de dados em Java - Ponteiros e Alocação de Memória
Estrutura de dados em Java - Ponteiros e Alocação de Memória
 
Curso de Linguagem C
Curso de Linguagem CCurso de Linguagem C
Curso de Linguagem C
 
Aula5 introducao c
Aula5 introducao cAula5 introducao c
Aula5 introducao c
 
Aula5 introducao c
Aula5 introducao cAula5 introducao c
Aula5 introducao c
 
Linguagem C - Ponteiros
Linguagem C - PonteirosLinguagem C - Ponteiros
Linguagem C - Ponteiros
 
Linguagem C - Estruturas
Linguagem C - EstruturasLinguagem C - Estruturas
Linguagem C - Estruturas
 
Python - Programação funcional
Python - Programação funcionalPython - Programação funcional
Python - Programação funcional
 
Introduçãso a linguagem c
Introduçãso a linguagem cIntroduçãso a linguagem c
Introduçãso a linguagem c
 
05 poo-ii
05   poo-ii05   poo-ii
05 poo-ii
 
Estrutura de Dados - Alocação dinâmica de memória
Estrutura de Dados - Alocação dinâmica de memóriaEstrutura de Dados - Alocação dinâmica de memória
Estrutura de Dados - Alocação dinâmica de memória
 
Introdução a Linguagem de Programação C
Introdução a Linguagem de Programação CIntrodução a Linguagem de Programação C
Introdução a Linguagem de Programação C
 
Introdução à Linguagem C
Introdução à Linguagem CIntrodução à Linguagem C
Introdução à Linguagem C
 
Apostila de Alocação Dinâmica em C
Apostila de Alocação Dinâmica em CApostila de Alocação Dinâmica em C
Apostila de Alocação Dinâmica em C
 
introdução a linguagem java-2003
introdução a linguagem java-2003introdução a linguagem java-2003
introdução a linguagem java-2003
 

Destaque

MobileConf 2014 - Xamarin - Desenvolvimento multiplataforma feito da maneira ...
MobileConf 2014 - Xamarin - Desenvolvimento multiplataforma feito da maneira ...MobileConf 2014 - Xamarin - Desenvolvimento multiplataforma feito da maneira ...
MobileConf 2014 - Xamarin - Desenvolvimento multiplataforma feito da maneira ...
Vinicius Jarina
 
Cross Platform com Xamarin e Visual Studio 2013
Cross Platform com Xamarin e Visual Studio 2013Cross Platform com Xamarin e Visual Studio 2013
Cross Platform com Xamarin e Visual Studio 2013
Rogério Rodrigues
 
The Developer's Conference 2015 - Florianópolis - Use o Xamarin.Forms e surpr...
The Developer's Conference 2015 - Florianópolis - Use o Xamarin.Forms e surpr...The Developer's Conference 2015 - Florianópolis - Use o Xamarin.Forms e surpr...
The Developer's Conference 2015 - Florianópolis - Use o Xamarin.Forms e surpr...
Paulo Cesar Ortins Brito
 
Desenvolvimento Mobile: Híbrido x Nativo
Desenvolvimento Mobile: Híbrido x NativoDesenvolvimento Mobile: Híbrido x Nativo
Desenvolvimento Mobile: Híbrido x Nativo
Letticia Nicoli
 
Introdução ao Xamarin
Introdução ao XamarinIntrodução ao Xamarin
Introdução ao Xamarin
Studyxnet
 
Introducing CSS Grid Layout
Introducing CSS Grid LayoutIntroducing CSS Grid Layout
Introducing CSS Grid Layout
Rachel Andrew
 
TDC Porto Alegre 2014 - Quer desenvolver aplicações nativas e cross-plataform...
TDC Porto Alegre 2014 - Quer desenvolver aplicações nativas e cross-plataform...TDC Porto Alegre 2014 - Quer desenvolver aplicações nativas e cross-plataform...
TDC Porto Alegre 2014 - Quer desenvolver aplicações nativas e cross-plataform...
Paulo Cesar Ortins Brito
 
Application insights + ASP.NET Core
Application insights + ASP.NET CoreApplication insights + ASP.NET Core
Application insights + ASP.NET Core
Letticia Nicoli
 
Application Insights + Xamarin
Application Insights + XamarinApplication Insights + Xamarin
Application Insights + Xamarin
Letticia Nicoli
 
Instrumentação Completa para sua Aplicação Mobile com Visual Studio Mobile Ce...
Instrumentação Completa para sua Aplicação Mobile com Visual Studio Mobile Ce...Instrumentação Completa para sua Aplicação Mobile com Visual Studio Mobile Ce...
Instrumentação Completa para sua Aplicação Mobile com Visual Studio Mobile Ce...
Letticia Nicoli
 
Application Insights + Apps Mobile Híbridos
Application Insights + Apps Mobile HíbridosApplication Insights + Apps Mobile Híbridos
Application Insights + Apps Mobile Híbridos
Letticia Nicoli
 
Entendendo Xamarin.Forms
Entendendo Xamarin.FormsEntendendo Xamarin.Forms
Entendendo Xamarin.Forms
Letticia Nicoli
 
Desenvolvimento Cross-Mobile com Xamarin
Desenvolvimento Cross-Mobile com Xamarin Desenvolvimento Cross-Mobile com Xamarin
Desenvolvimento Cross-Mobile com Xamarin
Letticia Nicoli
 
Xamarin - Como Otimizar o Desenvolvimento Mobile Multiplataforma
Xamarin - Como Otimizar o Desenvolvimento Mobile MultiplataformaXamarin - Como Otimizar o Desenvolvimento Mobile Multiplataforma
Xamarin - Como Otimizar o Desenvolvimento Mobile Multiplataforma
Xpand IT
 
C# 7 em 7 minutos
C# 7 em 7 minutosC# 7 em 7 minutos
C# 7 em 7 minutos
Letticia Nicoli
 
Montreal Girl Geeks: Building the Modern Web
Montreal Girl Geeks: Building the Modern WebMontreal Girl Geeks: Building the Modern Web
Montreal Girl Geeks: Building the Modern Web
Rachel Andrew
 

Destaque (16)

MobileConf 2014 - Xamarin - Desenvolvimento multiplataforma feito da maneira ...
MobileConf 2014 - Xamarin - Desenvolvimento multiplataforma feito da maneira ...MobileConf 2014 - Xamarin - Desenvolvimento multiplataforma feito da maneira ...
MobileConf 2014 - Xamarin - Desenvolvimento multiplataforma feito da maneira ...
 
Cross Platform com Xamarin e Visual Studio 2013
Cross Platform com Xamarin e Visual Studio 2013Cross Platform com Xamarin e Visual Studio 2013
Cross Platform com Xamarin e Visual Studio 2013
 
The Developer's Conference 2015 - Florianópolis - Use o Xamarin.Forms e surpr...
The Developer's Conference 2015 - Florianópolis - Use o Xamarin.Forms e surpr...The Developer's Conference 2015 - Florianópolis - Use o Xamarin.Forms e surpr...
The Developer's Conference 2015 - Florianópolis - Use o Xamarin.Forms e surpr...
 
Desenvolvimento Mobile: Híbrido x Nativo
Desenvolvimento Mobile: Híbrido x NativoDesenvolvimento Mobile: Híbrido x Nativo
Desenvolvimento Mobile: Híbrido x Nativo
 
Introdução ao Xamarin
Introdução ao XamarinIntrodução ao Xamarin
Introdução ao Xamarin
 
Introducing CSS Grid Layout
Introducing CSS Grid LayoutIntroducing CSS Grid Layout
Introducing CSS Grid Layout
 
TDC Porto Alegre 2014 - Quer desenvolver aplicações nativas e cross-plataform...
TDC Porto Alegre 2014 - Quer desenvolver aplicações nativas e cross-plataform...TDC Porto Alegre 2014 - Quer desenvolver aplicações nativas e cross-plataform...
TDC Porto Alegre 2014 - Quer desenvolver aplicações nativas e cross-plataform...
 
Application insights + ASP.NET Core
Application insights + ASP.NET CoreApplication insights + ASP.NET Core
Application insights + ASP.NET Core
 
Application Insights + Xamarin
Application Insights + XamarinApplication Insights + Xamarin
Application Insights + Xamarin
 
Instrumentação Completa para sua Aplicação Mobile com Visual Studio Mobile Ce...
Instrumentação Completa para sua Aplicação Mobile com Visual Studio Mobile Ce...Instrumentação Completa para sua Aplicação Mobile com Visual Studio Mobile Ce...
Instrumentação Completa para sua Aplicação Mobile com Visual Studio Mobile Ce...
 
Application Insights + Apps Mobile Híbridos
Application Insights + Apps Mobile HíbridosApplication Insights + Apps Mobile Híbridos
Application Insights + Apps Mobile Híbridos
 
Entendendo Xamarin.Forms
Entendendo Xamarin.FormsEntendendo Xamarin.Forms
Entendendo Xamarin.Forms
 
Desenvolvimento Cross-Mobile com Xamarin
Desenvolvimento Cross-Mobile com Xamarin Desenvolvimento Cross-Mobile com Xamarin
Desenvolvimento Cross-Mobile com Xamarin
 
Xamarin - Como Otimizar o Desenvolvimento Mobile Multiplataforma
Xamarin - Como Otimizar o Desenvolvimento Mobile MultiplataformaXamarin - Como Otimizar o Desenvolvimento Mobile Multiplataforma
Xamarin - Como Otimizar o Desenvolvimento Mobile Multiplataforma
 
C# 7 em 7 minutos
C# 7 em 7 minutosC# 7 em 7 minutos
C# 7 em 7 minutos
 
Montreal Girl Geeks: Building the Modern Web
Montreal Girl Geeks: Building the Modern WebMontreal Girl Geeks: Building the Modern Web
Montreal Girl Geeks: Building the Modern Web
 

Semelhante a Lua & C++

Usando POP com Programação Funcional
Usando POP com Programação FuncionalUsando POP com Programação Funcional
Usando POP com Programação Funcional
Tales Andrade
 
Estudo de Funções com o Software Winplot
Estudo de Funções com o Software Winplot Estudo de Funções com o Software Winplot
Estudo de Funções com o Software Winplot
Rodrigo Romais
 
A Linguagem Lua - Uma abordagem inicial
A Linguagem Lua - Uma abordagem inicialA Linguagem Lua - Uma abordagem inicial
A Linguagem Lua - Uma abordagem inicial
Flávio Schuindt
 
Aula17
Aula17Aula17
Mat ppt1
Mat ppt1Mat ppt1
Mat ppt1
YvesRaphael
 
Aula01
Aula01Aula01
Aula01
vdlos
 
Scala: unindo programação funcional e orientação a objetos
Scala: unindo programação funcional e orientação a objetosScala: unindo programação funcional e orientação a objetos
Scala: unindo programação funcional e orientação a objetos
Felipe Hummel
 
Usando o winplot
Usando o winplotUsando o winplot
Usando o winplot
Valerio Vava
 
Jython no JavaOne Latin America 2011
Jython no JavaOne Latin America 2011Jython no JavaOne Latin America 2011
Jython no JavaOne Latin America 2011
Luciano Ramalho
 
Intro funcoes(2)
Intro funcoes(2)Intro funcoes(2)
Intro funcoes(2)
Layane Sousa
 
Funções em C
Funções em CFunções em C
Funções em C
Elaine Cecília Gatto
 
1 Funções.pdf
1 Funções.pdf1 Funções.pdf
1 Funções.pdf
AnabelaGonalves46
 
Cartilha de Octave para Matematica Computacional.pdf
Cartilha de Octave para Matematica Computacional.pdfCartilha de Octave para Matematica Computacional.pdf
Cartilha de Octave para Matematica Computacional.pdf
Edkallenn Lima
 
Minicurso Python
Minicurso PythonMinicurso Python
Minicurso Python
guestac3de
 
TDC2018SP | Trilha Ruby - Programacao funcional com Ruby, potencialize e simp...
TDC2018SP | Trilha Ruby - Programacao funcional com Ruby, potencialize e simp...TDC2018SP | Trilha Ruby - Programacao funcional com Ruby, potencialize e simp...
TDC2018SP | Trilha Ruby - Programacao funcional com Ruby, potencialize e simp...
tdc-globalcode
 
Aula - Funções (Curso de Python Básico -- FATEC SENAI MT)
Aula - Funções (Curso de Python Básico -- FATEC SENAI MT)Aula - Funções (Curso de Python Básico -- FATEC SENAI MT)
Aula - Funções (Curso de Python Básico -- FATEC SENAI MT)
Filipe Chagas Ferraz
 
Design de código: princípios e práticas para ter um código sustentável
Design de código: princípios e práticas para ter um código sustentávelDesign de código: princípios e práticas para ter um código sustentável
Design de código: princípios e práticas para ter um código sustentável
Andrews Medina
 
IEEEweek 2017 @ DETI Univ. Aveiro - Workshop Python
IEEEweek 2017 @ DETI Univ. Aveiro - Workshop PythonIEEEweek 2017 @ DETI Univ. Aveiro - Workshop Python
IEEEweek 2017 @ DETI Univ. Aveiro - Workshop Python
Diogo Gomes
 
A gnuplot tutorial
A gnuplot tutorialA gnuplot tutorial
A gnuplot tutorial
Lagal Tchixa
 
Aula python
Aula pythonAula python

Semelhante a Lua & C++ (20)

Usando POP com Programação Funcional
Usando POP com Programação FuncionalUsando POP com Programação Funcional
Usando POP com Programação Funcional
 
Estudo de Funções com o Software Winplot
Estudo de Funções com o Software Winplot Estudo de Funções com o Software Winplot
Estudo de Funções com o Software Winplot
 
A Linguagem Lua - Uma abordagem inicial
A Linguagem Lua - Uma abordagem inicialA Linguagem Lua - Uma abordagem inicial
A Linguagem Lua - Uma abordagem inicial
 
Aula17
Aula17Aula17
Aula17
 
Mat ppt1
Mat ppt1Mat ppt1
Mat ppt1
 
Aula01
Aula01Aula01
Aula01
 
Scala: unindo programação funcional e orientação a objetos
Scala: unindo programação funcional e orientação a objetosScala: unindo programação funcional e orientação a objetos
Scala: unindo programação funcional e orientação a objetos
 
Usando o winplot
Usando o winplotUsando o winplot
Usando o winplot
 
Jython no JavaOne Latin America 2011
Jython no JavaOne Latin America 2011Jython no JavaOne Latin America 2011
Jython no JavaOne Latin America 2011
 
Intro funcoes(2)
Intro funcoes(2)Intro funcoes(2)
Intro funcoes(2)
 
Funções em C
Funções em CFunções em C
Funções em C
 
1 Funções.pdf
1 Funções.pdf1 Funções.pdf
1 Funções.pdf
 
Cartilha de Octave para Matematica Computacional.pdf
Cartilha de Octave para Matematica Computacional.pdfCartilha de Octave para Matematica Computacional.pdf
Cartilha de Octave para Matematica Computacional.pdf
 
Minicurso Python
Minicurso PythonMinicurso Python
Minicurso Python
 
TDC2018SP | Trilha Ruby - Programacao funcional com Ruby, potencialize e simp...
TDC2018SP | Trilha Ruby - Programacao funcional com Ruby, potencialize e simp...TDC2018SP | Trilha Ruby - Programacao funcional com Ruby, potencialize e simp...
TDC2018SP | Trilha Ruby - Programacao funcional com Ruby, potencialize e simp...
 
Aula - Funções (Curso de Python Básico -- FATEC SENAI MT)
Aula - Funções (Curso de Python Básico -- FATEC SENAI MT)Aula - Funções (Curso de Python Básico -- FATEC SENAI MT)
Aula - Funções (Curso de Python Básico -- FATEC SENAI MT)
 
Design de código: princípios e práticas para ter um código sustentável
Design de código: princípios e práticas para ter um código sustentávelDesign de código: princípios e práticas para ter um código sustentável
Design de código: princípios e práticas para ter um código sustentável
 
IEEEweek 2017 @ DETI Univ. Aveiro - Workshop Python
IEEEweek 2017 @ DETI Univ. Aveiro - Workshop PythonIEEEweek 2017 @ DETI Univ. Aveiro - Workshop Python
IEEEweek 2017 @ DETI Univ. Aveiro - Workshop Python
 
A gnuplot tutorial
A gnuplot tutorialA gnuplot tutorial
A gnuplot tutorial
 
Aula python
Aula pythonAula python
Aula python
 

Lua & C++

  • 1. Integrando Lua & C++ Vinicius Jarina (viniciusjarina@gmail.com) @viniciusjarina Saturday, September 17, 2011
  • 2. Overview linguagem Lua Vantagens de utilizar Lua Entendendo melhor o Lua Introdução a API C Chamando funções Lua do C Chamando funções C do Lua Usando modelo OO Utilizando geradores de código (toLua++) Saturday, September 17, 2011
  • 3. Lua Normalized fraction of total hits (%) Linguagem leve e rápida 2 Portável (ANSI C) 1.5 Facilmente embarcável 1 Licença livre (MIT) 0.5 2003 2006 Projeto ativo e crescendo 2009 0 2011/Q2 Saturday, September 17, 2011
  • 4. Lua Alguns exemplos de projetos que usam Lua SimCity / The Sims World of Warcraft Adobe Lightroom CryENGINE Saturday, September 17, 2011
  • 5. Vantagens Mas afinal para que utilizar uma linguagem script na minha aplicação? Isolamento Abstração Extensão e personalização Saturday, September 17, 2011
  • 6. Primeiros Passos Exemplo código Lua: local count = 10 -- comentário g = 2*count print("count = ", count, " g = ", g) http://www.lua.org/demo.html Saturday, September 17, 2011
  • 7. Tipos de dado Lua suporta 8 tipos básico de dado: nil, boolean, number, string, userdata, function, thread, table print(type(x)) -- nil (variáveis nascem nil) x = "farandula" print(type(x)) -- string x = 10 print(type(x)) -- number x = print x(type(x)) -- function Saturday, September 17, 2011
  • 8. Tabelas Tabelas são arrays associativos, podem ser indexados por qualquer valor, exceto nil. t = {} -- cria uma tabela, associa uma ref. a t t2 = { x = 20, y = "foo" } t["bar"] = "value" -- sintáxe dicionário t.campo = 10 -- sintáxe registro print(t.bar) -- value print(t["campo"]) -- 10 print(t2.x, t2["y"])-- 20 foo Saturday, September 17, 2011
  • 9. Funções Definindo funções: function soma(a, b) soma = function(a, b) return a + b return a + b end end Retornando múltiplos resultados: function func(a, b) return b, a, 10 end x, y, z = func(15, 20) -- x = 20, y = 15 , z = 10 p, q, r, s = func(2,1) -- p = 1,q = 2,r = 10, s = nil Saturday, September 17, 2011
  • 10. +Funções Funções anônimas: function inverso(f) return function(x) return 1/(f(x)) end end Exemplo: function square(x) return x*x end f = inverso(square) print(f(2), f(3)) -- 0.25 0.11111111111111 Saturday, September 17, 2011
  • 11. Closures Exemplo de closure (usando up-values): function fibbo_gen() local i = 0 local j = 1 return function() local k = i + j i = j j = k return k end end Exemplo: f1 = fibbo_gen() print(f1()) -- 1 print(f1()) -- 2 print(f1()) -- 3 print(f1()) -- 5 Saturday, September 17, 2011
  • 12. Metatabelas Permitem alterar comportamento através de metametodos ex: __tostring, __index, __add, __eq, etc... t = {} mt = { __index = function(table, key) return "fixo" end } setmetatable(t, mt) Exemplo: print(t[1]) -- fixo (não encontrou 1, invoca __index) t[1] = "casa" print(t[1]) -- casa Saturday, September 17, 2011
  • 13. Objetos Usando tabela com cara de objeto: t = { } t.func = function (a, ...) print("func:", a, ...) end t.membro = 10 function t:getmembro() return self.membro end -- t.getmembro = function(self) return self.membro end Exemplo: t.func(10) -- func:! 10 t:func(11) -- func:! table: 0x256a3f0! 11 t.func(t, 12) -- func:! table: 0x256a3f0! 12 print(t:getmembro()) -- 10 Saturday, September 17, 2011
  • 14. Módulos Definindo um módulo: module (..., package.seeall) -- size.lua function new (x, y) return {x = x, y = y} end function area(s) return s.x * s.y end Usando módulo: require ‘size’ local s1 = size.new(10,20) print(size.area(s1)) -- 200 Saturday, September 17, 2011
  • 15. Compilação Dinâmica Compilando uma string: i = 10 -- global i f = loadstring(“i = i + 10; print(i)”) g = function() i = i + 10; print(i) end f() -- 20 Compilando uma arquivo Lua: -- file_foo.lua function foo() print(“inside foo”) end f = loadfile(“file_foo.lua”) -- compilou foo mas não executou print(foo) -- nil, pois foo ainda nao existe f() -- definiu foo foo() -- inside foo Saturday, September 17, 2011
  • 16. Tratando Erros Usando pcall e error i = 101 status, err = pcall( function() -- pcall (try) i = i + 1 if(i > 100) then error(“i maior que 100”) -- error (throw) end print(“i = “,i ) -- i será sempre menor que 100 end) if not status then -- (catch, se pcall false, houve erro) print(err) -- i maior que 100 end Saturday, September 17, 2011
  • 17. Overview linguagem Lua Vantagens de utilizar Lua Entendendo melhor o Lua Introdução a API C Chamando funções Lua do C Chamando funções C do Lua Utilizando geradores de código (toLua++) Saturday, September 17, 2011
  • 18. API C Funções API Lua lua_* e luaL_* #include “lua.h” /* header principal do Lua */ #include “lauxlib.h” /* header lib auxiliar do lua (luaL) */ #include “lualib.h” /* header para usar std libs do lua */ int main() { lua_State * L = luaL_newstate(); /* */ luaL_openlibs(L); /* carrega libs std (string, table, etc*/ const char * szScript = “ i = 0 ; function test(a) n“ “ return 2*a + 1 n end n“ “ print(test(i)) n” int nErr = luaL_loadstring(L,szScript) || lua_pcall(L, 0, 0, 0); if(nErr) { printf(lua_tostring(L, -1)); lua_pop(L, 1); } lua_close(L); return 0; } Saturday, September 17, 2011
  • 19. Pilha Empilhando e desempilhando valores lua_pushboolean(L, 1); 6 nil lua_pushnumber(L, 10); lua_pushnil(L); 5 nil lua_pushstring(L, "hello"); 4 “hello” lua_pushvalue(L, -4); lua_replace(L, 3); lua_settop(L, 6); 3 nil lua_remove(L, -3); lua_settop(L, -5); -5 2 10 -5 -4 -3 -2 1 -1 -6 true Saturday, September 17, 2011
  • 20. Chamando funções Lua Chamando uma função global: -- file_modulo.lua function modulo(real, imag) return math.sqrt(real*real + imag*imag) end luaL_dofile(“file_modulo.lua”); // compila e executa o // arquivo file_modulo.lua double real = 3; double imag = 5; lua_getglobal(L,“modulo”); // empilha a global modulo lua_pushnumber(L, real); // empilha param 1 (real) lua_pushnumber(L, imag); // empilha param 2 (imag) lua_pcall(L, 2, 1, 0); // chama modulo(2 entradas, 1 saída) double mod = lua_tonumber(L, -1); // mod == 5 lua_pop(L, 1); Saturday, September 17, 2011
  • 21. Chamando funções C Registrando função C static int pow_l(lua_State *L) { double a = luaL_checknumber (L, 1); double b = luaL_checknumber (L, 2); lua_pushnumber (L, pow (a, b)); return 1; } static const struct luaL_Reg mylib [] = { {"pow", pow_l}, {NULL, NULL} }; int luaopen_mylib (lua_State *L) { luaL_register (L, "mylib", mylib); return 1; } print(“chamando mylib.pow”, mylib.pow(3)) -- chamando mylib.pow 9 Saturday, September 17, 2011
  • 22. Usando toLua++ Exportando uma classe: class car { // tolua_export int m_speed; public: ! ! //tolua_begin // arquivo: car.pkg car(); $cfile "car.h" ~ car(); void set_speed(int speed); int get_speed(); }; // tolua_end #>toluapp -o tolua_car.cpp -H tolua_car.h -n car car.pkg -- cria um novo carro, e seta velocidade local c1 = car:new_local("McQueen") c1:set_speed(10) print("Carro: " .. c1:name() .. " velocidade:" .. c1:speed()); -- Carro: McQueen velocidade: 10 Saturday, September 17, 2011
  • 25. Fim http://lua-users.org/wiki/ Programming in Lua, 2Nd Edition @viniciusjarina http://www.lua.org/docs.html viniciusjarina@gmail.com Saturday, September 17, 2011