93
Caso de estudo: Lua Prof: Sérgio Souza Costa Linguagens de Script

Linguagens de Script: Caso de Estudo Lua

Embed Size (px)

Citation preview

Page 1: Linguagens de Script: Caso de Estudo Lua

Caso de estudo: Lua Prof: Sérgio Souza Costa

Linguagens de Script

Page 2: Linguagens de Script: Caso de Estudo Lua

Sobre mim

Sérgio Souza CostaProfessor - UFMADoutor em Computação Aplicada (INPE)

[email protected]

https://sites.google.com/site/profsergiocosta/home

https://twitter.com/profsergiocosta

http://gplus.to/sergiosouzacosta

http://www.slideshare.net/skosta/presentations?order=popular

Page 3: Linguagens de Script: Caso de Estudo Lua

Introdução

● Pragmática● Conceitos chaves● Caso de estudo: Lua

Page 4: Linguagens de Script: Caso de Estudo Lua

Pragmática

Script é um paradigma caracterizado por:

● integração com outros sistemas ● desenvolvimento rápido● eficiência modesta● funções de alto nível e para aplicações

específicas

Page 5: Linguagens de Script: Caso de Estudo Lua

Integração com outros sistemas

Grandes sistemas, são compostos por diversos subsistemas

Linguagens de script, podem ser usadas para integrar estes subsistemas.

Também, para aumentar as possibilidades de customização de grandes sistemas.

Page 6: Linguagens de Script: Caso de Estudo Lua

Exemplos?

Page 7: Linguagens de Script: Caso de Estudo Lua

Exemplos

● Lua○ Jogos, multimedia, Integrado com engines

● JavaScript○ Web, cliente, Integrado ao browser

● PHP, JSP, ASP○ Web, servidor, Integrado com servidor de paginas

● VbScript○ Office, Integrado aos aplicatiovos

● Shell Script○ operações de sistemas operacionais

Page 8: Linguagens de Script: Caso de Estudo Lua

Desenvolvimento rápido

Scripts são caracterizados por um rapido processo de desenvolvimento.

Alguns scripts são escritos e usados apenas uma vez, tais como sequencias de comandos, ex. shell script.

Outros usados mais frequentes, mas sempre com modificações

Page 9: Linguagens de Script: Caso de Estudo Lua

Desenvolvimento rápido

Scripts são caracterizados por um rapido processo de desenvolvimento.

Alguns scripts são escritos e usados apenas uma vez, tais como sequencias de comandos, ex. shell script.

Outros usados mais frequentes, mas sempre com modificações

Citem duas caracteristicas que torna o processo de desenvolvimento rápido nesta linguagem.

Page 10: Linguagens de Script: Caso de Estudo Lua

Desenvolvimento rápido

Edite-rode, diferentemente de edite-compile-link-rode, das linguagens compiladas.

Page 11: Linguagens de Script: Caso de Estudo Lua

Desenvolvimento rápido

Edite-rode, diferentemente de edite-compile-link-rode, das linguagens compiladas.

Usualmente são dinamicamente tipadas, facilitando o reuso de código e redigibilidade, códigos menores

Page 12: Linguagens de Script: Caso de Estudo Lua

Eficiência modesta

● Eficiência não é um requisito essencial em linguagens de script.

● Contudo, o script será apenas parte de um grande sistema,

● Dificilmente, um sistema será todo desenvolvido em uma linguagem de script

● Veja o comparativo das linguagens quanto a velocidade, observem a colocação das linguagens de script.○ http://shootout.alioth.debian.org/u32/which-programming-languages-are-fastest.php

Page 13: Linguagens de Script: Caso de Estudo Lua

Eficiência modesta

● Eficiência não é um requisito essencial em linguagens de script.

● Contudo, o script será apenas parte de um grande sistema,

● Dificilmente, um sistema será todo desenvolvido em uma linguagem de script

● Veja o comparativo das linguagens quanto a velocidade, observem a colocação das linguagens de script.○ http://shootout.alioth.debian.org/u32/which-programming-languages-are-fastest.php

Por que estas linguagens não são

tão eficientes ?

Page 14: Linguagens de Script: Caso de Estudo Lua

Funções de alto nível

● Como, são de uso específicos, elas teram funções de alto nível que tem como objetivo facilitar o seu uso.

Page 15: Linguagens de Script: Caso de Estudo Lua

Conceitos chaves

Linguagens de script são similares a linguagens imperativas:

