# HG changeset patch # User Takahiro SHIMIZU # Date 1540375188 -32400 # Node ID c8bce80ed637408b21c089c0309558a2a205849f # Parent 7a0f772e0fa5c92e5091f3960dd066ba4753de4a add research purpose diff -r 7a0f772e0fa5 -r c8bce80ed637 mid_thesis.tex --- a/mid_thesis.tex Wed Oct 24 14:41:00 2018 +0900 +++ b/mid_thesis.tex Wed Oct 24 18:59:48 2018 +0900 @@ -29,13 +29,36 @@ \maketitle \thispagestyle{fancy} -\section{Perl6の概要} +\section{研究目的} +スクリプト言語Perl(Perl5)の後継言語としてPerl6が開発されている. +Perl6は設計と実装が分離しており,現在はRakudoと呼ばれる実装が主流となっている. +RakudoではPerl6をコンパイラ開発者用のサブセットであるNQPで実装し,NQPをVMで動作させる. +現在はNQPを解釈できるVMとしてMoarVM,JVM,Javascriptが存在する. +主に利用されているのはMoarVMであるが処理時間がPerlを始めとした現在広く使われているスクリプト言語と比較すると非常に低速であり +実務として利用できるレベルに達していない. +またMoarVMの実装も巨大なswitch-case文が使用されており開発の難易度も高い. +その為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 ではスタックに値を積んで行く必要が無くスタックは変更されない。このようなスタックに値を積まない継続を軽量継続と呼ぶ。この軽量継続により、並列化、ループ制御、関数コールとスタックの操作を意識した最適化がソースコードレベルで行えるようになる。 + +\section{Perl6} +スクリプト言語Perl6はスクリプト言語であるPerlの後継言語として開発が初められたプログラミング言語である. +Perlは現在5が接頭辞につくバージョンとなっており,その次期バージョンとして当初は開発された為Perl6と名付けられている. +現在はPerl5との非互換な文法や独自の機能の追加などによりPerlとは別言語として開発が進められている. +Perl6はPerlとは異なりプログラミング言語の設計と実装が分離しており,様々な実装が開発された. +Haskellによって実装されたPugs,PythonとPerl6の共通基盤として言語処理系のVMであるParrotが実装された. +Parrot自身はNQP(NotQuitPerl)と呼ばれるサブセットを解釈し,Perl6はNQPを用いて実装されている. +現在はParrotの開発が終了し,Rakudoと呼ばれる実装が主流となっている. +RakudoではMoarVMと言われるVMがNQPを解釈し,Parrotと同様にPerl6はNQPで実装されている. +RakudoはMoarVMの他にJVM,Javascript,GraalVMを動作環境として選択可能である. + +\section{MoarVM} +MoarVMはPerl6のVMであり,Rakudoの一部である.MoarVM自身はC言語で記述されており,現在も頻繁に開発されている. +Pugsとは異なりMoarVM自身はPerl6の専用のVMとなっている. % \section{今後の課題}