changeset 3:8f6bed4860a9

wrote detail CbC and Perl6
author Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
date Tue, 30 Oct 2018 18:08:55 +0900
parents c8bce80ed637
children 0cfdbf1cec79
files mid_thesis.tex
diffstat 1 files changed, 24 insertions(+), 7 deletions(-) [+]
line wrap: on
line diff
--- a/mid_thesis.tex	Wed Oct 24 18:59:48 2018 +0900
+++ b/mid_thesis.tex	Tue Oct 30 18:08:55 2018 +0900
@@ -40,10 +40,18 @@
 その為CbCを用いてMoarVMの一部を書き直し高速化かつわかりやすい処理系を実装を検討する.
 
 \section{CbC}
-%  Gears OS の実装には LLVM/Clang 上に実装した CbC(Continuation based C)を用いる。\\
-%CbC は Code Segment を基本的な処理単位とする。C の関数とは異なり返り値を持たないが、Code Segment の宣言は C の関数の構文と同じように行い、型に \_\_code を用いる。\\
-%  CbC は for 文や while 文といったループ制御構文を持たないので、ループ処理は自分自身への再帰的な継続を行う事で実現する。\\
-%   現在の Code Segment から次の Code Segment への移動は goto の後に Code Segment 名と引数を並べて記述する。この goto による処理の遷移を継続と呼ぶ。C と異なり、戻り値を持たない Code Segment ではスタックに値を積んで行く必要が無くスタックは変更されない。このようなスタックに値を積まない継続を軽量継続と呼ぶ。この軽量継続により、並列化、ループ制御、関数コールとスタックの操作を意識した最適化がソースコードレベルで行えるようになる。
+Perl6処理系の改良にはLLVM/Clang上に実装したContinuation based C(CbC)を用いる.
+CbCはCからコンパイルする事が可能である為Cのリソースを利用したCとは異なる言語である.
+CbCはCodeSegmentを基本的な処理単位とし,CodeSegmentの遷移でプログラムを記述する.
+CodeSegmentの宣言は\_\_codeという型を持つ関数として宣言する.
+ただしこの関数は\_\_codeという型を返すわけではなく,CodeSegmentである事を示す指示子のような役割である.
+CodeSegmentはCの関数とは異なり返り値を持たず,呼び差し元の関数に戻る代わりに別のCodeSegmentへ遷移する.
+返り値を使わず,別の関数呼び出しを実行するプログラミングスタイルを継続と呼ぶが,C言語における継続とは異なり
+CbCにおけるCodeSegment間の継続はスタックに値を積まず,スタックの変更を行わない.
+環境を持たず遷移する先のCodeSegmentの指定のみに動作する為,通常の継続と区別して軽量継続と呼ぶ.
+CbCは軽量継続を中心にプログラミングする事が可能であるため,並列化やループ制御,関数呼び出しにおけるスタック制御などを
+意識したプログラミングスタイルでプログラミングする事が可能である.
+
 
 \section{Perl6}
 スクリプト言語Perl6はスクリプト言語であるPerlの後継言語として開発が初められたプログラミング言語である.
@@ -54,12 +62,21 @@
 Parrot自身はNQP(NotQuitPerl)と呼ばれるサブセットを解釈し,Perl6はNQPを用いて実装されている.
 現在はParrotの開発が終了し,Rakudoと呼ばれる実装が主流となっている.
 RakudoではMoarVMと言われるVMがNQPを解釈し,Parrotと同様にPerl6はNQPで実装されている.
+Parrotとは異なりMoarVMはPerl6プロジェクトに特化した仮想環境である.
+このNQPで記述されたPerl6の事をRakudoと呼ぶ.
 RakudoはMoarVMの他にJVM,Javascript,GraalVMを動作環境として選択可能である.
 
+言語的な特徴ではPerl5とは違いすべての変数がオブジェクトである.
+Perl5は動的型付け言語であり,通常の言語機能として整数型などの明確な型をプログラマが宣言する方法が存在しなかった.
+Perl6ではPerl5まで利用されていた動的型付けの他に,プログラマが明示的に型を宣言する静的型付け言語としての側面も追加された.
+また関数型プログラミングの特徴である高階関数やラムダ式の導入もなされている.
+さらに文法そのものをプログラマがプログラミングする事が可能となっておりPerl5と比較して非常に強力な言語機能となっている.
+
 \section{MoarVM}
-MoarVMはPerl6のVMであり,Rakudoの一部である.MoarVM自身はC言語で記述されており,現在も頻繁に開発されている.
-Pugsとは異なりMoarVM自身はPerl6の専用のVMとなっている.
-%
+MoarVMはPerl6のVMであり,Rakudoプロジェクトとして開発されているVMである.
+このVMはOSレベルの仮想化を行うVMではなく,擬似的なアセンブラを解釈するソフトウェアとしての擬似機械のことである.
+
+
 
 \section{今後の課題}
 %  Xv6 で CbC が動くようになれば、Raspberry Pi 以外のハードウェアでの実装も容易になるので、Linux 上での実装を目指して研究を進めていく。Xv6 で CbC が動けば、続けて Linux 上で Gears OS の実装も行なっていく。