Page 16: Linguagens de Script: Caso de Estudo Lua

Conceitos chaves

Linguagens de script são similares a linguagens imperativas:● Variaveis, que mudam de valor● Comandos, ● Procedimentos, com efeitos colaterais

Page 17: Linguagens de Script: Caso de Estudo Lua

Conceitos chaves

Podemos destacar algumas caracteristicas específicas:

● processamento de strings em alto nivel● suport a interface gráfica em alto nível● dinamicamente tipadas

Page 18: Linguagens de Script: Caso de Estudo Lua

Caso de estudo: Lua

GUIA ESSENCIAL: Principais Conceitos

Page 19: Linguagens de Script: Caso de Estudo Lua

Lua

● Desenvolvida na PUC-Rio desde 1993● Início modesto, para uso interno expansão

lenta e gradual● "Comitê" de três pessoas: Roberto

Ierusalimschy, Luiz H. de Figueiredo, Waldemar Celes

● Lua, é usado em jogos, tv interativa (nclLua), modelos dinamicos (terrame-inpe) ...

Page 20: Linguagens de Script: Caso de Estudo Lua

Uma das linguagens mais usadas

Neste mês teve uma queda. No mês anterior ela estava a frente de Ruby, JavaScript, Delphi

http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html

Page 21: Linguagens de Script: Caso de Estudo Lua

Mais eficiente que suas "concorrentes"

http://shootout.alioth.debian.org/u32/which-programming-languages-are-fastest.php

Page 22: Linguagens de Script: Caso de Estudo Lua

Lua

● Linguagem de script○ similariedade com Perl, Python, Tcl

● Uma linguagem de extensão○ ênfase em comunicação inter-linguagens○ enfatiza desenvolvimento em múltiplas linguagens

● Uma linguagem de descrição de dados○ anterior a XML

Page 23: Linguagens de Script: Caso de Estudo Lua

XML - Lua - Json

<note><to>Tove</to><from>Jani</fr><heading>Reminder</heading><body>Don't forget me this weekend!</body>

</note>

XML

Page 24: Linguagens de Script: Caso de Estudo Lua

XML - Lua - Json

<note><to>Tove</to><from>Jani</fr><heading>Reminder</heading><body>Don't forget me this weekend!</body>

</note>

note{to = "Tove",from= "Jani",heading ="Reminder",body="Don't forget me this weekend!"

}

XML

Lua

Page 25: Linguagens de Script: Caso de Estudo Lua

XML - Lua - Json

<note><to>Tove</to><from>Jani</fr><heading>Reminder</heading><body>Don't forget me this weekend!</body>

</note>

note{to = "Tove",from= "Jani",heading ="Reminder",body="Don't forget me this weekend!"

}

note{to : "Tove",from : "Jani",heading :"Reminder",body:"Don't forget me this weekend!"

}

XML

Lua

JSON

Page 26: Linguagens de Script: Caso de Estudo Lua

Lua em Jogos

"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.

Page 27: Linguagens de Script: Caso de Estudo Lua
Page 28: Linguagens de Script: Caso de Estudo Lua
Page 29: Linguagens de Script: Caso de Estudo Lua
Page 30: Linguagens de Script: Caso de Estudo Lua
Page 31: Linguagens de Script: Caso de Estudo Lua

Lua:Aplicações

● Ginga○ middleware padrão brasileiro para TV digital

● Wireshark○ analisador de protocolos

● Snort○ intrusion detection and prevention system

Page 32: Linguagens de Script: Caso de Estudo Lua

Lua: Aplicações

● TerraME○ Ambiente de modelagem dinâmica (INPE),

● nmap○ rastreador de redes para segurança

● Eyeon's Digital Fusion○ pós-produção de filmes

● E muitas outras...

Page 33: Linguagens de Script: Caso de Estudo Lua

Lua: vantagens

● Portabilidade○ No contexto que foi proposto, não havia outra

linguagem que rodasse no unix, windows, linux ...● Simplicidade

○ sintaxe simples● Pequeno tamanho

○ Ainda é muito pequenas, bibliotecas e includes não ultrapassa 700 kb.

Page 34: Linguagens de Script: Caso de Estudo Lua

Lua: vantagens

● Acoplabilidade○ Facil integração com C, deste modo com diversas

linguagens.○ C, é o ingles das linguagens de programação ..

● "Eficiência",○ ainda é uma das mais eficientes linguagens

