-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmonografia.tex
332 lines (292 loc) · 15.4 KB
/
monografia.tex
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
% Arquivo LaTeX de exemplo de dissertação/tese a ser apresentados à CPG do IME-USP
%
% Versão 5: Sex Mar 9 18:05:40 BRT 2012
%
% Criação: Jesús P. Mena-Chalco
% Revisão: Fabio Kon e Paulo Feofiloff
%
% Obs: Leia previamente o texto do arquivo README.txt
% Alterado para monografia do trabalho de formatura (graduação).
\documentclass[11pt,twoside,a4paper]{book}
% ---------------------------------------------------------------------------- %
% Pacotes
\usepackage[T1]{fontenc}
\usepackage[brazil]{babel}
\usepackage[utf8]{inputenc}
\usepackage[pdftex]{graphicx} % usamos arquivos pdf/png como figuras
\usepackage{setspace} % espaçamento flexível
\usepackage{indentfirst} % indentação do primeiro parágrafo
\usepackage{makeidx} % índice remissivo
\usepackage[nottoc]{tocbibind} % acrescentamos a bibliografia/indice/conteudo no Table of Contents
\usepackage{courier} % usa o Adobe Courier no lugar de Computer Modern Typewriter
\usepackage{type1cm} % fontes realmente escaláveis
\usepackage{upquote} % arruma problema com aspas simples no listings
\usepackage{listings} % para formatar código-fonte (ex. em Java)
\usepackage{titletoc}
\usepackage{amsfonts}
\usepackage{amsmath}
\usepackage{clrscode}
\usepackage[sf,bf,small]{titlesec} % cabeçalhos dos títulos: menores e compactos
\usepackage[fixlanguage]{babelbib}
\usepackage[font=small,format=plain,labelfont=bf,up,textfont=it,up]{caption}
\usepackage{subcaption}
\usepackage{wrapfig}
\usepackage[usenames,svgnames,dvipsnames]{xcolor}
\usepackage[a4paper,top=2.54cm,bottom=2.0cm,left=2.0cm,right=2.54cm]{geometry} % margens
%\usepackage[pdftex,plainpages=false,pdfpagelabels,pagebackref,colorlinks=true,citecolor=black,linkcolor=black,urlcolor=black,filecolor=black,bookmarksopen=true]{hyperref} % links em preto
\usepackage[pdftex,plainpages=false,pdfpagelabels,pagebackref,colorlinks=true,citecolor=DarkGreen,linkcolor=NavyBlue,urlcolor=DarkRed,filecolor=green,bookmarksopen=true]{hyperref} % links coloridos
\usepackage[all]{hypcap} % soluciona o problema com o hyperref e capitulos
\usepackage[square,sort,nonamebreak,comma]{natbib} % citação bibliográfica alpha (alpha-ime.bst)
\usepackage{framed,color}
\fontsize{60}{62}\usefont{T1}{cmr}{m}{n}{\selectfont}
% ---------------------------------------------------------------------------- %
% Cabeçalhos similares ao TAOCP de Donald E. Knuth
\usepackage{fancyhdr}
\pagestyle{fancy}
\fancyhf{}
\renewcommand{\chaptermark}[1]{\markboth{\MakeUppercase{\texttt{#1}}}{}}
\renewcommand{\sectionmark}[1]{\markright{\MakeUppercase{\texttt{#1}}}{}}
\renewcommand{\headrulewidth}{0pt}
% ---------------------------------------------------------------------------- %
\graphicspath{{./figuras/}} % caminho das figuras (recomendável)
\frenchspacing % arruma o espaço: id est (i.e.) e exempli gratia (e.g.)
\urlstyle{same} % URL com o mesmo estilo do texto e não mono-spaced
\makeindex % para o índice remissivo
\raggedbottom % para não permitir espaços extra no texto
\fontsize{60}{62}\usefont{T1}{cmr}{m}{n}{\selectfont}
\cleardoublepage
\normalsize
% ---------------------------------------------------------------------------- %
% Opções de listing usados para o código fonte
% Ref: http://en.wikibooks.org/wiki/LaTeX/Packages/Listings
\lstdefinelanguage{lua}
{morekeywords={and,break,do,else,elseif,end,false,for,function,if,in,local,
nil,not,or,repeat,return,then,true,until,while},
morekeywords={[2]arg,assert,collectgarbage,dofile,error,_G,getfenv,
getmetatable,ipairs,load,loadfile,loadstring,next,pairs,pcall,print,
rawequal,rawget,rawset,select,setfenv,setmetatable,tonumber,tostring,
type,unpack,_VERSION,xpcall},
morekeywords={[2]coroutine.create,coroutine.resume,coroutine.running,
coroutine.status,coroutine.wrap,coroutine.yield},
morekeywords={[2]module,require,package.cpath,package.load,package.loaded,
package.loaders,package.loadlib,package.path,package.preload,
package.seeall},
morekeywords={[2]string.byte,string.char,string.dump,string.find,
string.format,string.gmatch,string.gsub,string.len,string.lower,
string.match,string.rep,string.reverse,string.sub,string.upper},
morekeywords={[2]table.concat,table.insert,table.maxn,table.remove,
table.sort},
morekeywords={[2]math.abs,math.acos,math.asin,math.atan,math.atan2,
math.ceil,math.cos,math.cosh,math.deg,math.exp,math.floor,math.fmod,
math.frexp,math.huge,math.ldexp,math.log,math.log10,math.max,math.min,
math.modf,math.pi,math.pow,math.rad,math.random,math.randomseed,math.sin,
math.sinh,math.sqrt,math.tan,math.tanh},
morekeywords={[2]io.close,io.flush,io.input,io.lines,io.open,io.output,
io.popen,io.read,io.tmpfile,io.type,io.write,file:close,file:flush,
file:lines,file:read,file:seek,file:setvbuf,file:write},
morekeywords={[2]os.clock,os.date,os.difftime,os.execute,os.exit,os.getenv,
os.remove,os.rename,os.setlocale,os.time,os.tmpname},
alsodigit = {.},
sensitive=true,
morecomment=[l]{--},
morecomment=[s]{--[[}{]]},
morestring=[b]",
morestring=[d]',
morestring=[s]{[[}{]]},
}
\lstset{ %
language=C++, % choose the language of the code
basicstyle=\footnotesize, % the size of the fonts that are used for the code
numbers=left, % where to put the line-numbers
numberstyle=\footnotesize, % the size of the fonts that are used for the line-numbers
stepnumber=1, % the step between two line-numbers. If it's 1 each line will be numbered
numbersep=5pt, % how far the line-numbers are from the code
showspaces=false, % show spaces adding particular underscores
showstringspaces=false, % underline spaces within strings
showtabs=false, % show tabs within strings adding particular underscores
frame=single, % adds a frame around the code
framerule=0.6pt,
tabsize=2, % sets default tabsize to 2 spaces
captionpos=b, % sets the caption-position to bottom
breaklines=true, % sets automatic line breaking
breakatwhitespace=false, % sets if automatic breaks should only happen at whitespace
escapeinside={\%*}{*)}, % if you want to add a comment within your code
backgroundcolor=\color[rgb]{1.0,1.0,1.0}, % choose the background color.
rulecolor=\color[rgb]{0.8,0.8,0.8},
basicstyle=\ttfamily\scriptsize,
keywordstyle=\color{blue}\bfseries,
keywordstyle=[2]\color[rgb]{.4,0,.4}\bfseries,
commentstyle=\color[rgb]{0,.6,0},
stringstyle=\color{red},
showstringspaces=false,
upquote=true,
extendedchars=true,
xleftmargin=10pt,
xrightmargin=10pt,
framexleftmargin=15pt,
framexrightmargin=10pt,
morekeywords={[2]include,ifdef,define,ifndef,endif,nullptr}
}
% ---------------------------------------------------------------------------- %
% Corpo do texto
\begin{document}
\frontmatter
% cabeçalho para as páginas das seções anteriores ao capítulo 1 (frontmatter)
\fancyhead[RO]{{\footnotesize\rightmark}\hspace{2em}\thepage}
\setcounter{tocdepth}{2}
\fancyhead[LE]{\thepage\hspace{2em}\footnotesize{\leftmark}}
\fancyhead[RE,LO]{}
\fancyhead[RO]{{\footnotesize\rightmark}\hspace{2em}\thepage}
\onehalfspacing % espaçamento
% ---------------------------------------------------------------------------- %
% CAPA
% Nota: O título para as dissertações/teses do IME-USP devem caber em um
% orifício de 10,7cm de largura x 6,0cm de altura que há na capa fornecida pela SPG.
\thispagestyle{empty}
\begin{center}
\vspace*{2.3cm}
\textsf{\textbf{
{\LARGE Projeto Ouroboros }\\
{
\Large Sistema de integração automatizada entre \\
\texttt{C++} e linguagens de \emph{script}
}
}}
\vspace*{1.2cm}
\textsf{\Large{Fernando Omar Aluani}} \\
\textsf{\Large{Wilson Kazuo Mizutani}}
\vskip 2cm
\textsc{Trabalho de conclusão de curso}
\vskip 10cm
\textsf{Orientador: Prof. Dr. Marco Dimas Gubitoso}
\vskip 3cm
\normalsize{São Paulo, Dezembro de 2013}
\end{center}
\pagenumbering{roman} % começamos a numerar
% ------------------------------------------------------------------ %
% facilidades %
% ------------------------------------------------------------------ %
\renewcommand{\ttdefault}{txtt}
\def\cyclic#1{\langle #1 \rangle}
\def\script{\emph{script}}
\def\lang#1{\texttt{#1}}
\def\CXX{\lang{C++}}
\def\C{\lang{C}}
\def\VObj{\lang{VirtualObj}}
\def\SMgr{\lang{ScriptManager}}
\def\VMac{\lang{VirtualMachine}}
\def\VData{\lang{VirtualData}}
\def\str#1{cadeia#1 de caracteres}
% comandos novos %
\newcounter{defcnt}
\newcommand\definicao[1]{
\stepcounter{defcnt}
\begin{framed}
\textbf{Definição \thechapter.\thedefcnt:}
\vspace{.5em}
\hspace{-20pt}
#1
\end{framed}
}
\newcommand\notacao{
\textbf{Notação} \hspace{0.2cm}
}
% --------------------------------- %
% Agradecimentos
\chapter*{Agradecimentos}
Muitos de nós programadores sofremos de uma curiosidade mórbida em fazer
programas incrivelmente elaborados e inusitados idenpendentemente da utilidade
deles só para saber se uma ideia que tivemos realmente funciona. Muitas vezes é
esse impulso que leva ao desenvolvimento de sistemas importantes, outras ele
simplesmente leva a boas risadas. Mas uma coisa é certa: essas obsessões são boa
parte do que nos faz querer aprender mais e mais.
Gostaríamos de agradecer a todos que incentivaram em nós essa curiosidade
mórbida, tanto professores quanto amigos. Seja por ter-nos mostrado um truque
de código, ou ensinado alguma técnica secreta de programação, ou ainda
simplesmente apoiado uma de nossas ideias malucas. Muito do que fizemos nesse
trabalho vem da nossa vontade de experimentar com combinações divertidas do que
aprendemos ao longo da nossa vida como estudantes de Ciência da Computação.
% ---------------------------------------------------------------------------- %
% Resumo
\chapter*{Resumo}
Este trabalho é sobre uma biblioteca \CXX{} que estamos desenvolvendo desde
2011. O propósito dela é automatizar a integração entre aplicações programadas
em \CXX{} e \script{s} escritos em \lang{Lua} ou \lang{Python}. Normalmente,
o desenvolvedor da aplicação teria que escrever pelo menos algumas dúzias
de linhas de código para que ela pudesse simplesmente carregar um \script{}
para incorporar seus dados e rotinas. É justamente esse esforço adicional
qual queremos poupar ao usuário. Essa monografia fala sobre a pesquisa que
fizemos por ferramentas que nos ajudassem, sobre o processo de desenvolvimento
e sobre o produto final do nosso trabalho. Começamos por um capítulo introdutório,
seguida da parte objetiva, composta por três capítulos, e depois tratamos
a parte subjetiva, também dividida em três capítulos.
No primeiro capítulo (\ref{cap:intr} -- Introdução), introduzimos a noção de
\script{ing} e a utilidade que ela tem em aplicações de computador. Usamos um
exemplo para ilustrar um caso de uso, e discutimos brevemente as possibilidades
atualmente existentes para integrar \script{s}. Depois, contamos sobre a
motivação que nos levou a elaborar esse projeto, assim como o que diferencia
ele das outras soluções presentes na comunidade Web. Terminamos listando os
objetivos principais do trabalho com relação à biblioteca de programação
que desenvolvemos.
Em seguida, partimos para uma discussão mais conceitual ao longo do próximo
capítulo (\ref{cap:conceitos} -- Conceitos e tecnologias estudadas).
Procuramos entender o que caracteriza as linguagens de programação que estamos
tentando integrar: \CXX{}, \lang{Lua} e \lang{Python}. Para isso, exploramos
as noções de linguagens compiladas contra linguagens interpretadas, e como
o conceito de máquinas virtuais ajuda a entender melhor a relação entre elas.
Ao final, tratamos com mais profundidade sobre as ferramentas que \lang{Lua} e
\lang{Python} nos oferecem, para que fique mais fácil de entender o que
falamos nos demais capítulos do trabalho.
Depois, apresentamos a estrutura do nosso projeto (\ref{cap:estrutura} --
Estrutura do Projeto). Buscamos modelar uma solução para lidar com a
integração automatizada que desejamos que nosso sistema forneça. Esse
capítulo revela como dividimos nosso trabalho em duas grandes frentes,
que chamamos de \textbf{incorporação} e \textbf{exportação}. Tentamos
também deixar claro como o usuário poderá interagir com tudo isso.
Discutimos, no quarto capítulo (\ref{cap:atividades} -- Atividades), sobre a
evolução do nosso sistema, desde sua origem a dois anos atrás até as decisões
que tomamos ao longo desse último ano tendo em vista o trabalho de formatura.
Contamos sobre como nossa participação no USPGameDev levou à ideia inicial
do projeto, assim como o que mudou quando o desvinculamos do grupo. Em seguida,
entramos em alguns detalhes da implementação do nosso sistema, segundo
as duas partes principais idealizadas no capítulo anterior. Também desabafamos sobre
o SWIG, uma ferramenta que nos ajudou inicialmente mas tornou-se uma
enorme dor de cabeça posteriormente. Terminamos falando sobre algumas utilidades
que fizemos em CMake para facilitar o uso da nossa biblioteca.
No último capítulo da parte objetiva (\ref{cap:resultados} -- Resultados)
apresentamos o estado em que o projeto se encontra atualmente. Mostramos e
exemplificamos as funcionalidades, com alguns trechos de código para
deixar mais explícido o que ele é capaz de fazer. Aproveitamos para deixar
algumas instruções de uso, incluindo configuração e compilação das partes
relevantes do sistema.
A parte subjetiva começa com um capítulo para cada autor (\ref{cap:omar} -- Fernando
Omar Aluani, e \ref{cap:wil} -- Wilson Kazuo Mizutani), contando sobre nossas
dificuldades e frustrações no trabalho. Também apresentamos uma relação de
disciplinas que cursamos ao longo da nossa graduação que acreditamos ter nos
ajudado de uma maneira ou de outra. Encerramos a parte subjetiva da monografia
com um breve capítulo (\ref{cap:proximos_passos} -- Próximos passos) listando
as nossas metas futuras para nosso projeto.
% ---------------------------------------------------------------------------- %
% Sumário
\tableofcontents % imprime o sumário
% ---------------------------------------------------------------------------- %
% Capítulos do trabalho
\mainmatter
% cabeçalho para as páginas de todos os capítulos
\fancyhead[RE,LO]{\thesection}
\singlespacing % espaçamento simples
\input parte-intro
\input parte-objetiva % associado ao arquivo: 'cap-objetiva.tex'
\input parte-subjetiva % associado ao arquivo: 'cap-subjetiva.tex'
% cabeçalho para os apêndices
\renewcommand{\chaptermark}[1]{\markboth{\MakeUppercase{\appendixname\ \thechapter}} {\MakeUppercase{#1}} }
\fancyhead[RE,LO]{}
\appendix
%\include{ape-conjuntos} % associado ao arquivo: 'ape-conjuntos.tex'
% ---------------------------------------------------------------------------- %
% Bibliografia
\renewcommand\bibname{Referências}
\backmatter \singlespacing % espaçamento simples
\bibliographystyle{alpha-ime}% citação bibliográfica alpha
\bibliography{bibliografia} % associado ao arquivo: 'bibliografia.bib'
\end{document}