# HG changeset patch # User anatofuz # Date 1550480940 -32400 # Node ID 29bb4dca94ea99195da9381f070e72d921a2def5 # Parent e6e2f606c68d1146c767d00ff58d01843e22d4a0 aff fact.c diff -r e6e2f606c68d -r 29bb4dca94ea paper/chapter2.tex --- a/paper/chapter2.tex Mon Feb 18 17:24:39 2019 +0900 +++ b/paper/chapter2.tex Mon Feb 18 18:09:00 2019 +0900 @@ -67,8 +67,9 @@ その為、 CodeGearの再帰呼び出しを利用しても、 スタックオーバーフローを発生させることがない。 この処理を末尾呼び出し除去(tail call elimination)と呼び、 CbCコンパイラは、 各CodeGearの遷移を末尾再帰に変換する。 -実際にある数の階乗を計算するCプログラムと、 このプログラムをCbCで書き直した場合のソースコードを示す。 +実際にある数の階乗を計算するプログラムをCbC書いた場合のコードをソースコード\ref{cbc_fact}に示す。 +\lstinputlisting[frame=lrbt, label=cbc_fact, caption=階乗を求めるCbCのサンプルコード]{./codes/fact.c} \section{Cとの互換性} diff -r e6e2f606c68d -r 29bb4dca94ea paper/chapter5.tex --- a/paper/chapter5.tex Mon Feb 18 17:24:39 2019 +0900 +++ b/paper/chapter5.tex Mon Feb 18 18:09:00 2019 +0900 @@ -72,7 +72,9 @@ これはループ文を利用する際に実行される処理が、 CPUのキャッシュに収まったために高速化したと考えられる。 この事から、CbCMoarVMでは、 CPUキャッシュに命令を乗せる事が可能であれば、 現在の状況でもMoarVMよりパフォーマンスが向上する利点がある。 -\section{Threaded Code} +%\section{Threaded Code} +% +%命令コードをCodeGearに変換したが、 CodeGearはCodeGear自身を入力として受け取る事が \section{欠点} diff -r e6e2f606c68d -r 29bb4dca94ea paper/codes/fact.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/paper/codes/fact.c Mon Feb 18 18:09:00 2019 +0900 @@ -0,0 +1,28 @@ +#include +#include + +__code initialize(char* input){ + int start_number = atoi(input); + goto fact(start_number,1); +} + +__code fact(int cur,int result){ + if ( cur > 0 ){ + result *= cur; + cur--; + goto fact(cur,result); + } + goto print_fact(result); +} + +__code print_fact(int result){ + printf("result = %d\n",result); +} + +int main(int argc, char** argv){ + if ( argc == 1){ + printf("require arg\n"); + exit(1); + } + goto initialize(argv[1]); +} diff -r e6e2f606c68d -r 29bb4dca94ea paper/main.pdf Binary file paper/main.pdf has changed