dinamicas e de scripts

Page 35: Linguagens de Script: Caso de Estudo Lua

Lua: Sintaxe

● Sintaxe com inspiração no Pascal● O uso de ; é opcional

function fact (n) local f = 1for i =1, n do

f = f * iendreturn f

end

Page 36: Linguagens de Script: Caso de Estudo Lua

Lua: Comentários

● Comentarios em linha-- este é um comentario

● Comentario em bloco--[[

este éum comentario

--]]

Page 37: Linguagens de Script: Caso de Estudo Lua

Lua: usando

● Linguagem interpretada● Não existe o conceito de função principal● Meu primeiro programa

Ouprint ( "hello world" )

function ola ()print ( "hello world" )

endola() -- chamando a função

Page 38: Linguagens de Script: Caso de Estudo Lua

Lua: usando

● Linguagem interpretada● Não existe o conceito de função principal● Meu primeiro programa

Ouprint ( "hello world" )

function ola ()print ( "hello world" )

endola() -- chamando a função

Salve estes programas em um arquivo primeiro.lua e execute-o:

> lua primeiro.lua

Page 39: Linguagens de Script: Caso de Estudo Lua

Lua: Usando

Usando no modo iterativo:

sh> lua> print ( "ola mundo !!" )> print (10+9)

Page 40: Linguagens de Script: Caso de Estudo Lua

Lua: Atribuições

Em Lua, podemos fazer atribuições multiplas:

a = 10b = 20a, b = b, a

Page 41: Linguagens de Script: Caso de Estudo Lua

Lua: Sistema de tipos

● Linguagem dinamicamente tipada● Escopo e amarração de variáveis

○ Tudo é global, até que se prove o contrário● Tipos de dados

○ nil, boolean, number, string, table, function, userdata● Funções como valores de primeira ordem

○ Parametros e retorno de funções, tem a mesmos previlegios dos outros tipos

Page 42: Linguagens de Script: Caso de Estudo Lua

Lua: Sistema de tipos

Como os tipos variam durante a execução, lua fornece uma função que retorna o tipo de uma variavel:

print (type (a))a = 1234print (type (a))a = "ola"print (type (a))

Quais serão as saídas ?

Page 43: Linguagens de Script: Caso de Estudo Lua

Lua: tipos de dados

● nil● number● string● function● userdata● table

Page 44: Linguagens de Script: Caso de Estudo Lua

Tipo nil

● Representa o valor indefinido ou inexistente.

● Tipo do valor default das variáveis

● Também significa o falso booleano○ Qualquer valor de outro tipo significa verdadeiro

■ Com exceção de false

Page 45: Linguagens de Script: Caso de Estudo Lua

Tipo boolean

● Valor booleano○ Falso (false) ou verdadeiro (true)

if (choveu == true) then ....

● Operadores relacionais booleanos==, ~=, <, >, <=, >=

Page 46: Linguagens de Script: Caso de Estudo Lua

Tipo number

Único tipo nativo para valores numéricosdouble (por default)

a = 3b = 3.5c = 4.5e-8

Page 47: Linguagens de Script: Caso de Estudo Lua

Tipo string

● Valores imutáveis○ Não é um vetor de caracteres, não tem como

modificar uma dada posição● Sem limite de tamanho

○ É comum ler arquivo completo em uma string○ Similar ao Haskell

● Strings não usam \0 para terminação● Podem armazenar dados binários quaisquer● Pattern-matching poderoso

○ Implementado via biblioteca padrão

Page 48: Linguagens de Script: Caso de Estudo Lua

Tipo String

Exemplo:

a = "ola"b = "mundo"c = a.." "..b -- o .. é usado para concatenarprint (c)

Page 49: Linguagens de Script: Caso de Estudo Lua

Tipo function

Duas notações:

function inc (x) return x+1

end

inc = function (x) return x+1

end

Page 50: Linguagens de Script: Caso de Estudo Lua

Tipo function

Valores de primeira classe

function twice (f, a)return f (f (a))

end

function dobra (a)return 2* aend

print (twice (dobra, 4))

w = {redraw = function () ...end,pick = function (x,y) ...end,}

Page 51: Linguagens de Script: Caso de Estudo Lua

Tipo function

Retorno multiplos

function f (a,b)return 2*a, 2*b

end

print ( f(4,5))

Page 52: Linguagens de Script: Caso de Estudo Lua

Tipo function

Passando multiplos parametros:

