Commits

Vinicius Jarina committed 1ba1711

Update NLua Paper.

Comments (0)

Files changed (5)

Added
New image
 	Keywords = {arquitetura da informa{\c c}{\~a}o},
 	School = {Universidade de Bras{\'\i}lia},
 	Title = {Arquitetura da Informa{\c c}{\~a}o: aspectos espistemol{\'o}gicos, cient{\'\i}ficos e pr{\'a}ticos.},
-	Type = {Disserta{\c c}{\~a}o de Mestrado},
+	Type = {Dissertacãoo de Mestrado},
 	Year = {2005}}
 
 @manual{EIA649B,
 
 %% Saved with string encoding Unicode (UTF-8) 
 
+@webpage{pinvoke_msdn,
+	Author = {MSDN. Microsoft Developer Network},
+	Date-Added = {2013-11-12 20:47:24 +0000},
+	Date-Modified = {2013-11-12 20:47:24 +0000},
+	Keywords = {P/Inoke},
+	Lastchecked = {2013-11-12},
+	Title = {Platform Invoke Tutorial},
+	Month = {11},
+	Url = {hhttp://msdn.microsoft.com/en-us/library/aa288468(v=vs.71).aspx},
+	Year = {2013}}
+
+@webpage{define_api,
+	Author = {FOLDOC. The Free On-line Dictionary of Computing},
+	Date-Added = {2013-11-12 20:47:24 +0000},
+	Date-Modified = {2013-11-12 20:47:24 +0000},
+	Keywords = {API},
+	Lastchecked = {2013-11-12},
+	Title = {The Free On-line Dictionary of Computing},
+	Month = {11},
+	Url = {http://foldoc.org/Application+Program+Interface},
+	Year = {2013}}
+
 @article{Loui_08,
     abstract = {{The author recommends that scripting, not Java, be taught first, asserting that students should learn to love their own possibilities before they learn to loathe other people's restrictions.}},
     address = {Los Alamitos, CA, USA},
Binary file modified.
 % CONFIGURAÇÕES DE PACOTES
 % --- 
 
+% Pacotes de formatação de código:
+
+\usepackage[T1]{fontenc}
+\usepackage{inconsolata}
+
+\usepackage{color}
+\definecolor{bluekeywords}{rgb}{0.13,0.13,1}
+\definecolor{greencomments}{rgb}{0,0.5,0}
+\definecolor{redstrings}{rgb}{0.9,0,0}
+
+\usepackage{listings}
+\lstset{language=[Sharp]C,
+  showspaces=false,
+  showtabs=false,
+  breaklines=true,
+  showstringspaces=false,
+  breakatwhitespace=true,
+  escapeinside={(*@}{@*)},
+  commentstyle=\color{greencomments},
+  keywordstyle=\color{bluekeywords},
+  stringstyle=\color{redstrings},
+  basicstyle=\ttfamily,
+  tabsize=4
+}
+
+% Images
+
+
 % ---
 % Configurações do pacote backref
 % Usado sem a opção hyperpageref de backref
 
 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.
 
-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 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 propria 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}.
 
 
 \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.
 
 % ----------------------------------------------------------
 % PARTE - preparação da pesquisa
 	\begin{itemize}
 		\item Metodologias e ferramentes existentes para desenvolvimento móvel.
 		\item Utilizando C\# e .NET para desenvolvimento de aplicacõ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}
 
 	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.
 
-	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 já foi discutido anteriormente, no mercado existem diversas opções de ferramentas para realização de projetos para Android e iOS no mercado.
+	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.
 
-	Xamarin oferece a linguagem C\# para desenvolver para essas duas plataformas, e no Windows Phone C\# é a tecnologia fornecida pela Microsoft para o desenvolvimento.
+	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 as poder do desenvolvimento nativo a adiciona uma série de recursos, tais como:
+	Xamarin 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 Some more text
-  		\item blah, blah.
+  		\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 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 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:
+\begin{itemize}
+	\item Executar e resolver expressões feitas com a linguagem Lua.
+	\item Trocar valores entre um programa Lua e o programa C\#.
+	\begin{itemize}
+		\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 métodos C\# do script Lua.
+	\item Criar objetos .NET no script Lua.
+	\item Compatibilidade com sistema móveis.
+	\begin{itemize}
+		\item Compatibilidade com iOS.
+		\item Compatibilidade com Android.
 	\end{itemize}
+\end{itemize}
+
+\chapter*[Usando a biblioteca Lua]{Usando a biblioteca Lua}
+\addcontentsline{toc}{chapter}{Usando a biblioteca Lua}
+
+A linguagem Lua pode ser facilmente integrada a qualquer sistema. Para ser integrada é preciso fazer uso da biblioteca Lua, fornecida pelos autores da biblioteca \cite[p.~218]{Ierusalimschy_06}.
+
+A biblioteca Lua prove uma API em C para manipular seus dados e realizar a troca de informações.
+
+Exemplo de uso da biblioteca Lua:
+\begin{lstlisting}
+
+lua_State * L = luaL_newstate ();
+luaL_openlibs (L);
+const char * script = "function test (a) return 2*a + 1 end "
+					  "print (test(20))"
+int error = luaL_loadstring (L, script) || lua_pcall (L, 0, 0, 0);
+if (error) {
+	printf (lua_tostring (L, -1));
+	lua_pop (L, 1);
+}
+lua_close (L);
+
+\end{lstlisting}
+
+A biblioteca é desenhada de maneira a facilitar a integração. A manipulação e o transporte de dados é feito através de uma pilha, manipulada pelo cliente da biblioteca e pela máquina virtual da linguagem Lua.
+
 
 \chapter*[Integrando C\# com recursos nativos]{Integrando C\# com recursos nativos}
 \addcontentsline{toc}{chapter}{Integrando C\# com recursos nativos}
+	 
+	 A linguagem C\# permite o uso de bibliotecas nativa em C utilizando um mecanismo chamado de \texttt{P/Invoke}\cite{pinvoke_msdn}
+
+\begin{lstlisting}[caption=P/Invoke,label=pinvoke1]
+
+// Usando P/Invoke
+
+class PInvokeCall
+{
+	[DllImport("MinhaLib.dll")]
+	public static extern void Func ();
+
+	[DllImport("MinhaLib.dll")]
+	public static extern int Func2 (int param1);
+
+	[DllImport("MinhaLib.dll")]
+	public static extern int Func3 (string param1);
+
+}
+\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.
+
+\begin{lstlisting}[caption=P/Invoke,label=pinvoke2]
+
+// Interface MinhaLib.dll
+
+extern "C" __declspec(dllexport) void Func ();
+
+extern "C" __declspec(dllexport) int Func2 (int param1);
+
+extern "C" __declspec(dllexport) int Func3 (const char * param1);
+
+
+\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}.
+
+
+
+
+
+
 \chapter*[Integrando C\# com Lua]{Integrando C\# com Lua}
 \addcontentsline{toc}{chapter}{Integrando C\# com Lua}
 \chapter*[Utilizando NLua]{Utilizando NLua}
 \partapendices
 
 % ----------------------------------------------------------
-\chapter{Quisque libero justo}
+
 % ----------------------------------------------------------
 
 
 
 % ----------------------------------------------------------
-\chapter{Nullam elementum urna vel imperdiet sodales elit ipsum pharetra ligula
-ac pretium ante justo a nulla curabitur tristique arcu eu metus}
+
 % ----------------------------------------------------------
 
 
 \partanexos
 
 % ---
-\chapter{Morbi ultrices rutrum lorem.}
+
 % ---
 
 
 % ---
-\chapter{Cras non urna sed feugiat cum sociis natoque penatibus et magnis dis
-parturient montes nascetur ridiculus mus}
+
 % ---
 
 
 
 % ---
-\chapter{Fusce facilisis lacinia dui}
+
 % ---