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]);
+}
Binary file paper/main.pdf has changed