function f(...)for i=1, #arg do

print(arg[i])end

end

f (5,7,8)

Page 53: Linguagens de Script: Caso de Estudo Lua

Tipo function

Funções anônimas, suporte a notação lambda

a = twice (2, function (x) return 2*x end)print (a)

Page 54: Linguagens de Script: Caso de Estudo Lua

Amarração

● Tudo é global até que prove o contrário● Importante, sempre declare como local suas

variaveis dentro das funções

function f1 ()local a = 1;

end

f1()print (a)

Page 55: Linguagens de Script: Caso de Estudo Lua

Amarração

● Tudo é global até que prove o contrário● Importante, sempre declare como local suas

variaveis dentro das funções

function f1 ()local a = 1;

end

f1()print (a)

Rode este código com e sem a palavra reservada "local"

Page 56: Linguagens de Script: Caso de Estudo Lua

Amarração

● Acesso a variáveis em escopos externos○ Closures

● Expressão cujo valor é calculado quando a função que a contém é criada○ Quando o fecho é feito

function add (x)return function (y)

return y+xend

end

add1 = add(1)print(add1(10)) --> 11

Page 57: Linguagens de Script: Caso de Estudo Lua

Tipo userdata

● Armazena um ponteiro void* de C● Tipo opaco para a linguagem

○ Somente atribuição e teste de igualdade● Linguagem extensível em C

○ Esqueleto para construção de linguagens de domínio específico

Page 58: Linguagens de Script: Caso de Estudo Lua

Tipo table

● Resultado da expressão {}● Arrays associativos● Qualquer valor com chave● Único mecanismo de estruturação de dados

○ É para Lua o que lista é para Lisp

Page 59: Linguagens de Script: Caso de Estudo Lua

Tipo table

The only structured data type is table. I implements associative arrays, that is, arrays that can be indexed not only with integers, but with string, double, table, or function values.

For table indexing, both table.name and table[''name''] are acceptable. Tables can be used to implement records, arrays, and recursive data types.

Page 60: Linguagens de Script: Caso de Estudo Lua

Tipo table

Como vetores, o primeiro indice é 1v = {2,3,5,6}print (v[1], v[2])

Matrizes, tabela de tabela

m = { {1,2,3},{4,5,6}}print (m[2][2])

Page 61: Linguagens de Script: Caso de Estudo Lua

Tipo table

● Pode ser indexada por diferentes tipos, não somente inteiros

● Estrutura de dados registros ou tipos cartesianos

● Acessando dado, notação "sugar"

t.x para t["x"]:

Page 62: Linguagens de Script: Caso de Estudo Lua

pessoa = {Nome = Joao ,Idade = 20,Telefone = 66666666

}

print (pessoa.Nome)print (pessoa[Nome])

Tipo table

Page 63: Linguagens de Script: Caso de Estudo Lua

Tipo table

Descrição de dados + semântica imperativa

article{author="F.P.Brooks",title="The Mythical Man-Month",year=1975

}

temp = {}temp["author"] = "F.P.Brooks"temp["title"] = "The Mythical Man-Month"temp["year"] = 1975article(temp)

Unico construtor

Page 64: Linguagens de Script: Caso de Estudo Lua

Tipo table

● Duas maneiras de percorrer tabelas○ table.foreach será removida de versões futuras.

t = {4,5,6,7,8}

for i,v in pairs (t) do print (i,v) end

table.foreach (t, function (i,v) print (i,v) end)

Page 65: Linguagens de Script: Caso de Estudo Lua

Tipo table

Atribuição de tabela é sempre referencia, similar a Java ,JavaScript ... :

a = {"joão"}b=aprint (a[1], b[1])b[1] = "Maria"print (a[1], b[1])

Page 66: Linguagens de Script: Caso de Estudo Lua

Tipo table

● Funções 1a classe + tabelas = quase OO○ Tabelas podem ter funções como campos

p = {x = 10, y = 20} -- dados-- cria uma função na tabela "p"function p.getX (self)

print (self.x)end-- chama a função da tabela "p"p.getX(p)

Page 67: Linguagens de Script: Caso de Estudo Lua

Tipo table

● Funções 1a classe + tabelas = quase OO○ Tabelas podem ter funções como campos

● "Sugar notation"

p = {x = 10, y = 20}function p:getX ()

// nao precisa passar explicito selfprint (self.x)

end// nao precisa passar "p"p:getX()

