diff Paper/tex/cbc.tex @ 15:f0d512637e52

Add ref
author soto <soto@cr.ie.u-ryukyu.ac.jp>
date Wed, 01 Feb 2023 22:16:45 +0900
parents c28e8156a37b
children 40a9af45b375
line wrap: on
line diff
--- a/Paper/tex/cbc.tex	Wed Feb 01 20:27:04 2023 +0900
+++ b/Paper/tex/cbc.tex	Wed Feb 01 22:16:45 2023 +0900
@@ -13,53 +13,53 @@
 したがって,Code Gear に Deta Gear を与え,それをもとに処理を行い,
 出力として Data Gear を返し,また次の Code Gearに遷移していく流れとなる.
 
-本章ではCbCの概要について説明する。
+本章ではCbCの概要について説明する.
 
 \section{Code Gear / Data Gear}
-CbCでは、検証しやすいプログラムの単位として DataGear と CodeGear という単位を用いる。
+CbCでは,検証しやすいプログラムの単位として DataGear と CodeGear という単位を用いる.
 
-CodeGear はプログラムの処理そのものであり、一般的なプログラム言語における関数と同じ役割である。
-DataGear は CodeGear で扱うデータの単位であり、処理に必要なデータである。
-CodeGear の入力となる DataGear を Input DataGear と呼び、出力は Output DataGear と呼ぶ。
+CodeGear はプログラムの処理そのものであり,一般的なプログラム言語における関数と同じ役割である.
+DataGear は CodeGear で扱うデータの単位であり,処理に必要なデータである.
+CodeGear の入力となる DataGear を Input DataGear と呼び,出力は Output DataGear と呼ぶ.
 
-CodeGear 間の移動は継続を用いて行われる。
-継続は関数呼び出しとは異なり、呼び出した後に元のコードに戻れず、次の CodeGear へ継続を行う。
-これは、関数型プログラミングでは末尾再帰をしていることと同義である。
+CodeGear 間の移動は継続を用いて行われる.
+継続は関数呼び出しとは異なり,呼び出した後に元のコードに戻れず,次の CodeGear へ継続を行う.
+これは,関数型プログラミングでは末尾再帰をしていることと同義である.
 
 
 \section{CbC と C言語の違い}
-同じ仕様でCbCとC言語で実装した際の違いを、実際のコードを元に比較する。
-比較するにあたり、再起処理が含まれるコードの例として、
-フィボナッチ数列の n 番目を求めるコードを挙げる。
-C言語で記述したものが\coderef{fib_c}。CbCで記述したものが\coderef{fib_cbc}になる。
-CbCは実行を継続するため、 return を行えない。そのためC言語での実装も return を書
-かず関数呼び出しを行い、最後にexitをして実行終了するように記述している。
+同じ仕様でCbCとC言語で実装した際の違いを,実際のコードを元に比較する.
+比較するにあたり,再起処理が含まれるコードの例として,
+フィボナッチ数列の n 番目を求めるコードを挙げる.
+C言語で記述したものが\coderef{fib_c}.CbCで記述したものが\coderef{fib_cbc}になる.
+CbCは実行を継続するため, return を行えない.そのためC言語での実装も return を書
+かず関数呼び出しを行い,最後にexitをして実行終了するように記述している.
 
 \lstinputlisting[label=code:fib_c, caption=C言語で記述した フィボナッチ数列の n 番目
 を求めるコード, firstline=5] {src/cbc/fib.c}
 \lstinputlisting[label=code:fib_cbc, caption=CbCで記述した フィボナッチ数列の n 番目
 を求めるコード, firstline=5] {src/cbc/fib.cbc}
 
-軽量実装になっているのか、上記のコードをアセンブラ変換した結果を見て確認する。
-全てを記載すると長くなるので、アセンブラ変換した際のfib関数のみを記載する。
-C言語で記述した\coderef{fib_c}をアセンブラ変換した結果が\coderef{c-ass}。
-CbCで記述した\coderef{fib_cbc}をアセンブラ変換した結果が\coderef{cbc-ass}になる。
+軽量実装になっているのか,上記のコードをアセンブラ変換した結果を見て確認する.
+全てを記載すると長くなるので,アセンブラ変換した際のfib関数のみを記載する.
+C言語で記述した\coderef{fib_c}をアセンブラ変換した結果が\coderef{c-ass}.
+CbCで記述した\coderef{fib_cbc}をアセンブラ変換した結果が\coderef{cbc-ass}になる.
 
-比較すると、fib 関数の内部で再度 fib 関数を呼び出す際、
-C言語で実装した\coderef{c-ass}の30行目では callq で fib 関数を呼び出している。
-対して CbC で実装した\coderef{cbc-ass}の32行目では、 jmp により fib 関数に移動
-している。
+比較すると,fib 関数の内部で再度 fib 関数を呼び出す際,
+C言語で実装した\coderef{c-ass}の30行目では callq で fib 関数を呼び出している.
+対して CbC で実装した\coderef{cbc-ass}の32行目では, jmp により fib 関数に移動
+している.
 
 \lstinputlisting[label=code:c-ass, caption=cで記述した際の fib 関数のアセンブラ] {src/cbc/c.txt}
 \lstinputlisting[label=code:cbc-ass, caption=cbcで記述した際の fib 関数のアセンブラ] {src/cbc/cbc.txt}
 
-以上のことから CbCが軽量継続を行っていると言える。
+以上のことから CbCが軽量継続を行っていると言える.
 
 
 \section{Meta Code Gear / Meta Data Gear}
-Meta DataGear は CbC 上のメタ計算で扱われる DataGear である。例えば stub
-CodeGear では Context と呼ばれる接続可能な CodeGear、DataGear のリストや、DataGear
-のメモリ空間等を持った Meta DataGear を扱っている。
+Meta DataGear は CbC 上のメタ計算で扱われる DataGear である.例えば stub
+CodeGear では Context と呼ばれる接続可能な CodeGear,DataGear のリストや,DataGear
+のメモリ空間等を持った Meta DataGear を扱っている.
 
 また,プログラムを記述する際は,ノーマルレベルの計算の他に,メモリ管理,スレッド管理,資源管理等を記述しなければならない処理が存在する.
 これらの計算はノーマルレベルの計算と区別してメタ計算と呼ぶ.