1. Vinicius Jarina
  2. NLuaPaper

Commits

Vinicius Jarina  committed 49e4757

Update TGI

  • Participants
  • Parent commits d75967f
  • Branches master

Comments (0)

Files changed (7)

File 00000033.png

Added
New image

File 00000034.png

Added
New image

File nlua.png

Old
Old image
New
New image

File nlua_logo.png

Added
New image

File x.bib

View file
 
 %% Saved with string encoding Unicode (UTF-8) 
 
+
+http://nuget.codeplex.com/
+
+@webpage{nuget,
+	Author = {NuGet, Documentation},
+	Date-Added = {2013-11-14 20:47:24 +0000},
+	Date-Modified = {2013-11-14 20:47:24 +0000},
+	Keywords = {NuGet Package},
+	Lastchecked = {2013-11-14},
+	Title = {What is NuGet?},
+	Month = {11},
+	Url = {http://docs.nuget.org/docs/start-here/overview},
+	Year = {2013}}
+	
+@webpage{runtime_mono,
+	Author = {Mono, Documentation},
+	Date-Added = {2013-11-14 20:47:24 +0000},
+	Date-Modified = {2013-11-14 20:47:24 +0000},
+	Keywords = {Mono Runtime},
+	Lastchecked = {2013-11-14},
+	Title = {Mono:Runtime},
+	Month = {11},
+	Url = {http://www.mono-project.com/Mono:Runtime},
+	Year = {2013}}
+
+@webpage{reverse_mono,
+	Author = {Mono, Documentation},
+	Date-Added = {2013-11-14 20:47:24 +0000},
+	Date-Modified = {2013-11-14 20:47:24 +0000},
+	Keywords = {MonoPInvokeCallback},
+	Lastchecked = {2013-11-14},
+	Title = {MonoPInvokeCallbackAttribute Class},
+	Month = {11},
+	Url = {http://docs.go-mono.com/?link=T%3aMonoTouch.MonoPInvokeCallbackAttribute},
+	Year = {2013}}
+
+@webpage{reverse_xamarin,
+	Author = {xamarin, Developer Center},
+	Date-Added = {2013-11-14 20:47:24 +0000},
+	Date-Modified = {2013-11-14 20:47:24 +0000},
+	Keywords = {MonoPInvokeCallback},
+	Lastchecked = {2013-11-14},
+	Title = {Limitations - Reverse Callbacks},
+	Month = {11},
+	Url = {http://docs.xamarin.com/guides/ios/advanced_topics/limitations/?highlight=MonoPInvokeCallbackAttribute#Reverse_Callbacks},
+	Year = {2013}}
+
+@webpage{reverse_msdn,
+	Author = {Microsoft Developer Network. MSDN},
+	Date-Added = {2013-11-12 20:47:24 +0000},
+	Date-Modified = {2013-11-12 20:47:24 +0000},
+	Keywords = {AllowReversePInvokeCalls},
+	Lastchecked = {2013-11-12},
+	Title = {AllowReversePInvokeCallsAttribute Class},
+	Month = {11},
+	Url = {http://msdn.microsoft.com/en-us/library/system.runtime.interopservices.allowreversepinvokecallsattribute(v=vs.100).aspx},
+	Year = {2013}}
+
+@webpage{ptrdel_msdn,
+	Author = {Microsoft Developer Network. MSDN},
+	Date-Added = {2013-11-12 20:47:24 +0000},
+	Date-Modified = {2013-11-12 20:47:24 +0000},
+	Keywords = {GetFunctionPointerForDelegate},
+	Lastchecked = {2013-11-12},
+	Title = {Marshal.GetFunctionPointerForDelegate Method},
+	Month = {11},
+	Url = {http://msdn.microsoft.com/en-us/library/at4fb09f(v=vs.100).aspx},
+	Year = {2013}}
+
+@webpage{calconv_msdn,
+	Author = {Microsoft Developer Network. MSDN},
+	Date-Added = {2013-11-12 20:47:24 +0000},
+	Date-Modified = {2013-11-12 20:47:24 +0000},
+	Keywords = {CDECL, STDCALL},
+	Lastchecked = {2013-11-12},
+	Title = {Argument Passing and Naming Conventions},
+	Month = {11},
+	Url = {http://msdn.microsoft.com/en-us/library/984x0h58(v=vs.71).aspx},
+	Year = {2013}}
+
+@webpage{clr_msdn,
+	Author = {Microsoft Developer Network. MSDN},
+	Date-Added = {2013-11-12 20:47:24 +0000},
+	Date-Modified = {2013-11-12 20:47:24 +0000},
+	Keywords = {CLR},
+	Lastchecked = {2013-11-12},
+	Title = {Common Language Runtime (CLR)},
+	Month = {11},
+	Url = {http://msdn.microsoft.com/en-us/library/8bs2ecf4(v=vs.110).aspx},
+	Year = {2013}}
+
 @webpage{pinvoke_msdn,
 	Author = {Microsoft Developer Network. MSDN},
 	Date-Added = {2013-11-12 20:47:24 +0000},

File x.pdf

Binary file removed.

File x.tex

View file
+
+
+
+
+
+
+
+
 %% abtex2-modelo-trabalho-academico.tex, v-1.8 laurocesar
 %% Copyright 2012-2013 by abnTeX2 group at http://abntex2.googlecode.com/ 
 %%
 \addcontentsline{toc}{chapter}{Introdução}
 \section{Introdução}
 \subsection {Preâmbulo}
-A humanidade está em constante evolução, novas invenções são criadas, muitas mudam a história e passam a fazer parte significativa do dia-a-dia das pessoas. Desde a máquina a vapor, passando pelo rádio até o telefone, a evolução esta sempre evidente. 
+\label{preambulo1}
+A humanidade está em constante evolução, novas invenções são criadas, muitas mudam a história e passam a fazer parte significativa do dia-a-dia das pessoas. Desde a máquina a vapor, passando pelo rádio até o telefone, a evolução está sempre evidente. 
 Os aparelhos de celular também evoluíram, deixaram de ser simples aparelhos para fazer ligações e passaram a realizar as funcões de um computador pessoal. Os chamados smartphones podem armazenar informações, conectar-se a internet, servir como dispositivo de jogos eletrônicos.
-Cada vez mais os smartphones estão mais presentes em nossa rotina. Seja para mandar uma simples mensagem, consultar dados bancários ou para simples diversão. O mercado de smartphones nunca esteve tão aquecido e a disputa por um espaço no mercado está cada vez mais acirrada. Grandes empresas dominam o cenário atual, diferentes tecnologias e sistemas operacionais dividem este mercado \cite{idc_report}. O Estudo efetualdo pelo IDC \cite{idc_about} mostra que atualmente temos o mercado divido entre Android (Google) \cite{android_about}, iOS (Apple) \cite{ios_about} e \cite{wp_about} Windows Phone (Microsoft).  Com o crescimento do mercado de smartphones, surge um novo mercado: softwares para smartphones. Sem os programas para os smartphones eles não teriam nenhum diferencial em relacão aos celulares ordinários. No entanto os principais líderes na fabricação de smartphones utilizam sistemas operacionais distintos e diferentes técnicas para desenvolvimento de aplicativos. Ao estudar as ferramentes de desenvolvimento de software para cada sistema operacional no mercado, fica evidente que cada fabricante fornece diferentes ferramentas para o desenvolvimento. 
+Cada vez mais os smartphones estão presentes em nossa rotina. Seja para mandar uma simples mensagem, consultar dados bancários ou para diversão. O mercado de smartphones nunca esteve tão aquecido e a disputa por um espaço no mercado está cada vez mais acirrada. Grandes empresas dominam o cenário atual, diferentes tecnologias e sistemas operacionais dividem este mercado \cite{idc_report}. O Estudo efetuado pelo IDC \cite{idc_about} mostra que atualmente temos o mercado dividido entre Android (Google) \cite{android_about}, iOS (Apple) \cite{ios_about} e \cite{wp_about} Windows Phone (Microsoft).  Com o crescimento do mercado de smartphones, surge um novo mercado: softwares para smartphones. Sem os programas para os smartphones eles não teriam nenhum diferencial em relação aos celulares ordinários. No entanto os principais líderes na fabricação de smartphones utilizam sistemas operacionais distintos e diferentes técnicas para desenvolvimento de aplicativos. Ao estudar as ferramentas de desenvolvimento de software para cada sistema operacional no mercado, fica evidente que cada fabricante fornece diferentes ferramentas para o desenvolvimento. 
 
-Apple - O sistema operacional da Apple é o iOS baseado no MacOS X que a empresa desenvolveu para seus desktops basedo no sistemas UNIX e para desenvolver para ele é preciso utilizar a linguagem Objective-C, C ou C++ \cite{ios_dev} e os {\it Frameworks} fornecidos pela própria Apple.
+Apple - O sistema operacional da Apple é o iOS baseado no MacOS X que a empresa desenvolveu para seus desktops baseado nos sistemas UNIX e para desenvolver para ele é preciso utilizar a linguagem Objective-C, C ou C++ \cite{ios_dev} e os {\it Frameworks} fornecidos pela própria Apple.
 
-Google - O sistema operacional do Google é o Android, baseado no Linux e para desenvolver para ele o Google fornece um ambiente de desenvolvolvimento Java, com APIs \cite{define_api} específicas para plataforma, e com APIs padrão da propria plataforma java.
+Google - O sistema operacional do Google é o Android, baseado no Linux e para desenvolver para ele o Google fornece um ambiente de desenvolvolvimento Java, com APIs \cite{define_api} específicas para plataforma, e com APIs padrão da própria plataforma Java.
 
-Microsoft - O sistema operacional da Microsoft é o Windows Phone e o desenvolvimento é feito no ambiente Visual Studio, podendo ser utilizada linguagem C\# ou C++ para as versões mais novas do sistema operacional \cite{wp_dev}.
+Microsoft - O sistema operacional da Microsoft é o Windows Phone e o desenvolvimento é feito no ambiente Visual Studio, podendo ser utilizada a linguagem C\# ou C++ para as versões mais novas do sistema operacional \cite{wp_dev}.
 
-Uma dos maiores desafios no desenvolvimento de sistemas de software é o reúso de código. O reúso se da com a utilização de uma mesma rotina em diferentes sistemas, algo que seja comum, uma solucão comum para um problema comum que possa ser compartilhada entre diferentes programas\cite{Frakes_05}.
+Uma dos maiores desafios no desenvolvimento de sistemas de software é o reúso de código. O reúso se dá com a utilização de uma mesma rotina em diferentes sistemas, algo que seja comum, uma solução comum para um problema comum que possa ser compartilhada entre diferentes programas \cite{Frakes_05}.
+\label{tipada1}
+Existem diversas linguagens de programação para o desenvolvimento de sistemas. Em sistemas grandes e com alto grau de complexidade, o uso de uma linguagem fortemente tipada é mais recomendado. Grandes sistemas não são feitos do dia para noite, e muitas vezes vezes são feitos por equipes com mais de uma pessoa. Dessa forma a existência de tipos, ajuda no crescimento do sistema e na manutenção de um sistema complexo \cite{Cardelli_91}.
 
-Existem diversas linguagens de programação para o desenvolvimento de sistemas. Em sistemas grandes e com alto grau de complexidade o uso de uma linguagem fortemente tipada é mais recomendado. Grandes sistemas não são feitos do dia para noite, e muitas vezes vezes são feitos por equipes com mais de uma pessoa. Dessa forma a existência de tipos ajuda no crescimento do sistema e na manutenção de um sistema complexo \cite{Cardelli_91}.
+Por outro lado, muitas vezes existe a necessidade de criar componentes versáteis e dinâmicos, que possam ter seu comportamento alterado sem a necessidade de passar por um processo de compilação, de modo a permitir extensões de seu comportamento ou personalizações de partes do sistema. Para tal tarefa pode ser utilizada uma linguagem de script \cite{Loui_08}, que permite criar a ponte entre componentes já existentes e comportamentos personalizados \cite{Ousterhout_98}. Como pode ser visto nos artigos de Ousterhout e de Loui, o uso de linguagens scripts (ou de extensão, como podem também ser chamadas) apresentam muitas vantagens, tais como: rápido desenvolvimento/prototipação de idéias, pouca verbosidade e alto nível de abstração.
 
-Por outro lado, muitas vezes existe a necessidade de criar componentes versáteis e dinâmicos, que possam ter seu comportamento alterado sem a necessidade de passar por um processo de compilação, de modo a permitir extensões de seu comportamentos ou personalizações de partes do sistema. Para tal tarefa pode ser utilizada uma linguagem de script \cite{Loui_08}, que permite criar a ponte entre componentes já existentes e comportamentos personalizados \cite{Ousterhout_98}. Como pode ser visto nos artigos de Ousterhout e de Loui o uso de linguagens scripts (ou de extensão, como podem também ser chamadas) apresentam muitas vantagens, tais como: rápido desenvolvimento/prototipação de idéias, pouca verbosidade, alto nível de abstração.
-
-O uso de linguagens scripts aliado ao uso uma linguagem de alto nível em um ambiente de computação móvel traz diversos benefícios. Alguns desses benefícios serão expostos ao longo dos conceitos apresentados no desenvolvimento do trabalho.
+O uso de linguagens scripts aliado ao uso uma linguagem de alto nível em um ambiente de computação móvel, traz diversos benefícios. Alguns desses benefícios serão expostos ao longo dos conceitos apresentados no desenvolvimento do trabalho.
 
 \subsection {Introdução ao NLua}
 
-
 O projeto NLua é uma ferramenta que permite a execução e a integração de programas scripts em diversos ambientes: iOS, Android, Windows, Mac, Linux.
-Neste trabalho a linguagem de programação script em questão será a linguagem Lua \cite{Ierusalimschy_06} que será integrada a linguagem C\# \cite{Hejlsberg_08}. Este trabalho é uma extensão de um artigo sobre o mesmo tema \cite{Mascarenhas_07}.
-O NLua é uma bifurcação do projeto LuaInterface, foi desenvolvolvido pensando em extender as funcionalidades do LuaInterface para outros ambientes, corrigir problemas e adicionar novos recursos.
+Neste trabalho a linguagem de programação script em questão será a linguagem Lua \cite{Ierusalimschy_06} que será integrada a linguagem C\# \cite{Hejlsberg_08} no ambiente de execução do .NET conhecido como CLR \cite{clr_msdn}. Este trabalho é uma extensão de um artigo sobre o mesmo tema \cite{Mascarenhas_07}.
+O NLua é uma bifurcação do projeto LuaInterface e foi desenvolvolvido pensando em estender as funcionalidades do LuaInterface para outros ambientes, corrigir problemas e adicionar novos recursos.
 
 % ----------------------------------------------------------
 % PARTE - preparação da pesquisa
 	Os objetivos deste trabalho são os seguintes:
 
 \begin{itemize}
-  \item Pesquisar técnicas integrar uma linguagem script com uma linguagem fortemente tipada.
-  \item Continuar um trabalho de pesquise sobre o tema de integrar a linguagem Lua com C\#, mas agora no ambiente de computação móvel.
+  \item Pesquisar técnicas para integrar uma linguagem script com uma linguagem fortemente tipada.
+  \item Continuar um trabalho de pesquisa sobre o tema de integrar a linguagem Lua com C\#, mas agora no ambiente de computação móvel.
   \item Criar um componente de software que permita utilizar a linguagem Lua integrado à linguagem C\#.
 \end{itemize}
 
 
 \section{Justificativa}
   
-  A justificativa para este projeto esta relacionado a atual ascenção das tecnologias móveis multi-plataforma e a ausência de uma ferramenta que permita o desenvolvimento de scripts que sejam passíveis de serem executados em diversos sistemas operacionais. Dessa forma deixando espaço para uma ferramenta que permita flexibilidade, extensibilidade mas ainda assim permita a utilização de recursos nativos de sistema.
+  A justificativa para este projeto esté relacionada à atual ascensão das tecnologias móveis multi-plataforma e à ausência de uma ferramenta que permita o desenvolvimento de scripts que sejam passíveis de serem executados em diversos sistemas operacionais. Dessa forma, deixando espaço para uma ferramenta que permita flexibilidade, extensibilidade, mas ainda assim permita a utilização de recursos nativos de sistema.
 
 \section{Estrutura do Trabalho}
 	
-	O trabalho está divido seguinte forma:
+	O trabalho está dividido seguinte forma:
 	\begin{itemize}
-		\item Metodologias e ferramentes existentes para desenvolvimento móvel.
-		\item Utilizando C\# e .NET para desenvolvimento de aplicacões móveis.
+		\item Metodologias e ferramentas existentes para desenvolvimento móvel.
+		\item Utilizando C\# e .NET para desenvolvimento de aplicações móveis.
 		\item Requisitos do projeto.
 		\item Usando a biblioteca Lua.
 		\item Integrando C\# com recursos nativos.
 		\item NLua - Integrando C\# com Lua.
 		\item NLua - Utilizando NLua na sua aplicação.
-		\item Portando NLua para outras plataformas.
 		\item Método para realização do projeto e resultados.
 		\item Conclusão.
 	\end{itemize}
 
-\chapter*[Metodologias e ferramentes existentes para desenvolvimento móvel]{Metodologias e ferramentes existentes para desenvolvimento móvel}
-\addcontentsline{toc}{chapter}{Metodologias e ferramentes existentes para desenvolvimento móvel}
+\chapter*[Metodologias e ferramentas existentes para desenvolvimento móvel]{Metodologias e ferramentas existentes para desenvolvimento móvel}
+\addcontentsline{toc}{chapter}{Metodologias e ferramentas existentes para desenvolvimento móvel}
 
 \section{Ferramentas de desenvolvimento}
 
-  O desenvolvimeto de aplicações móveis pode ser divido em dois grupos: aplicações que rodam dentro do navegador (conhecidas como aplicações Web) ou aplicações que rodam diretamente no sistema operacional do celular, fazendo uso direto dos recursos do sistema (conhecidas como aplicaçõs nativas). As aplicações nativas no entanto, podem ser desenvolvidas utilizando ferramentas fornecidas pelo fabricante da plataforma, ou por ferramentas de terceiros.
-  Quando o principal objetivo de um projeto é a reutilização entre diferentes plataformas as duas opções mais imediatas são: Web ou plataforma de terceiros multi-plataforma. No artigo de Andre Charland e Brian LeRoux é levantada uma questão semelhante, comparando o desenvolvimento em ambiente Web vs desenvolvimento Nativo de aplicações \cite{Charland_11}.
+  O desenvolvimeto de aplicações móveis pode ser dividido em dois grupos: aplicações que rodam dentro do navegador (conhecidas como aplicações Web) ou aplicações que rodam diretamente no sistema operacional do celular, fazendo uso direto dos recursos do sistema (conhecidas como aplicaçõs nativas). As aplicações nativas no entanto, podem ser desenvolvidas utilizando ferramentas fornecidas pelo fabricante da plataforma, ou por ferramentas de terceiros.
+  Quando o principal objetivo de um projeto é a reutilização entre diferentes plataformas, as duas opções mais imediatas são: Web ou plataforma de terceiros multi-plataforma. No artigo de Andre Charland e Brian LeRoux é levantada uma questão semelhante, comparando o desenvolvimento em ambiente Web vs desenvolvimento Nativo de aplicações \cite{Charland_11}.
   
 \section{Desenvolvimento Web}
-  O uso da plataforma de Web para o desenvolvimento de aplicações móveis tem muitas vantagens. A começar pelos diversos padrões da indústria, cada dia mais o ambiente Web tem se tornado uma plataforma sólida para a base de muito aplicativos, agregando novas tecnlogias e novos padrões como JavaScrip, HTML5, CSS. Os navegados móveis estão cada vez mais rápidos e mais bem preparados nas plataformas móveis \cite{Hales_2012}. 
+  O uso da plataforma de Web para o desenvolvimento de aplicações móveis tem muitas vantagens, a começar pelos diversos padrões da indústria, cada dia mais o ambiente Web tem se tornado uma plataforma sólida para a base de muito aplicativos, agregando novas tecnlogias e novos padrões como JavaScrip, HTML5, CSS. Os navegados móveis estão cada vez mais rápidos e mais bem preparados nas plataformas móveis \cite{Hales_2012}. 
   
-  No entanto há alguns pontos fracos nas aplicações Web: Apesar dos padrões da indústria, muitas vezes temos comportamentos diferentes em navegadores diferentes; muitas vezes a performance de aplicações JavaScript não são satisfatórias. O usuário fica dependente do serviço de dados para poder utilzar a aplicação, os recursos disponíveis para o desenvolvedor Web na maioria dos casos é muito restrito, o que deixa a aplicação Web mais pobre e com uma riqueza de experiência pior do que uma aplicação nativa.
+  No entanto há alguns pontos fracos nas aplicações Web: Apesar dos padrões da indústria, muitas vezes temos comportamentos diferentes em navegadores diferentes; muitas vezes a performance de aplicações JavaScript não são satisfatórias. O usuário fica dependente do serviço de dados para poder utilizar a aplicação, os recursos disponíveis para o desenvolvedor Web na maioria dos casos é muito restrito, o que deixa a aplicação Web mais pobre e com uma riqueza de experiência pior do que uma aplicação nativa.
 
 \section{Desenvolvimento Nativo}
-	O desenvolvimento nativo é realizado com as ferramentes fornecidas pelo fabricante do sistema operacional e apresenta algumas vantagens. Por existir pouco ou quase nenhum intermediário entre a regra de negócio do aplicativo e o sistema operacional, a performance geralmente é bem satisfatória. O suporte do fabricante e as informações para uma plataforma específica é bem acessível.
+	O desenvolvimento nativo é realizado com as ferramentas fornecidas pelo fabricante do sistema operacional e apresenta algumas vantagens. Por existir pouco ou quase nenhum intermediário entre a regra de negócio do aplicativo e o sistema operacional, a performance geralmente é bem satisfatória. O suporte do fabricante e as informações para uma plataforma específica é bem acessível.
 	Entretando a reutilização de diferentes partes (desenvolvidas utilizando as ferramentas nativas) é bem complicada e muitas vezes até impossível. 
-	Por exemplo se um componente para cálculos matemáticos é criado para um projeto iOS, desenvolvida em Objective-C não poderá ser utilizada por um programa no Android (utilizando Java).
+	Por exemplo: se um componente para cálculos matemáticos é criado para um projeto iOS, desenvolvida em Objective-C, não poderá ser utilizada por um programa no Android (utilizando Java).
 
 \section{Desenvolvimento utilizando ferramentas multi-plataforma}
-  O desenvolvimento de aplicações móveis utilizando uma ferramenta multi-plataforma é o caminho do meio, entre uma solução totalmente Web, e uma solução totalmente nativa para uma única plataforma. A grande vantagem das ferramentas multi-plataforma é  criar um ambiente onde possível separar a lógica da aplicação da tecnologia ou da plataforma na qual ela vai rodar. Dessa forma é possível compartilhar recursos em diferentes sistemas operacionais. Há algumas desvantagens quando utilizamos o desenvolvimento com ferramentas multi-plataforma:
-  Dependência do fabricante e da ferramenta multi-plataforma; Em alguns casos, perda de performance. No entanto o ganho de produtivade é muito grande, uma vez que o desenvolvedor não terá de se preocupar com conhecimento sobre cada plataforma específica, acelerando o processo de desenvolvimento.
+  O desenvolvimento de aplicações móveis utilizando uma ferramenta multi-plataforma é o caminho do meio, entre uma solução totalmente Web, e uma solução totalmente nativa para uma única plataforma. A grande vantagem das ferramentas multi-plataforma é  criar um ambiente onde é possível separar a lógica da aplicação da tecnologia ou da plataforma na qual ela vai rodar. Dessa forma é possível compartilhar recursos em diferentes sistemas operacionais. Há algumas desvantagens quando utilizamos o desenvolvimento com ferramentas multi-plataforma como a dependência do fabricante e da ferramenta multi-plataforma, e em alguns casos, perda de performance. No entanto o ganho de produtividade é muito grande, uma vez que o desenvolvedor não terá de se preocupar com conhecimento sobre cada plataforma específica, acelerando o processo de desenvolvimento.
   
   Ferramentas de desenvolvimento multi-plataforma:
 \begin{itemize}
 \end{itemize}
 
 \subsection {PhoneGap}
- A ferramenta PhoneGap é uma plataforma de código aberto que utiliza components Web (JavaScript, HTML, CSS) para o desenvolvimento nativo de aplicações. Um grande diferencial do PhoneGap é que é possível facilmente converter uma aplicação Web em uma aplicação nativa. As principais funcionalidades são disponibilizadas para o desenvolvedor através de APIs JavaScript. No entanto ainda existem algumas limitações, o código JavaScript é interpretado pela aplicação final, gerando uma sensível perda de velocidade.\cite{phonegap_about}
+ A ferramenta PhoneGap é uma plataforma de código aberto que utiliza componentes Web (JavaScript, HTML, CSS) para o desenvolvimento nativo de aplicações. Um grande diferencial do PhoneGap é que é possível facilmente converter uma aplicação Web em uma aplicação nativa. As principais funcionalidades são disponibilizadas para o desenvolvedor através de APIs JavaScript. No entanto ainda existem algumas limitações, o código JavaScript é interpretado pela aplicação final, gerando uma sensível perda de velocidade.\cite{phonegap_about}
 
 \subsection {Titanium SDK}
- O Titanium SDK funciona de maneira semelhante ao PhoneGap, disponibilizando APIs em JavaScript e permite que o aplicativeo feito com Titanium rode nas plataformas Android e iOS. 
- Um grande problema apresentado pelas as aplicações feitas com o Titanium ou o PhoneGap esta relacionado a experiência do usuário. Um usuário de iOS espera que as aplicações tenham uma certa aparência e um certo comportamento (comportamento este inclusive documento pela Apple), da mesma forma os usuário de Android também esperam uma determinada experiência, e muitas vezes uma solução muito genérica não é o suficiente, muitas vezes as aplicações parecem ter um acabamento ruim.\cite{titanium_about}
+ O Titanium SDK funciona de maneira semelhante ao PhoneGap, disponibilizando APIs em JavaScript e permite que o aplicativo feito com Titanium rode nas plataformas Android e iOS. 
+ Um grande problema apresentado pelas as aplicações feitas com o Titanium ou o PhoneGap está relacionado à experiência do usuário. Um usuário de iOS espera que as aplicações tenham uma certa aparência e um certo comportamento (comportamento este inclusive documento pela Apple). Da mesma forma os usuários de Android também esperam uma determinada experiência, e muitas vezes uma solução genérica não é o suficiente, deixando a aplicação com o acabamento ruim.\cite{titanium_about}
 
  \subsection {Xamarin}
- A ferramenta da Xamarin permite o desenvolvimento de aplicações utilizando a linguagem C\# e a plataforma .NET. Desta forma permitindo que programas sejam feitas usando classes e técnicas já bem conhecidas por programadores .NET. Permite a reutilização de muitas partes entre diferentes plataformas \cite{xamarin_dev}
+ A ferramenta da Xamarin possibilita o desenvolvimento de aplicações utilizando a linguagem C\# e a plataforma .NET. Desta forma permitindo que programas sejam feitos usando classes e técnicas já bem conhecidas por programadores .NET. Outra característica é permitir a reutilização de muitas partes entre diferentes plataformas \cite{xamarin_dev}.
 
 
-\chapter*[Utilizando C\# e .NET para desenvolvimento de aplicacões móveis]{Utilizando C\# e .NET para desenvolvimento de aplicacões móveis}
-\addcontentsline{toc}{chapter}{Utilizando C\# e .NET para desenvolvimento de aplicacões móveis}
+\chapter*[Utilizando C\# e .NET para desenvolvimento de aplicações móveis]{Utilizando C\# e .NET para desenvolvimento de aplicações móveis}
+\addcontentsline{toc}{chapter}{Utilizando C\# e .NET para desenvolvimento de aplicações móveis}
 \section {Introdução ao desenvolvimento de aplicações móveis com C\#}
 
-	A linguagem de programação escolhida para a realização de um projeto de software é de grande importância. Conforme já discutido anteriormente o uso de uma linguagem tipada facilita a manutenção a longo prazo de grandes sistemas.
+	A linguagem de programação escolhida para a realização de um projeto de software é de grande importância. Conforme já discutido anteriormente \ref{tipada1}, o uso de uma linguagem tipada facilita a manutenção a longo prazo de grandes sistemas.
 
-	No desenvolvimento de aplicações para Android e iOS, muitas vezes a escolha mais imediata da tecnologia para a realização de um projeto é a fornecidade pelo fabricante. No entanto, como apresentado anteriormente, no mercado existem diversas opções de ferramentas para realização de projetos para Android e iOS.
+	No desenvolvimento de aplicações para Android e iOS, muitas vezes a escolha mais imediata da tecnologia para a realização de um projeto é a fornecidade pelo fabricante. No entanto, como apresentado anteriormente \ref{preambulo1}, no mercado existem diversas opções de ferramentas para realização de projetos para Android e iOS.
 
-	Xamarin oferece a linguagem C\# para desenvolver para essas duas plataformas. Na plataforma do  Windows Phone a linguagem C\# é a tecnologia fornecida pela Microsoft para o desenvolvimento.
+	A ferramenta Xamarin oferece a linguagem C\# para desenvolver para essas duas plataformas. Na plataforma do  Windows Phone a linguagem C\# é a tecnologia fornecida pela Microsoft para o desenvolvimento.
 
-	Xamarin combina o poder do desenvolvimento nativo e adiciona uma série de recursos, tais como:
+	Esta ferramenta combina o poder do desenvolvimento nativo e adiciona uma série de recursos, tais como:
 	\begin{itemize}
   		\item Acesso total aos SDKs nativos: Xamarin prove mapeamento de todo o SDK nativo, tanto no Android, quanto no iOS. Dessa forma é possível mesmo utilizando C\# utilizar qualquer classe e qualquer recurso do sistema operacinal.
-  		\item Interoperabilidade com Object-C, Java, C++: É possível consumir bibliotecas nativas feitas em Object-C, Java ou C++ com Xamarin. Desta forma voce pode utilizar biblioteca de terceiros existentes.
+  		\item Interoperabilidade com Object-C, Java, C++: É possível consumir bibliotecas nativas feitas em Object-C, Java ou C++ com Xamarin, permitindo o uso de bibliotecas de terceiros existentes.
   		\item Ampla biblioteca de base: Com Xamarin, é possível utilizar as bibliotecas de base do .NET (BCL), contando assim com uma série de recursos: XML, Banco de Dados, Persistência, IO, Manipulação de Strings, Network.
 	\end{itemize}
 
 \chapter*[Requisitos do projeto]{Requisitos do projeto}
 \addcontentsline{toc}{chapter}{Requisitos do projeto}
 
-O projeto NLua é uma extensão de um projeto existente, dessa forma, os requisitos devem cobrir os requisitos do projeto existente, adicionando novas capacidades e melhorias.
+O projeto NLua é uma extensão de um projeto existente, dessa forma, os novos requisitos devem cobrir os requisitos antigos, adicionando novas capacidades e melhorias.
 
-O principal foco do projeto está na integração com diversos sistemas operacionais,principalmente com os sistemas operacionais móveis (Android, iOS), assim foram definidos os seguintes requisitos:
+O principal foco do projeto está na integração com diversos sistemas operacionais, principalmente com os sistemas operacionais móveis (Android, iOS). Dessa forma, foram definidos os seguintes requisitos:
 \begin{itemize}
 	\item Executar e resolver expressões feitas com a linguagem Lua.
 	\item Trocar valores entre um programa Lua e o programa C\#.
 		\item Retornar valores do Lua para o C\#.
 		\item Enviar valores do C\# para o Lua.
 	\end{itemize}
-	\item Chamar funcões em Lua do C\#.
+	\item Chamar funções em Lua do C\#.
 	\item Chamar métodos C\# do script Lua.
 	\item Criar objetos .NET no script Lua.
 	\item Compatibilidade com sistema móveis.
 }
 \end{lstlisting}
 
-No exemplo \ref{pinvoke1} as três funcões \texttt{Func, Func2} e \texttt{Func3} são externas ao progroma. Elas estão na bilioteca \texttt{MinhaLib.dll} e estão exportadas na forma de uma funcão nativa.
+No exemplo \ref{pinvoke1} as três funcões \texttt{Func, Func2} e \texttt{Func3} são externas ao programa. Elas estão na biblioteca \texttt{MinhaLib.dll} e estão exportadas na forma de uma função nativa.
 
 \begin{lstlisting}[caption=P/Invoke,label=pinvoke2]
 
 
 \end{lstlisting}
 
-Os tipos de dados são automaticamente convertidos para os tipos nativos equivalentes, dessa forma \texttt{Func2} deve receber um inteiro de 32 bits como parametro, e deve retornar um inteiro de 32 bits e \texttt{Func3} deve receber um tipo \texttt{const char *} e retornar um inteiro de 32bits \ref{pinvoke2}.
+Os tipos de dados são automaticamente convertidos para os tipos nativos equivalentes, dessa forma \texttt{Func2} deve receber um inteiro de 32 bits como parâmetro, e deve retornar um inteiro de 32 bits e \texttt{Func3} deve receber um tipo \texttt{const char *} e retornar um inteiro de 32 bits \ref{pinvoke2}.
 
 
 \chapter*[Integrando C\# com Lua]{Integrando C\# com Lua}
+\addcontentsline{toc}{chapter}{Integrando C\# com Lua}
 
-Para utilizar a biblioteca da linguagem Lua com C\# é preciso utilizar a \texttt{}
+O NLua se integra com o C\# utilizando a biblioteca nativa do Lua e CLR \ref{figNLua}. O .NET Framework é usado nos sistemas operacionais Windows e Windows Phone. Nos demais sistemas operacionais (iOS, Linux, Android, Mac) o Mono Runtime é utilizado \cite{runtime_mono}. 
+
+\begin{figure}[!htb]
+\centering
+\includegraphics{nlua}
+\caption{Estrutura do NLua}
+\label{figNLua}
+\end{figure}
+
+\section{Utilizando a API Lua no C\#}
+\subsection{Chamando funções do Lua no C\#}
+Para utilizar a biblioteca da linguagem Lua com C\# é preciso utilizar o \texttt{P/Invoke} para realizar chamadas nativas na biblioteca Lua. Para isso foi mapeada cada função da biblioteca nativa Lua para uma versão correspondente em C\#.
+
+Exemplo:
+
+\begin{lstlisting}[caption=Protótipo em C, de uma função da biblioteca Lua]
+
+void lua_pushstring(lua_State *L, const char* s);
+
+\end{lstlisting}
+
+\begin{lstlisting}[caption=Protótipo em C\#, label=pinvoke2]
+[DllImport(LIBNAME, 
+		   CallingConvention = CallingConvention.Cdecl,
+		   CharSet = CharSet.Ansi, 
+		   EntryPoint = "lua_pushstring")]
+internal static extern void LuaPushString(IntPtr L,string s);
+\end{lstlisting}
+
+A sentença \ref{pinvoke2} instrui o CLR que \texttt{LuaPushString} é uma função externa, ou seja pertence a uma DLL nativa, com o ponto de entrada \texttt{lua\_pushstring}, convenção de chamada CDECL e parâmetros strings codificados em ANSI.
+
+Dessa forma podemos chamar qualquer função da biblioteca Lua, passando argumentos de tipos primitivos como strings e tipos numéricos.
+
+No entanto a biblioteca Lua precisa realizar chamadas de funcões definidas pelo usuário, para isso precisamos fornecer um mecanismo de invocação reversa, permitindo passar funções de \textit{callback} para a biblioteca.
+
+Quando uma função de \textit{callback} é definida, é preciso tomar anguns cuidados.
+
+Tratamento correto das convenções de chamada - A biblioteca Lua espera ponteiros de função com convenção de chamada CDECL \cite{calconv_msdn}, e os ponteiros de funções manipulados pela CLR são STDCALL. Assim, para contornar este problema foi criado uma função de trampolim para poder passar a chamada de uma convenção de chamada, para a outra.
+
+\begin{lstlisting}[caption=Implementação de trampolim]
+
+#if defined(WIN32) || defined(WP8)
+        #define LUA_STDCALL __stdcall
+#else
+        #define LUA_STDCALL
+#endif
+
+typedef int (LUA_STDCALL *stdcallfunc) (lua_State *L);
+
+static int trampoline (lua_State *L) 
+{
+        stdcallfunc function = (stdcallfunc)lua_touserdata (L, lua_upvalueindex (1));
+        return function (L);
+}
+
+
+LUA_API void lua_pushstdcallcfunction (lua_State *L,stdcallfunc function) 
+{
+        lua_pushlightuserdata (L, (void *) function);
+        lua_pushcclosure (L, trampoline, 1);
+}
+
+\end{lstlisting}
+
+Permitindo chamada reversa por funções nativas - Para permitir que funcões do código gerenciado (CLR) sejam passados para a biblioteca Lua devemos utilizar a função \texttt{GetFunctionPointerForDelegate} \cite{ptrdel_msdn}, esta função permite pegar o valor do ponteiro da função de um Delegate C\#, o ponteiro retornado terá um protótipo equivalente em C e terá convenção de chamada STDCALL. No entanto o método original do Delegate deve estar anotado com \texttt{AllowReversePInvokeCalls} para permitir que o CLR transforme o Delegate em um ponteiro para função. No caso do iOS, devido a algumas limitações da compilação estática é preciso anotar o método com MonoPInvokeCallback para permitir que seja o CLR faça invocações reversas no iOS \cite{reverse_xamarin} \cite{reverse_mono}.
+
+\begin{lstlisting}[caption=Implementação de chamada reversa]
+
+#if MONOTOUCH
+[MonoTouch.MonoPInvokeCallback (typeof (LuaNativeFunction))]
+#endif
+[System.Runtime.InteropServices.AllowReversePInvokeCalls]
+static int PanicCallback (LuaState l)
+{
+        throw new Exception ("Panic!");
+}
+
+public static void LuaAtPanic (IntPtr l, LuaNativeFunction f)
+{
+        IntPtr fnpanic = Marshal.GetFunctionPointerForDelegate (f);
+        NativeMethods.LuaAtPanic (l, fnpanic);
+}
+\end{lstlisting}
 
-\addcontentsline{toc}{chapter}{Integrando C\# com Lua}
 \chapter*[Utilizando NLua]{Utilizando NLua}
 \addcontentsline{toc}{chapter}{Utilizando NLua}
  \subsection {Obtendo o NLua}
+ \label{install_nlua}
+
+ O NLua está disponível na forma de um pacote NuGet \cite{nuget}. NuGet é o gerenciador de pacotes para o desenvolvimento utilizando .NET.
+
+ Para obter o NLua basta procurar \texttt{NLua} no campo de busca:
+
+\begin{figure}[!htb]
+\centering
+\includegraphics[scale=0.5]{00000033}
+\caption{Selecione a opção \texttt{Maganage  NuGet Packages...}}
+\label{fig33}
+\end{figure}
+
+\begin{figure}[!htb]
+\centering
+\includegraphics[scale=0.5]{00000034}
+\caption{Procure \texttt{NLua} e pressione o botão \texttt{Install}}
+\label{fig34}
+\end{figure}
+
  \subsection {Criando um ambiente de execução com o NLua}
+
+Para utilizar o NLua é preciso que este esteja devidamente instalado \ref{install_nlua} e disponível para uso.
+
+A principal classe do NLua é a classe \texttt{Lua}.
+
+A classe \texttt{Lua} é responsável pela comunicação com a bibioteca Lua, armazenando o estado da máquina virtual Lua, trocando informações entre o CLR e a máquina virtual Lua.
+
+\begin{lstlisting}[caption=Criando ambiente de execução Lua,label=ctor_lua]
+
+using NLua;
+
+
+class Program
+{
+	Lua contexto = new Lua ();
+
+	public virtual void Dispose ()
+	{
+		contexto.Dispose ();
+	}
+}
+
+\end{lstlisting}
+
+Para criar um ambiente de execução basta instanciar um objeto do tipo \texttt{Lua} \ref{ctor_lua}.
+
+O contexto da máquina virtual Lua ficará dispónivel, até a liberação do objeto através da função \texttt {Dispose}. Nas listagens a seguir, o objeto \texttt{contexto} sempre se tratará de um objeto \texttt{Lua} previamente instanciado.
+
  \subsection {Resolvendo expressões com NLua}
+
+ Utilizando o NLua é possível realizar a resoluções de expressões de maneira muito simples.
+
+ A função \texttt{DoFile} e \texttt{DoString} executão uma expressão em Lua, efetuando a avaliação da expressão e retornando o seu resultado. A funcão \texttt{DoFile} recebe como argumento o caminho para um arquivo onde a expressão esta armazenada e \textt{DoString} recebe uma string, onde deve ser passada a expressão a ser avaliada.
+
+ \begin{lstlisting}[caption=Criando ambiente de execução Lua,label=ctor_lua]
+
+var resutado = (double) contexto.DoString ("return 10*2(math.sin(3.14/2)")[0];
+
+\end{lstlisting}
+
  \subsection {Invocação de funcões em Lua}
  \subsection {Importando Assemblies com NLua}
  \subsection {Utilizando classes .NET a partir do Lua}
-\chapter*[Portando NLua para outras plataformas]{Portando NLua para outras plataformas}
-\addcontentsline{toc}{chapter}{Portando NLua para outras plataformas}
-\chapter*[Método para realização do projeto]{Método para realização do projeto}
-\addcontentsline{toc}{chapter}{Método para realização do projeto}
 
 % ----------------------------------------------------------
 % Resultados