Page 68: Linguagens de Script: Caso de Estudo Lua

Tipo table

Existem diversas funções úteis (olhar manual):

t = {2,3,4,5}table.getn (t) -- retorna o tamanho da tabela#t -- ao inves de getn, podemos usar o operador "#"table.insert (t, 10)table.remove (t) -- equivalente ao pop, remove o ultimo ...

Page 69: Linguagens de Script: Caso de Estudo Lua

Construtores

Simulando POO

person = {};person.name = "Nicholas";person.age = 29;person.job = "Software Engineer";

function person:sayName () print(self.name);end

person:sayName()

Page 70: Linguagens de Script: Caso de Estudo Lua

Construtores

Simulando POO

person = {};person.name = "Nicholas";person.age = 29;person.job = "Software Engineer";

function person:sayName () print(self.name);end

person:sayName()

Sempre que criar um novo "person", terei que escrever a função sayName?

Page 71: Linguagens de Script: Caso de Estudo Lua

Construtores

Simulando POO

person = {};person.name = "Nicholas";person.age = 29;person.job = "Software Engineer";

function person:sayName () print(self.name);end

person:sayName()

Sempre que criar um novo "person", terei que escrever a função sayName?

Qual a solução ?

Page 72: Linguagens de Script: Caso de Estudo Lua

Construtores

function Person(name, age, job)local self = {}self.name = name;self.age = age;self.job = job;self.sayName = function()

print(self.name);endreturn self

end

person1 = Person("Nicholas", 29, "Software Engineer");person2 = Person("Greg", 27, "Doctor");person1:sayName ()person2:sayName ()

Page 73: Linguagens de Script: Caso de Estudo Lua

Construtores

function Person(name, age, job)local self = {}self.name = name;self.age = age;self.job = job;self.sayName = function()

print(self.name);endreturn self

end

person1 = Person("Nicholas", 29, "Software Engineer");person2 = Person("Greg", 27, "Doctor");person1:sayName ()person2:sayName ()

Qual o problema desta solução ?

Page 74: Linguagens de Script: Caso de Estudo Lua

Construtores

function Person(name, age, job)local self = {}self.name = name;self.age = age;self.job = job;self.sayName = function()

print(self.name);endreturn self

end

person1 = Person("Nicholas", 29, "Software Engineer");person2 = Person("Greg", 27, "Doctor");person1:sayName ()person2:sayName ()

Qual o problema desta solução ?

Como resolver ?

Page 75: Linguagens de Script: Caso de Estudo Lua

Construtores

● Solução: metatabelas, conceito "prototype", presente em diversas outras linguagens

● Conceito chave: separar os metodos em uma tabela distinta, de modo a ter replicas destes metodos na memoria.

Page 76: Linguagens de Script: Caso de Estudo Lua

Construtores: Metatabela

Separando metodos dos dados:

person_methods = {sayName = function (self) print (self.name) end

}

function Person(name, age, job)local self = {}self.name = name;self.age = age;self.job = job;

setmetatable(self, {__index = person_methods} )return self

end

person2 = Person("Greg", 27, "Doctor");person2:sayName ()

Estou dizendo para a linguagem procurar nos indices (__index) de outra tabela,:

Page 77: Linguagens de Script: Caso de Estudo Lua

Sobrecarga de operadores

local Point_metatable = {__add = function (p1,p2) return Point(p1.x+p2.x,p1.y+p2.y) end}-- Construtorfunction Point (p1,p2)

local self = {}self.x = tonumber(p1) or 0.0self.y = tonumber(p2) or 0.0setmetatable(self,Point_metatable)return self

end

local r = Point (3,4) + Point (5,2)print (r.x, r.y)

Estou dizendo como ele faz a soma, _add

Page 78: Linguagens de Script: Caso de Estudo Lua

Controle de fluxo

if (10 > 5) thenprint ("10>5")

elseprint ("algo de muito errado")

end

i = 0while (i < 10) do

print ("i", i)i = i + 1

end

for i = 0, 10 doprint ("i",i)

end

Page 79: Linguagens de Script: Caso de Estudo Lua

Programação modular

Que estrutura é usada para modularizar ?

Page 80: Linguagens de Script: Caso de Estudo Lua

Programação modular

Que estrutura é usada para modularizar ?

TABELAS, logicamente, :)

Page 81: Linguagens de Script: Caso de Estudo Lua

Programação modular

