Mercurial > hg > Papers > 2019 > anatofuz-thesis
changeset 32:f496aa679126
update
author | anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Tue, 12 Feb 2019 18:37:15 +0900 |
parents | 883ce7c5921e |
children | 3b4eeb606909 |
files | paper/chapter2.tex paper/chapter3.tex paper/main.pdf paper/main.tex |
diffstat | 4 files changed, 21 insertions(+), 5 deletions(-) [+] |
line wrap: on
line diff
--- a/paper/chapter2.tex Tue Feb 12 17:22:55 2019 +0900 +++ b/paper/chapter2.tex Tue Feb 12 18:37:15 2019 +0900 @@ -33,10 +33,11 @@ CodeGear間の入出力の受け渡しは引数を利用して行う。 + これは軽量継続時に、 CodeGearの入出力のインターフェイスを揃えることで、 引数で与えられたレジスタを変更せずに繊維する事が可能であるためである。 -実際にCbCで書いたコード例をCode\ref{cbc_example_test}に示す。 +実際にCbCで書いたコード例をソースコード\ref{cbc_example_test}に示す。 \lstinputlisting[frame=lrbt, label=cbc_example_test, caption=加算と文字列を設定するCbCコードの例]{./codes/cbc_example_test.cbc} @@ -46,4 +47,19 @@ cg1からcg2、 またcg2からcg3へは、 CodeGear間での移動となるためjmp命令での軽量継続で処理される。 この例では最終的に test.number には1が、 test.stringにはHelloが設定される。 +CbCでは関数呼び出しの他に、 for文やwhile文などのループ制御を廃している。 +CbCでループ相当の物を記述する際は、 再帰呼び出しを利用する。 +実際にある数の階乗を計算するCプログラムと、 このプログラムをCbCで書き直した場合のソースコードを示す。 +\section{Cとの互換性} + +CbCコンパイラはコンパイル対象のソースコードが、 CbCであるかC言語であるかを判断する。 +この際にCodeGearを利用していない場合は、 通常のCプログラムとしてコンパイルを行う。 +本研究で検証するMoarVMのビルドにおいても、 CbCで書き換えたソースコードがあるMoarVMと、 手を加えていないオリジナルのC言語で実装されたMoarVMを同一のCbCコンパイラでビルドする事が可能である。 + +また、C言語の関数からCodeGearへ繊維することはgoto文で可能である。 +CodeGear中でCの関数を呼び出し、 その結果を受取り、 次のCodeGearに遷移する事も通常のCのプログラミング同様可能である。 + +しかしCodeGearからCの関数に再び戻り、 CodeGear同士の遷移から外れるように実装したい場合がある。 +この際は環境付きgotoと呼ばれる手法を取る。 +これは\_CbC\_return及び、 \_CbC\_environmentという変数を使用する。
--- a/paper/chapter3.tex Tue Feb 12 17:22:55 2019 +0900 +++ b/paper/chapter3.tex Tue Feb 12 18:37:15 2019 +0900 @@ -16,7 +16,7 @@ RakudoとはNQPによって記述され、 MoarVM、 JVM、 Javascript上で動作するPerl6の実装である。 Rakudo自体はNQPで実装されている箇所と、 Perl6で実装されている箇所が混在する。 これらは拡張子によって区別され、 NQPは.nqp、 Perl6は .pm6が拡張として設定されている。 -実際にNQPで実装されている箇所の一部をCode\ref{nqp_on_rakud}に示す。 +実際にNQPで実装されている箇所の一部をソースコード\ref{nqp_on_rakud}に示す。 \lstinputlisting[frame=lrbt, label=nqp_on_rakud, caption=Rakudoの実装の一部]{./codes/src_main.nqp} Rakudoをソースコードからビルドする際は予めNQPインタプリタであるnqpをビルドする必要が存在する。 @@ -42,14 +42,14 @@ 基本文法などはPerl6に準拠しているが、 変数を束縛で宣言する。インクリメント演算子が一部利用できない。 Perl6に存在する関数などが一部利用できないなどの制約が存在する。 -NQPのコード例をCode\ref{fib_nqp}に示す。 +NQPのコード例をソースコード\ref{fib_nqp}に示す。 \lstinputlisting[frame=lrbt, label=fib_nqp, caption=フィボナッチ数列を求めるNQPのソースコード]{./codes/fib.nqp} Perl6はNQPで実装されている為、 Perl6におけるVMはNQPの実行を目標として開発されている。 NQP自体もNQPで実装されており、 NQPのビルドには予め用意されたMoarVMなどのVMバイトコードによるNQPインタプリタが必要となる。 -実際にNQP内部で入力として与えられたNQPから加算命令を生成する部分をCode\ref{nqp_code_add_ops}に示す。 +実際にNQP内部で入力として与えられたNQPから加算命令を生成する部分をソースコード\ref{nqp_code_add_ops}に示す。 \lstinputlisting[frame=lrbt, label=nqp_code_add_ops, caption=NQPが加算命令を生成する箇所]{./codes/nqp_ops.nqp}
--- a/paper/main.tex Tue Feb 12 17:22:55 2019 +0900 +++ b/paper/main.tex Tue Feb 12 18:37:15 2019 +0900 @@ -45,7 +45,7 @@ %% Figure 環境中で Table 環境の見出しを表示・カウンタの操作に必要 %% \makeatletter -\renewcommand{\lstlistingname}{Code} +\renewcommand{\lstlistingname}{ソースコード} \renewcommand{\lstlistlistingname}{コード目次} \usepackage{caption} \usepackage{url}