# HG changeset patch # User mir3636 # Date 1486970915 -32400 # Node ID 6d00f6c9bb8a4ca4a263a78d52b0354bfe8a9a05 # Parent 60756523a9fc14dc889526ebcdccab41dc869b8f update diff -r 60756523a9fc -r 6d00f6c9bb8a final_main/chapter2.tex --- a/final_main/chapter2.tex Sun Feb 12 19:03:28 2017 +0900 +++ b/final_main/chapter2.tex Mon Feb 13 16:28:35 2017 +0900 @@ -16,8 +16,11 @@ Code Gear は CbC における最も基本的な処理単位である。 リスト \ref{code_simple} は最も基本的な CbC のコードの一例で、図 \ref{fig:code_simple}はそれを図示したものである。 CbC では Code Gear は \_\_code という型を持つ関数の構文で定義される。 -Code Gear は戻り値を持たないので、関数とは異なり return 文は存在しない。goto の後に Code Gear 名と引数を並べて、次の Code Gear の遷移を記述する。 -この goto の行き先を継続と呼ぶ。Scheme の継続と異なり CbC には呼び出し元の環境がないので、この継続は単なる行き先である。したがってこれを軽量継続と呼ぶこともある。 +Code Gear は戻り値を持たないので、関数とは異なり return 文は存在しない。 +goto の後に Code Gear 名と引数を並べて、次の Code Gear の遷移を記述する。 +この goto の行き先を継続と呼ぶ。 +Scheme の継続と異なり CbC には呼び出し元の環境がないので、この継続は単なる行き先である。 +したがってこれを軽量継続と呼ぶこともある。 軽量継続により、並列化、ループ制御、関数コールとスタックの操作を意識した最適化がソースコードレベルで行えるようにする。 \begin{lstlisting}[frame=lrbt,label=code_simple,caption={\footnotesize code segment の軽量継続}] @@ -38,6 +41,42 @@ \label{fig:code_simple} \end{figure} +もう少し複雑な CbC のプログラムの例が以下のリスト \ref{factorial} である。 +これは与えられた数値の階乗を算出するプログラムである。 +このコードの factorial0 という Code Gear に注目すると、条件判別を行い、その結果に応じて自分自身への再帰的な継続を行うか別の Code Gear への継続を行うかという処理を行っていることがわかる。 +CbC ではこのようにしてループ処理を制御する。 + +\begin{lstlisting}[frame=lrbt,label=factorial,caption={\footnotesize 階乗を求める CbC プログラムの例}] +__code print_factorial(int prod) +{ + printf("factorial = %d\n",prod); + exit(0); +} + +__code factorial0(int prod, int x) +{ + if ( x >= 1) { + goto factorial0(prod*x, x-1); + }else{ + goto print_factorial(prod); + } + +} + +__code factorial(int x) +{ + goto factorial0(1, x); +} + +int main(int argc, char **argv) +{ + int i; + i = atoi(argv[1]); + + goto factorial(i); +} +\end{lstlisting} + \section{環境付き継続} 環境付き継続は C との互換性のために必要な機能である。 CbC と C の記述を交える際、CbC の Code Gear から C の関数の呼び出しは問題なく行える。 diff -r 60756523a9fc -r 6d00f6c9bb8a final_main/chapter3.tex --- a/final_main/chapter3.tex Sun Feb 12 19:03:28 2017 +0900 +++ b/final_main/chapter3.tex Mon Feb 13 16:28:35 2017 +0900 @@ -1,7 +1,6 @@ \chapter{Gears OS} \section{Gears OS} Gears OS では並列実行するための Task を、実行する Code Gear 、実行に必要な Input Data Gear 、Output Data Gear の組で表現する。 -Gears OS は Input/Output Data Gear の依存関係が解決された Task を並列実行する。 Data Gear はデータの単位であり、int や文字列などの Primitive Type を持っている。 Code Gear は 任意の数の Input Data Gear を参照して処理を行い、Output Data Gear を出力し処理を終える。 また、接続された Data Gear 以外には参照を行わない。 @@ -33,8 +32,8 @@ % \label{fig:gearsos} %\end{figure} -\section{CbC による Gears OS の構文サポート} -Gears OS では Context という接続可能な Code/Data Gear のリスト、TaskQueue へのポインタ、Persistent Data Tree へのポインタ、Temporal Data Gear のためのメモリ空間等を持っている Meta Data Gear がある。 +\section{Context} +Gears OS では Context と呼ばれる接続可能な Code/Data Gear のリスト、TaskQueue へのポインタ、Persistent Data Tree へのポインタ、Temporal Data Gear のためのメモリ空間等を持っている Meta Data Gear がある。 Gears OS は必要な Code/Data Gear に参照したい場合、この Context を通す必要がある。 %メインとなる Context と Worker 用の Context があり、TaskQueue と Persistent Data Tree は共有される。 %Temporal Data Gear のためのメモリ空間は Context 毎に異なり、互いに干渉することはできない。 @@ -43,6 +42,8 @@ しかし、Context を直接扱うのはセキュリティ上好ましくない。 そこで Context から必要なデータを取り出して Code Gear に接続する Meta Code Gear である stub を定義し、これを介して間接的に必要な Data Gear にアクセスする。 + + %現在 CbC で Gears OS を記述すると通常の Computation に加えて Meta Computation である stub を記述する必要がある。 %Meta Computation @@ -51,11 +52,10 @@ %Context や stub は Meta Computation であるため。 \section{Meta Code Gear} -Gears OS では Code Gear 間の遷移に meta レベルの Meta Code Gear を挟む。 +Gears OS では Code Gear 間の遷移に Meta レベルの Meta Code Gear を挟む。 その様子を表したのが図 \ref{fig:metaCS}である。 -通常レベルの Code Gear は一度 Meta Code Gear へと継続し、その後次の Code Gear へと継続する。 -Meta Code Gear は Meta Computation を行う Code Gear で、メモリの確保やネットワーク管理等が Meta Computation にあたる。 -Code Gear にはこれらの処理を書かず、Meta Code Gear に必要に応じて記述する。 +Meta Code Gear は メモリの確保やネットワーク管理などの Meta Computation を行う Code Gear である。 +通常の Code Gear ではこれらの Meta Computation は書かず、Meta Code Gear に必要に応じて記述することになる。 %通常レベルの Code Gear からは Meta Code Gear への継続は見えず、通常レベルの Code Gear に直接継続しているように見えるべきである \begin{figure}[htpb] @@ -74,6 +74,10 @@ %この機能により、CbC は Code Gear のみでなく Data Gear を単位として用いることが可能になった。 %Meta Code Gear、Meta Data Gear により meta computation を通常の Code Gear 内に記述せずにすむ、Code Gear 間に実行される Meta Code Gear で継続先を変更する、エラーハンドリングを行うといった使い方ができるようになるだろう。 +\section{CbC による Gears OS の構文サポート} +Gears OS を現在の CbC の機能のみを用いて記述すると Context や Meta Code Gear、Meta Data Gear の記述を行わなくてはならず、これには多くの労力を要する。 +そのため、この記述を助けるために Context や Meta Code Gear、Meta Data Gear を生成するスクリプトを作成した。 + %\section{TaskQueue} %ActiveTaskQueue と WaitTaskQueue の 2 つの TaskQueue を持つ。 @@ -100,7 +104,7 @@ interface を記述することで -\begin{lstlisting}[frame=lrbt,label=gotoWithTheEnv,caption={stack の interface}] +\begin{lstlisting}[frame=lrbt,label=interface,caption={stack の interface}] Stack* createSingleLinkedStack(struct Context* context) { struct Stack* stack = new Stack(); struct SingleLinkedStack* singleLinkedStack = new SingleLinkedStack(); diff -r 60756523a9fc -r 6d00f6c9bb8a final_main/chapter4.tex --- a/final_main/chapter4.tex Sun Feb 12 19:03:28 2017 +0900 +++ b/final_main/chapter4.tex Mon Feb 13 16:28:35 2017 +0900 @@ -6,6 +6,29 @@ clang は LLVM をバックエンドとして利用する C/C++/Ob jective-C のコンパイラである。 +\section{clang の基本構造} +\label{sec:clang} +clang は library-based architecture というコンセプトの元に設計されており、字句解析を行う liblex、構文解析を行う libparse といったように処理機構ごとに複数のライブラリに分割されている。 +clang はこれらのライブラリを与えられた引数に応じて呼び出し、コンパイルを行う。 +さらに、必要な場合はリンカを呼び出してリンクを行い、ソースコードを実行可能な状態まで変換することも可能である。 + +ここで、そのライブラリの中でもコンパイルに関連するものについて説明する。 + +\begin{description} + \item[libast]\mbox{}\\ + Abstract Syntax Tree (AST) や C の型等をクラスとして利用できるようにしたライブラリ、AST の説明は後述する。% AST は ``-Xclang -ast-dump'' オプションを付加することで表示できる. + \item[liblex]\mbox{}\\ + 字句解析ライブラリ、マクロの展開等の前処理系も担当する。 + \item[libparse]\mbox{}\\ + 構文解析ライブラリ、解析結果を元に後述する libsema を使用して AST を生成する。 + \item[libsema]\mbox{}\\ + 意味解析ライブラリ。parser (libparse) に AST を生成する機能を提供する。 + \item[libcodegen]\mbox{}\\ + コード生成ライブラリ。生成された AST を LLVM IR に変換する。 + \item[clang]\mbox{}\\ + ドライバ、各ライブラリを用いて求められた処理を行う。 +\end{description} + \section{LLVM の基本構造} LLVM は LLVM IR をターゲットのアセンブリ言語に直接的に変換を行うわけではない。 LLVM では、最適化や中間表現の変換を何段階か行う。 diff -r 60756523a9fc -r 6d00f6c9bb8a final_main/chapter5.tex --- a/final_main/chapter5.tex Sun Feb 12 19:03:28 2017 +0900 +++ b/final_main/chapter5.tex Mon Feb 13 16:28:35 2017 +0900 @@ -1,18 +1,180 @@ \chapter{Context、stub の自動生成} Gears OS では 3 章で述べたように通常の Computation の他に Meta Computation を記述する必要がある。 -しかし Meta Computation はユーザーが関知すべきではないので perl スクリプトによる自動生成を行った。 + +\section{stub の生成} + + \section{Context の生成} Context は Meta Data Gear に相当し、Code Gear や Data Gear を管理している。 -Data Gear を取得するために perl スクリプトは context.h を読み宣言された Data Gear を取得する。 - +Data Gear を取得するために perl スクリプトは context の定義 (リスト\ref{context}) を読み宣言された Data Gear を取得する。 Code Gear は指定された cbc ファイルから stub を見て取得を行う。 -Context で Code Gear の名前とポインタの対応は生成する enum Code によって表現される。 +Context では Code Gear の名前とポインタの対応は生成する enum Code によって表現される。 実際に Code Gear に接続する際は enum Code を指定することで接続を行う。 +取得した Code/Data Gear の enum の定義は enumCode.h、enumData.h に生成される。 +取得した Code/Data Gear から Context の生成を行うコード (リスト\ref{init_context}) を生成する。 +Context には Allocation 等で生成した Data Gear へのポインタが格納されている。 +Code Gear は Context を通して Data Gear へアクセスする。 +Data Gear の Allocation を行うコードは dataGearInit.c に生成される。 +Data Gear は union Data とその中の struct によって表現される。 +Context には Data Gear の Data Type の情報が格納されている。 +この情報から確保される Data Gear のサイズなどを決定する。 + +\begin{lstlisting}[frame=lrbt,label=context,caption={\footnotesize context の定義}] +#define ALLOCATE_SIZE 20000000 +#define NEW(type) (type*)(calloc(1, sizeof(type))) +#define NEWN(n, type) (type*)(calloc(n, sizeof(type))) + +#define ALLOC_DATA(context, dseg) ({\ + struct Meta* meta = (struct Meta*)context->heap;\ + meta->type = D_##dseg;\ + meta->size = 1;\ + context->heap += sizeof(struct Meta);\ + context->data[D_##dseg] = context->heap; context->heap += sizeof(struct dseg); (struct dseg *)context->data[D_##dseg]; }) + +#define ALLOCATE(context, t) ({ \ + struct Meta* meta = (struct Meta*)context->heap;\ + context->heap += sizeof(struct Meta);\ + union Data* data = context->heap; \ + context->heap += sizeof(struct t); \ + meta->type = D_##t; \ + meta->size = 1; \ + data; }) + +#define Gearef(context, t) (&(context)->data[D_##t]->t) +#define GearImpl(context, intf, name) (Gearef(context, intf)->name->intf.name) + +#include "c/enumCode.h" + +#include "c/enumData.h" + +struct Context { + enum Code next; + struct Worker* worker; + struct TaskManager* taskManager; + int codeNum; + __code (**code) (struct Context*); + void* heapStart; + void* heap; + long heapLimit; + int dataNum; + int idgCount; //number of waiting dataGear + int odg; + int maxOdg; + int workerId; + union Data **data; +}; + +union Data { + struct Meta { + enum DataType type; + long size; + struct Queue* wait; // tasks waiting this dataGear + } meta; + struct Task { + enum Code code; + struct Queue* dataGears; + int idsCount; + } Task; + // Stack Interface + struct Stack { + union Data* stack; + union Data* data; + union Data* data1; + enum Code whenEmpty; + enum Code clear; + enum Code push; + enum Code pop; + enum Code pop2; + enum Code isEmpty; + enum Code get; + enum Code get2; + enum Code next; + } Stack; + // Stack implementations + struct SingleLinkedStack { + struct Element* top; + } SingleLinkedStack; + struct Element { + union Data* data; + struct Element* next; + } Element; + struct Node { + int key; // comparable data segment + union Data* value; + struct Node* left; + struct Node* right; + // need to balancing + enum Color { + Red, + Black, + } color; + } Node; +}; // union Data end this is necessary for context generator + +\end{lstlisting} + +\begin{lstlisting}[frame=lrbt,label=init_context,caption={\footnotesize 生成された context}] + +#include + +#include "../context.h" + +void initContext(struct Context* context) { + context->heapLimit = sizeof(union Data)*ALLOCATE_SIZE; + context->code = (__code(**) (struct Context*)) NEWN(ALLOCATE_SIZE, void*); + context->data = NEWN(ALLOCATE_SIZE, union Data*); + context->heapStart = NEWN(context->heapLimit, char); + context->heap = context->heapStart; + + context->code[C_clearSingleLinkedStack] = clearSingleLinkedStack_stub; + context->code[C_exit_code] = exit_code_stub; + context->code[C_get2SingleLinkedStack] = get2SingleLinkedStack_stub; + context->code[C_getSingleLinkedStack] = getSingleLinkedStack_stub; + context->code[C_isEmptySingleLinkedStack] = isEmptySingleLinkedStack_stub; + context->code[C_pop2SingleLinkedStack] = pop2SingleLinkedStack_stub; + context->code[C_popSingleLinkedStack] = popSingleLinkedStack_stub; + context->code[C_pushSingleLinkedStack] = pushSingleLinkedStack_stub; + context->code[C_stack_test1] = stack_test1_stub; + context->code[C_stack_test2] = stack_test2_stub; + context->code[C_stack_test3] = stack_test3_stub; + context->code[C_stack_test4] = stack_test4_stub; + context->code[C_start_code] = start_code_stub; + +#include "dataGearInit.c" + +} + +__code meta(struct Context* context, enum Code next) { + // printf("meta %d\n",next); + goto (context->code[next])(context); +} + +__code start_code(struct Context* context) { + goto meta(context, context->next); +} + +__code start_code_stub(struct Context* context) { + goto start_code(context); +} + +__code exit_code(struct Context* context) { + free(context->code); + free(context->data); + free(context->heapStart); + goto exit(0); +} + +__code exit_code_stub(struct Context* context) { + goto exit_code(context); +} + +// end context_c +\end{lstlisting} %enum で Code Gear と Data Gear %Data Gear の typedef %stub の extern diff -r 60756523a9fc -r 6d00f6c9bb8a final_main/main.aux --- a/final_main/main.aux Sun Feb 12 19:03:28 2017 +0900 +++ b/final_main/main.aux Mon Feb 13 16:28:35 2017 +0900 @@ -14,39 +14,49 @@ \@writefile{lol}{\contentsline {lstlisting}{\numberline {2.1}\relax \fontsize {10}{12}\selectfont \abovedisplayskip 10\p@ plus2\p@ minus5\p@ \abovedisplayshortskip \z@ plus3\p@ \belowdisplayshortskip 6\p@ plus3\p@ minus3\p@ \def \leftmargin \leftmargini \parsep 5\p@ plus2.5\p@ minus\p@ \topsep 10\p@ plus4\p@ minus6\p@ \itemsep 5\p@ plus2.5\p@ minus\p@ {\leftmargin \leftmargini \topsep 6\p@ plus2\p@ minus2\p@ \parsep 3\p@ plus2\p@ minus\p@ \itemsep \parsep }\belowdisplayskip \abovedisplayskip code segment の軽量継続}{2}} \@writefile{lof}{\contentsline {figure}{\numberline {2.2}{\ignorespaces code segment の軽量継続}}{3}} \newlabel{fig:code_simple}{{2.2}{3}} +\newlabel{factorial}{{2.2}{3}} +\@writefile{lol}{\contentsline {lstlisting}{\numberline {2.2}\relax \fontsize {10}{12}\selectfont \abovedisplayskip 10\p@ plus2\p@ minus5\p@ \abovedisplayshortskip \z@ plus3\p@ \belowdisplayshortskip 6\p@ plus3\p@ minus3\p@ \def \leftmargin \leftmargini \parsep 5\p@ plus2.5\p@ minus\p@ \topsep 10\p@ plus4\p@ minus6\p@ \itemsep 5\p@ plus2.5\p@ minus\p@ {\leftmargin \leftmargini \topsep 6\p@ plus2\p@ minus2\p@ \parsep 3\p@ plus2\p@ minus\p@ \itemsep \parsep }\belowdisplayskip \abovedisplayskip 階乗を求める CbC プログラムの例}{3}} \@writefile{toc}{\contentsline {section}{\numberline {2.3}環境付き継続}{3}} -\newlabel{gotoWithTheEnv}{{2.2}{3}} -\@writefile{lol}{\contentsline {lstlisting}{\numberline {2.2}環境付き継続}{3}} +\newlabel{gotoWithTheEnv}{{2.3}{4}} +\@writefile{lol}{\contentsline {lstlisting}{\numberline {2.3}環境付き継続}{4}} \@writefile{lof}{\contentsline {figure}{\numberline {2.3}{\ignorespaces 環境付き継続}}{4}} \newlabel{fig:gotoWithTheEnv}{{2.3}{4}} -\@writefile{toc}{\contentsline {chapter}{\numberline {第3章}Gears OS}{5}} +\@writefile{toc}{\contentsline {chapter}{\numberline {第3章}Gears OS}{6}} +\@writefile{lof}{\addvspace {10\p@ }} +\@writefile{lot}{\addvspace {10\p@ }} +\@writefile{toc}{\contentsline {section}{\numberline {3.1}Gears OS}{6}} +\@writefile{toc}{\contentsline {section}{\numberline {3.2}Context}{6}} +\@writefile{toc}{\contentsline {section}{\numberline {3.3}Meta Code Gear}{6}} +\@writefile{lof}{\contentsline {figure}{\numberline {3.1}{\ignorespaces meta computation}}{7}} +\newlabel{fig:metaCS}{{3.1}{7}} +\@writefile{toc}{\contentsline {section}{\numberline {3.4}stub Code Gear}{7}} +\@writefile{toc}{\contentsline {section}{\numberline {3.5}CbC による Gears OS の構文サポート}{7}} +\@writefile{toc}{\contentsline {section}{\numberline {3.6}interface の記述}{7}} +\newlabel{interface}{{3.1}{7}} +\@writefile{lol}{\contentsline {lstlisting}{\numberline {3.1}stack の interface}{7}} +\@writefile{toc}{\contentsline {chapter}{\numberline {第4章}LLVM/clang による CbC の実装}{8}} \@writefile{lof}{\addvspace {10\p@ }} \@writefile{lot}{\addvspace {10\p@ }} -\@writefile{toc}{\contentsline {section}{\numberline {3.1}Gears OS}{5}} -\@writefile{toc}{\contentsline {section}{\numberline {3.2}CbC による Gears OS の構文サポート}{5}} -\@writefile{toc}{\contentsline {section}{\numberline {3.3}Meta Code Gear}{5}} -\@writefile{lof}{\contentsline {figure}{\numberline {3.1}{\ignorespaces meta computation}}{6}} -\newlabel{fig:metaCS}{{3.1}{6}} -\@writefile{toc}{\contentsline {section}{\numberline {3.4}stub Code Gear}{6}} -\@writefile{toc}{\contentsline {section}{\numberline {3.5}interface の記述}{6}} -\newlabel{gotoWithTheEnv}{{3.1}{6}} -\@writefile{lol}{\contentsline {lstlisting}{\numberline {3.1}stack の interface}{6}} -\@writefile{toc}{\contentsline {chapter}{\numberline {第4章}LLVM/clang による CbC の実装}{7}} +\@writefile{toc}{\contentsline {section}{\numberline {4.1}LLVM clang}{8}} +\@writefile{toc}{\contentsline {section}{\numberline {4.2}clang の基本構造}{8}} +\newlabel{sec:clang}{{4.2}{8}} +\@writefile{toc}{\contentsline {section}{\numberline {4.3}LLVM の基本構造}{9}} +\@writefile{lof}{\contentsline {figure}{\numberline {4.1}{\ignorespaces LLVM の 処理過程}}{10}} +\newlabel{fig:llvmProcess}{{4.1}{10}} +\@writefile{toc}{\contentsline {section}{\numberline {4.4}LLVM/clang のデバッグ}{10}} +\newlabel{ir_a}{{4.1}{10}} +\@writefile{lol}{\contentsline {lstlisting}{\numberline {4.1}\relax \fontsize {10}{12}\selectfont \abovedisplayskip 10\p@ plus2\p@ minus5\p@ \abovedisplayshortskip \z@ plus3\p@ \belowdisplayshortskip 6\p@ plus3\p@ minus3\p@ \def \leftmargin \leftmargini \parsep 5\p@ plus2.5\p@ minus\p@ \topsep 10\p@ plus4\p@ minus6\p@ \itemsep 5\p@ plus2.5\p@ minus\p@ {\leftmargin \leftmargini \topsep 6\p@ plus2\p@ minus2\p@ \parsep 3\p@ plus2\p@ minus\p@ \itemsep \parsep }\belowdisplayskip \abovedisplayskip LLVM IR コード 修正前}{10}} +\newlabel{ir_b}{{4.2}{11}} +\@writefile{lol}{\contentsline {lstlisting}{\numberline {4.2}\relax \fontsize {10}{12}\selectfont \abovedisplayskip 10\p@ plus2\p@ minus5\p@ \abovedisplayshortskip \z@ plus3\p@ \belowdisplayshortskip 6\p@ plus3\p@ minus3\p@ \def \leftmargin \leftmargini \parsep 5\p@ plus2.5\p@ minus\p@ \topsep 10\p@ plus4\p@ minus6\p@ \itemsep 5\p@ plus2.5\p@ minus\p@ {\leftmargin \leftmargini \topsep 6\p@ plus2\p@ minus2\p@ \parsep 3\p@ plus2\p@ minus\p@ \itemsep \parsep }\belowdisplayskip \abovedisplayskip LLVM IR コード 修正後}{11}} +\@writefile{toc}{\contentsline {chapter}{\numberline {第5章}Context、stub の自動生成}{12}} \@writefile{lof}{\addvspace {10\p@ }} \@writefile{lot}{\addvspace {10\p@ }} -\@writefile{toc}{\contentsline {section}{\numberline {4.1}LLVM clang}{7}} -\@writefile{toc}{\contentsline {section}{\numberline {4.2}LLVM の基本構造}{7}} -\@writefile{lof}{\contentsline {figure}{\numberline {4.1}{\ignorespaces LLVM の 処理過程}}{8}} -\newlabel{fig:llvmProcess}{{4.1}{8}} -\@writefile{toc}{\contentsline {section}{\numberline {4.3}LLVM/clang のデバッグ}{8}} -\newlabel{ir_a}{{4.1}{8}} -\@writefile{lol}{\contentsline {lstlisting}{\numberline {4.1}\relax \fontsize {10}{12}\selectfont \abovedisplayskip 10\p@ plus2\p@ minus5\p@ \abovedisplayshortskip \z@ plus3\p@ \belowdisplayshortskip 6\p@ plus3\p@ minus3\p@ \def \leftmargin \leftmargini \parsep 5\p@ plus2.5\p@ minus\p@ \topsep 10\p@ plus4\p@ minus6\p@ \itemsep 5\p@ plus2.5\p@ minus\p@ {\leftmargin \leftmargini \topsep 6\p@ plus2\p@ minus2\p@ \parsep 3\p@ plus2\p@ minus\p@ \itemsep \parsep }\belowdisplayskip \abovedisplayskip LLVM IR コード 修正前}{8}} -\newlabel{ir_b}{{4.2}{9}} -\@writefile{lol}{\contentsline {lstlisting}{\numberline {4.2}\relax \fontsize {10}{12}\selectfont \abovedisplayskip 10\p@ plus2\p@ minus5\p@ \abovedisplayshortskip \z@ plus3\p@ \belowdisplayshortskip 6\p@ plus3\p@ minus3\p@ \def \leftmargin \leftmargini \parsep 5\p@ plus2.5\p@ minus\p@ \topsep 10\p@ plus4\p@ minus6\p@ \itemsep 5\p@ plus2.5\p@ minus\p@ {\leftmargin \leftmargini \topsep 6\p@ plus2\p@ minus2\p@ \parsep 3\p@ plus2\p@ minus\p@ \itemsep \parsep }\belowdisplayskip \abovedisplayskip LLVM IR コード 修正後}{9}} -\@writefile{toc}{\contentsline {chapter}{\numberline {第5章}Context、stub の自動生成}{10}} +\@writefile{toc}{\contentsline {section}{\numberline {5.1}stub の生成}{12}} +\@writefile{toc}{\contentsline {section}{\numberline {5.2}Context の生成}{12}} +\newlabel{context}{{5.1}{12}} +\@writefile{lol}{\contentsline {lstlisting}{\numberline {5.1}\relax \fontsize {10}{12}\selectfont \abovedisplayskip 10\p@ plus2\p@ minus5\p@ \abovedisplayshortskip \z@ plus3\p@ \belowdisplayshortskip 6\p@ plus3\p@ minus3\p@ \def \leftmargin \leftmargini \parsep 5\p@ plus2.5\p@ minus\p@ \topsep 10\p@ plus4\p@ minus6\p@ \itemsep 5\p@ plus2.5\p@ minus\p@ {\leftmargin \leftmargini \topsep 6\p@ plus2\p@ minus2\p@ \parsep 3\p@ plus2\p@ minus\p@ \itemsep \parsep }\belowdisplayskip \abovedisplayskip context の定義}{12}} +\newlabel{init_context}{{5.2}{14}} +\@writefile{lol}{\contentsline {lstlisting}{\numberline {5.2}\relax \fontsize {10}{12}\selectfont \abovedisplayskip 10\p@ plus2\p@ minus5\p@ \abovedisplayshortskip \z@ plus3\p@ \belowdisplayshortskip 6\p@ plus3\p@ minus3\p@ \def \leftmargin \leftmargini \parsep 5\p@ plus2.5\p@ minus\p@ \topsep 10\p@ plus4\p@ minus6\p@ \itemsep 5\p@ plus2.5\p@ minus\p@ {\leftmargin \leftmargini \topsep 6\p@ plus2\p@ minus2\p@ \parsep 3\p@ plus2\p@ minus\p@ \itemsep \parsep }\belowdisplayskip \abovedisplayskip 生成された context}{14}} +\@writefile{toc}{\contentsline {chapter}{\numberline {第6章}今後の課題}{16}} \@writefile{lof}{\addvspace {10\p@ }} \@writefile{lot}{\addvspace {10\p@ }} -\@writefile{toc}{\contentsline {section}{\numberline {5.1}Context の生成}{10}} -\@writefile{toc}{\contentsline {chapter}{\numberline {第6章}今後の課題}{11}} -\@writefile{lof}{\addvspace {10\p@ }} -\@writefile{lot}{\addvspace {10\p@ }} diff -r 60756523a9fc -r 6d00f6c9bb8a final_main/main.dvi Binary file final_main/main.dvi has changed diff -r 60756523a9fc -r 6d00f6c9bb8a final_main/main.lof --- a/final_main/main.lof Sun Feb 12 19:03:28 2017 +0900 +++ b/final_main/main.lof Mon Feb 13 16:28:35 2017 +0900 @@ -4,8 +4,8 @@ \contentsline {figure}{\numberline {2.2}{\ignorespaces code segment の軽量継続}}{3} \contentsline {figure}{\numberline {2.3}{\ignorespaces 環境付き継続}}{4} \addvspace {10\p@ } -\contentsline {figure}{\numberline {3.1}{\ignorespaces meta computation}}{6} +\contentsline {figure}{\numberline {3.1}{\ignorespaces meta computation}}{7} \addvspace {10\p@ } -\contentsline {figure}{\numberline {4.1}{\ignorespaces LLVM の 処理過程}}{8} +\contentsline {figure}{\numberline {4.1}{\ignorespaces LLVM の 処理過程}}{10} \addvspace {10\p@ } \addvspace {10\p@ } diff -r 60756523a9fc -r 6d00f6c9bb8a final_main/main.log --- a/final_main/main.log Sun Feb 12 19:03:28 2017 +0900 +++ b/final_main/main.log Mon Feb 13 16:28:35 2017 +0900 @@ -1,4 +1,4 @@ -This is e-pTeX, Version 3.14159265-p3.7-160201-2.6 (utf8.euc) (TeX Live 2016) (preloaded format=platex 2017.2.4) 12 FEB 2017 19:01 +This is e-pTeX, Version 3.14159265-p3.7-160201-2.6 (utf8.euc) (TeX Live 2016) (preloaded format=platex 2017.2.4) 13 FEB 2017 16:27 entering extended mode restricted \write18 enabled. %&-line parsing enabled. @@ -103,11 +103,7 @@ ) (/usr/local/texlive/2016/texmf-dist/tex/latex/listings/lstmisc.sty File: lstmisc.sty 2015/06/04 1.6 (Carsten Heinz) -) (./main.aux - -LaTeX Warning: Label `gotoWithTheEnv' multiply defined. - -) +) (./main.aux) \openout1 = `main.aux'. LaTeX Font Info: Checking defaults for OML/cmm/m/it on input line 46. @@ -178,72 +174,69 @@ File: fig/codesegment.pdf Graphic file (type pdf) LaTeX Font Info: Font shape `JT1/mc/bx/n' in size <10> not available -(Font) Font shape `JT1/gt/m/n' tried instead on input line 24. +(Font) Font shape `JT1/gt/m/n' tried instead on input line 27. LaTeX Font Info: Font shape `JY1/mc/bx/n' in size <10> not available -(Font) Font shape `JY1/gt/m/n' tried instead on input line 24. +(Font) Font shape `JY1/gt/m/n' tried instead on input line 27. LaTeX Font Info: Font shape `OT1/cmtt/bx/n' in size <10> not available -(Font) Font shape `OT1/cmtt/m/n' tried instead on input line 24. +(Font) Font shape `OT1/cmtt/m/n' tried instead on input line 27. [2 ] File: fig/codesegment2.pdf Graphic file (type pdf) - + [3] LaTeX Font Warning: Font shape `JT1/mc/m/it' undefined -(Font) using `JT1/mc/m/n' instead on input line 58. +(Font) using `JT1/mc/m/n' instead on input line 97. LaTeX Font Warning: Font shape `JY1/mc/m/it' undefined -(Font) using `JY1/mc/m/n' instead on input line 58. +(Font) using `JY1/mc/m/n' instead on input line 97. File: fig/gotowithenv.pdf Graphic file (type pdf) -) (./chapter3.tex [3] [4] +) (./chapter3.tex [4] [5] 第 3 章 File: fig/metaCS.pdf Graphic file (type pdf) - [5 + [6 -]) (./chapter4.tex [6] +]) (./chapter4.tex [7] 第 4 章 -[7 +[8 ] File: fig/llvmProcess.pdf Graphic file (type pdf) -Overfull \hbox (19.03606pt too wide) in paragraph at lines 38--39 +Overfull \hbox (19.03606pt too wide) in paragraph at lines 61--62 [] [] -[8]) (./chapter5.tex [9] +[9] [10]) (./chapter5.tex [11] 第 5 章 -) (./chapter6.tex [10 +[12 -] +] [13] [14]) (./chapter6.tex [15] 第 6 章 -) (./bibliography.tex [11 +) (./bibliography.tex [16 ] LaTeX Warning: Empty `thebibliography' environment on input line 11. -) (./thanks.tex [12 +) (./thanks.tex [17 -]) [13 +]) [18 ] (./main.aux) LaTeX Font Warning: Some font shapes were not available, defaults substituted. - -LaTeX Warning: There were multiply-defined labels. - ) Here is how much of TeX's memory you used: - 2348 strings out of 493683 - 32278 string characters out of 6149654 - 377243 words of memory out of 5000000 - 5892 multiletter control sequences out of 15000+600000 + 2533 strings out of 493683 + 34753 string characters out of 6149654 + 298243 words of memory out of 5000000 + 6077 multiletter control sequences out of 15000+600000 14691 words of font info for 58 fonts, out of 8000000 for 9000 929 hyphenation exceptions out of 8191 - 26i,5n,49p,556b,1689s stack positions out of 5000i,500n,10000p,200000b,80000s + 26i,5n,49p,564b,1689s stack positions out of 5000i,500n,10000p,200000b,80000s -Output written on main.dvi (17 pages, 44080 bytes). +Output written on main.dvi (22 pages, 72576 bytes). diff -r 60756523a9fc -r 6d00f6c9bb8a final_main/main.lol --- a/final_main/main.lol Sun Feb 12 19:03:28 2017 +0900 +++ b/final_main/main.lol Mon Feb 13 16:28:35 2017 +0900 @@ -1,5 +1,8 @@ \contentsline {lstlisting}{\numberline {2.1}\relax \fontsize {10}{12}\selectfont \abovedisplayskip 10\p@ plus2\p@ minus5\p@ \abovedisplayshortskip \z@ plus3\p@ \belowdisplayshortskip 6\p@ plus3\p@ minus3\p@ \def \leftmargin \leftmargini \parsep 5\p@ plus2.5\p@ minus\p@ \topsep 10\p@ plus4\p@ minus6\p@ \itemsep 5\p@ plus2.5\p@ minus\p@ {\leftmargin \leftmargini \topsep 6\p@ plus2\p@ minus2\p@ \parsep 3\p@ plus2\p@ minus\p@ \itemsep \parsep }\belowdisplayskip \abovedisplayskip code segment の軽量継続}{2} -\contentsline {lstlisting}{\numberline {2.2}環境付き継続}{3} -\contentsline {lstlisting}{\numberline {3.1}stack の interface}{6} -\contentsline {lstlisting}{\numberline {4.1}\relax \fontsize {10}{12}\selectfont \abovedisplayskip 10\p@ plus2\p@ minus5\p@ \abovedisplayshortskip \z@ plus3\p@ \belowdisplayshortskip 6\p@ plus3\p@ minus3\p@ \def \leftmargin \leftmargini \parsep 5\p@ plus2.5\p@ minus\p@ \topsep 10\p@ plus4\p@ minus6\p@ \itemsep 5\p@ plus2.5\p@ minus\p@ {\leftmargin \leftmargini \topsep 6\p@ plus2\p@ minus2\p@ \parsep 3\p@ plus2\p@ minus\p@ \itemsep \parsep }\belowdisplayskip \abovedisplayskip LLVM IR コード 修正前}{8} -\contentsline {lstlisting}{\numberline {4.2}\relax \fontsize {10}{12}\selectfont \abovedisplayskip 10\p@ plus2\p@ minus5\p@ \abovedisplayshortskip \z@ plus3\p@ \belowdisplayshortskip 6\p@ plus3\p@ minus3\p@ \def \leftmargin \leftmargini \parsep 5\p@ plus2.5\p@ minus\p@ \topsep 10\p@ plus4\p@ minus6\p@ \itemsep 5\p@ plus2.5\p@ minus\p@ {\leftmargin \leftmargini \topsep 6\p@ plus2\p@ minus2\p@ \parsep 3\p@ plus2\p@ minus\p@ \itemsep \parsep }\belowdisplayskip \abovedisplayskip LLVM IR コード 修正後}{9} +\contentsline {lstlisting}{\numberline {2.2}\relax \fontsize {10}{12}\selectfont \abovedisplayskip 10\p@ plus2\p@ minus5\p@ \abovedisplayshortskip \z@ plus3\p@ \belowdisplayshortskip 6\p@ plus3\p@ minus3\p@ \def \leftmargin \leftmargini \parsep 5\p@ plus2.5\p@ minus\p@ \topsep 10\p@ plus4\p@ minus6\p@ \itemsep 5\p@ plus2.5\p@ minus\p@ {\leftmargin \leftmargini \topsep 6\p@ plus2\p@ minus2\p@ \parsep 3\p@ plus2\p@ minus\p@ \itemsep \parsep }\belowdisplayskip \abovedisplayskip 階乗を求める CbC プログラムの例}{3} +\contentsline {lstlisting}{\numberline {2.3}環境付き継続}{4} +\contentsline {lstlisting}{\numberline {3.1}stack の interface}{7} +\contentsline {lstlisting}{\numberline {4.1}\relax \fontsize {10}{12}\selectfont \abovedisplayskip 10\p@ plus2\p@ minus5\p@ \abovedisplayshortskip \z@ plus3\p@ \belowdisplayshortskip 6\p@ plus3\p@ minus3\p@ \def \leftmargin \leftmargini \parsep 5\p@ plus2.5\p@ minus\p@ \topsep 10\p@ plus4\p@ minus6\p@ \itemsep 5\p@ plus2.5\p@ minus\p@ {\leftmargin \leftmargini \topsep 6\p@ plus2\p@ minus2\p@ \parsep 3\p@ plus2\p@ minus\p@ \itemsep \parsep }\belowdisplayskip \abovedisplayskip LLVM IR コード 修正前}{10} +\contentsline {lstlisting}{\numberline {4.2}\relax \fontsize {10}{12}\selectfont \abovedisplayskip 10\p@ plus2\p@ minus5\p@ \abovedisplayshortskip \z@ plus3\p@ \belowdisplayshortskip 6\p@ plus3\p@ minus3\p@ \def \leftmargin \leftmargini \parsep 5\p@ plus2.5\p@ minus\p@ \topsep 10\p@ plus4\p@ minus6\p@ \itemsep 5\p@ plus2.5\p@ minus\p@ {\leftmargin \leftmargini \topsep 6\p@ plus2\p@ minus2\p@ \parsep 3\p@ plus2\p@ minus\p@ \itemsep \parsep }\belowdisplayskip \abovedisplayskip LLVM IR コード 修正後}{11} +\contentsline {lstlisting}{\numberline {5.1}\relax \fontsize {10}{12}\selectfont \abovedisplayskip 10\p@ plus2\p@ minus5\p@ \abovedisplayshortskip \z@ plus3\p@ \belowdisplayshortskip 6\p@ plus3\p@ minus3\p@ \def \leftmargin \leftmargini \parsep 5\p@ plus2.5\p@ minus\p@ \topsep 10\p@ plus4\p@ minus6\p@ \itemsep 5\p@ plus2.5\p@ minus\p@ {\leftmargin \leftmargini \topsep 6\p@ plus2\p@ minus2\p@ \parsep 3\p@ plus2\p@ minus\p@ \itemsep \parsep }\belowdisplayskip \abovedisplayskip context の定義}{12} +\contentsline {lstlisting}{\numberline {5.2}\relax \fontsize {10}{12}\selectfont \abovedisplayskip 10\p@ plus2\p@ minus5\p@ \abovedisplayshortskip \z@ plus3\p@ \belowdisplayshortskip 6\p@ plus3\p@ minus3\p@ \def \leftmargin \leftmargini \parsep 5\p@ plus2.5\p@ minus\p@ \topsep 10\p@ plus4\p@ minus6\p@ \itemsep 5\p@ plus2.5\p@ minus\p@ {\leftmargin \leftmargini \topsep 6\p@ plus2\p@ minus2\p@ \parsep 3\p@ plus2\p@ minus\p@ \itemsep \parsep }\belowdisplayskip \abovedisplayskip 生成された context}{14} diff -r 60756523a9fc -r 6d00f6c9bb8a final_main/main.pdf Binary file final_main/main.pdf has changed diff -r 60756523a9fc -r 6d00f6c9bb8a final_main/main.toc --- a/final_main/main.toc Sun Feb 12 19:03:28 2017 +0900 +++ b/final_main/main.toc Mon Feb 13 16:28:35 2017 +0900 @@ -3,16 +3,19 @@ \contentsline {section}{\numberline {2.1}Continuation based C (CbC)}{2} \contentsline {section}{\numberline {2.2}Code Gear}{2} \contentsline {section}{\numberline {2.3}環境付き継続}{3} -\contentsline {chapter}{\numberline {第3章}Gears OS}{5} -\contentsline {section}{\numberline {3.1}Gears OS}{5} -\contentsline {section}{\numberline {3.2}CbC による Gears OS の構文サポート}{5} -\contentsline {section}{\numberline {3.3}Meta Code Gear}{5} -\contentsline {section}{\numberline {3.4}stub Code Gear}{6} -\contentsline {section}{\numberline {3.5}interface の記述}{6} -\contentsline {chapter}{\numberline {第4章}LLVM/clang による CbC の実装}{7} -\contentsline {section}{\numberline {4.1}LLVM clang}{7} -\contentsline {section}{\numberline {4.2}LLVM の基本構造}{7} -\contentsline {section}{\numberline {4.3}LLVM/clang のデバッグ}{8} -\contentsline {chapter}{\numberline {第5章}Context、stub の自動生成}{10} -\contentsline {section}{\numberline {5.1}Context の生成}{10} -\contentsline {chapter}{\numberline {第6章}今後の課題}{11} +\contentsline {chapter}{\numberline {第3章}Gears OS}{6} +\contentsline {section}{\numberline {3.1}Gears OS}{6} +\contentsline {section}{\numberline {3.2}Context}{6} +\contentsline {section}{\numberline {3.3}Meta Code Gear}{6} +\contentsline {section}{\numberline {3.4}stub Code Gear}{7} +\contentsline {section}{\numberline {3.5}CbC による Gears OS の構文サポート}{7} +\contentsline {section}{\numberline {3.6}interface の記述}{7} +\contentsline {chapter}{\numberline {第4章}LLVM/clang による CbC の実装}{8} +\contentsline {section}{\numberline {4.1}LLVM clang}{8} +\contentsline {section}{\numberline {4.2}clang の基本構造}{8} +\contentsline {section}{\numberline {4.3}LLVM の基本構造}{9} +\contentsline {section}{\numberline {4.4}LLVM/clang のデバッグ}{10} +\contentsline {chapter}{\numberline {第5章}Context、stub の自動生成}{12} +\contentsline {section}{\numberline {5.1}stub の生成}{12} +\contentsline {section}{\numberline {5.2}Context の生成}{12} +\contentsline {chapter}{\numberline {第6章}今後の課題}{16}