● Lua utiliza a combinação de tabelas com funções de primeira classe para construção de módulos.○ As bibliotecas padrão de Lua são implementadas

como módulos via tabelas.● Exemplo

mod1 = {}function mod1.ola()

print ("Ola, modulo")end

mod1.lua

require "mod1"mod1.ola()

main.lua

Page 82: Linguagens de Script: Caso de Estudo Lua

Usando a API C

● Para usar a API C do Lua, basta baixar a versão de biblioteca referente ao seu sistema (Linux, Windows, 32bit, 64bits ....)● http://sourceforge.

net/projects/luabinaries/files/5.1.4/

Page 83: Linguagens de Script: Caso de Estudo Lua

Entendendo a API

● Não tenho como objetivo ensinar esta API, apenas mostrar o mecanismo de integração de uma linguagem de script.● O mecanismo irá variar de linguagem para

linguagem.● Esta API é relativamente simples,

Page 84: Linguagens de Script: Caso de Estudo Lua

Conceitos chave

● Carregue o arquivo Lua na memoria.● Consulte valores da memoria, e coloque

os na pilha.● Retire os valores da pilha e traga-os para

variaveis do C.

Page 85: Linguagens de Script: Caso de Estudo Lua

Considere o seguinte arquivo

width = 200height = 300

config.lua

Page 86: Linguagens de Script: Caso de Estudo Lua

Função para ler o arquivo void load (char *filename, int *width, int *height) { lua_State *L = luaL_newstate (); luaL_openlibs(L); /* opens Lua */

// carrega o arquivo if (luaL_loadfile(L, filename) || lua_pcall(L, 0, 0, 0)) error(L, "cannot run configuration file: %s”, lua_tostring(L, -1)); // consulta valores, e coloca na pilha lua_getglobal(L, "width"); lua_getglobal(L, "height"); // verifica, e pega o valores da pilha if (!lua_isnumber(L, -2)) error(L, "`width' should be a number\n"); if (!lua_isnumber(L, -1)) error(L, "`height' should be a number\n"); *width = (int)lua_tonumber(L, -2); *height = (int)lua_tonumber(L, -1); lua_close(L); }

Page 87: Linguagens de Script: Caso de Estudo Lua

A função principal ...

int main () { int w, h; load("./config.lua", &w, &h); printf ("%d - %d \n", w,h);

}

Função definida anteriormente

Nome do Arquivo

Page 88: Linguagens de Script: Caso de Estudo Lua

A função principal ...

int main () { int w, h; load("./config.lua", &w, &h); printf ("%d - %d \n", w,h);

}

Função definida anteriormente

Nome do Arquivo

Lembrem-se que em Lua o arquivo de configuração não precisa ser

tão simples

Page 89: Linguagens de Script: Caso de Estudo Lua

Chamando funções

Considerem o seguinte arquivo config.lua

function soma (a, b)return a+b

end

Page 90: Linguagens de Script: Caso de Estudo Lua

Chamando funções

Dado um estado do arquivo lua, poderiamos carrega-la:

int soma (lua_State *L, int a, int b) { int res;

lua_getglobal(L, "soma"); lua_pushinteger (L, a); lua_pushinteger (L, b);

if (lua_pcall (L, 2, 1, 0) != 0 ) printf ("erro\n"); res = lua_tointeger (L,-1); return res; }

Page 91: Linguagens de Script: Caso de Estudo Lua

Chamando funções

A função main, ficaria:

int main () { int r; lua_State *L = luaL_newstate (); luaL_openlibs(L); /* opens Lua */

if (luaL_loadfile(L, "./config.lua") || lua_pcall(L, 0, 0, 0)) error(L, "cannot run configuration file: %s",lua_tostring(L, -1)); r = soma(L, 10, 20); printf ("%d\n", r); lua_close(L);

}

Page 92: Linguagens de Script: Caso de Estudo Lua

Chamando funções

A função main, ficaria:

int main () { int r; lua_State *L = luaL_newstate (); luaL_openlibs(L); /* opens Lua */

if (luaL_loadfile(L, "./config.lua") || lua_pcall(L, 0, 0, 0)) error(L, "cannot run configuration file: %s",lua_tostring(L, -1)); r = soma(L, 10, 20); printf ("%d\n", r); lua_close(L);

}

Saber mais sobre a API, acesse:

Conceitos Básicos e API C

Page 93: Linguagens de Script: Caso de Estudo Lua

Saber Mais ....

lua.org