Mercurial > hg > Papers > 2019 > anatofuz-thesis
changeset 75:29bb4dca94ea
aff fact.c
author | anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Mon, 18 Feb 2019 18:09:00 +0900 |
parents | e6e2f606c68d |
children | 582b97946af6 |
files | paper/chapter2.tex paper/chapter5.tex paper/codes/fact.c paper/main.pdf |
diffstat | 4 files changed, 33 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- 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との互換性}
--- 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{欠点}
--- /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 <stdio.h> +#include <stdlib.h> + +__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]); +}