comparison Paper/anatofuz.tex @ 10:9c172999d70e

tweak Papers for CbC abstract
author Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
date Mon, 05 Nov 2018 23:38:03 +0900
parents 8e80522a88bd
children ea10413281c5
comparison
equal deleted inserted replaced
9:8e80522a88bd 10:9c172999d70e
44 Rakudoの実装はPerl6コンパイラ開発者用のサブセットであるNQP(NotQuitPerl)で実装されているPerl6の事を指す. 44 Rakudoの実装はPerl6コンパイラ開発者用のサブセットであるNQP(NotQuitPerl)で実装されているPerl6の事を指す.
45 現在RakudoはNQPを解釈できる実行環境として,C言語で実装されたMoarVM,JVM,Javascript上で動作する様に開発されている. 45 現在RakudoはNQPを解釈できる実行環境として,C言語で実装されたMoarVM,JVM,Javascript上で動作する様に開発されている.
46 Rakudoとして主に使われている処理系はMoarVMであるが,MoarVMの処理時間がPerl5などの多くのスクリプト言語と比較し非常に低速である. 46 Rakudoとして主に使われている処理系はMoarVMであるが,MoarVMの処理時間がPerl5などの多くのスクリプト言語と比較し非常に低速である.
47 その為現在日本国内ではPerl6を実務として利用するケースは概ね存在しない. 47 その為現在日本国内ではPerl6を実務として利用するケースは概ね存在しない.
48 この問題を解決するために現在当研究室で開発しているContinuation Based C(以下CbC)を用いて改良を行う. 48 この問題を解決するために現在当研究室で開発しているContinuation Based C(以下CbC)を用いて改良を行う.
49 本稿ではまずPerl6の特徴及び実装について述べ,次に改良を行うMoarVMの一連の処理流れについて述べる. 49 CbCはCよりさらにきめ細やかな記述が可能であるためスクリプト言語などのプログラミング言語の記述と親和性が高い事が推測される.
50 故に本研究はCbCをスクリプト言語の実装に適応した場合,どのような利点やプログラミング上の問題点に遭遇するかCbCの応用としての側面でも行う.
51 本稿ではまずCbC,Perl6の特徴及び現在の実装について述べ,次に改良を行うMoarVMの一連の処理流れについて述べる.
50 そして今回改良した一部分と今後の展開について記す. 52 そして今回改良した一部分と今後の展開について記す.
51 53
52 \section{CbCの概要} 54 \section{CbC}
55 \subsection{CbCの概要}
56 CbCは当研究室で開発しているプログラミング言語である.
57
58
59 \subsection{現在の実装}
60 CbCは現在主要なCコンパイラであるgcc及びllvmをバックエンドとしたclang上の2種類の実装が存在する.
61 これらは内部的に与えられているソースコードがCbCであるかどうかを判断し,そうでない場合は通常のコンパイラとして動作する.
62 その為MoarVMのビルドにおいてもCbCで書き換えたソースコードがあるターゲットと,手を加えていないオリジナルのターゲットの2種類を同一のコンパイラでビルドする事が可能である.
63
64 \subsection{CbCとCの互換性}
65
53 66
54 \section{Perl6の概要} 67 \section{Perl6の概要}
55 この章では現在までのPerl6の遍歴及びPerl6の言語的な特徴について記載する. 68 この章では現在までのPerl6の遍歴及びPerl6の言語的な特徴について記載する.
56 \subsection{Perl6の構想と初期の処理系} 69 \subsection{Perl6の構想と初期の処理系}
57 Perl6は2002年にLarryWallがPerlを置き換える言語として設計を開始した. 70 Perl6は2002年にLarryWallがPerlを置き換える言語として設計を開始した.
91 現在のNQPではMoarVM,JVMに対応するStage0はそれぞれMoarVMbytecode,jarファイルが用意されており,Javascriptではバイトコードの代わりにランタイム独自のModuleLoaderなどが設計されている. 104 現在のNQPではMoarVM,JVMに対応するStage0はそれぞれMoarVMbytecode,jarファイルが用意されており,Javascriptではバイトコードの代わりにランタイム独自のModuleLoaderなどが設計されている.
92 MoarVMのModuleLoaderはStage0あるMoarVMbytecodeで書かれた一連のファイルが該当する. 105 MoarVMのModuleLoaderはStage0あるMoarVMbytecodeで書かれた一連のファイルが該当する.
93 106
94 Stage0にあるファイルはNQPのコンパイラの構成要素そのものである. 107 Stage0にあるファイルはNQPのコンパイラの構成要素そのものである.
95 NQPは6modelと呼ばれるオブジェクトモデルを採用としているが,これを構築する為に必要なNQPCORE,正規表現系のQRegex,MoarVMのModuleLoaderなどがmoarvmbytecodeで記述されている.これらMoarVMBytecodeの拡張子は.moarvmである. 108 NQPは6modelと呼ばれるオブジェクトモデルを採用としているが,これを構築する為に必要なNQPCORE,正規表現系のQRegex,MoarVMのModuleLoaderなどがmoarvmbytecodeで記述されている.これらMoarVMBytecodeの拡張子は.moarvmである.
96 MoarVMに対してStage0にライブラリパスを設定し,nqp.moarvmを実行させることでnqpの対話型環境が起動する. 109 MoarVMに対してStage0のディレクトリにライブラリパスを設定し,nqp.moarvmを実行させることでnqpの対話型環境が起動する.
97 110
98 111 実際にperl6を動かすためにはself buildしたNQPコンパイラが必要となる.その為にstage0を利用してStage1をビルドしNQPコンパイラを作成する.
99 112
100 Roastやドキュメントなどによって設計が定まっているPerl6とは異なりNQP自身の設計は今後も変更になる可能性が開発者から公表されている. 113 Roastやドキュメントなどによって設計が定まっているPerl6とは異なりNQP自身の設計は今後も変更になる可能性が開発者から公表されている.
101 現在の公表されているNQPのオペコードはNQPのGitHubリポジトリ\footnote{https://github.com/perl6/nqp/blob/master/docs/ops.markdown}に記述されているものである. 114 現在の公表されているNQPのオペコードはNQPのGitHubリポジトリ\footnote{https://github.com/perl6/nqp/blob/master/docs/ops.markdown}に記述されているものである.
102 115
103 116
109 122
110 言語的な特徴としてはPerl5とは違いアトミックに演算を行う事が可能なatom演算子や,すべてがオブジェクトであるオブジェクト指向言語としての進化も見られる. 123 言語的な特徴としてはPerl5とは違いアトミックに演算を行う事が可能なatom演算子や,すべてがオブジェクトであるオブジェクト指向言語としての進化も見られる.
111 124
112 125
113 126
114 \section{CbCによるMoarVMの概要} 127 \section{CbCによるMoarVM}
115 この章では改良を行ったPerl6処理系であるMoarVMについて述べる. 128 この章では改良を行ったPerl6処理系であるMoarVMについて述べる.
129 \subsection{CbCコンパイラによるバグ}
116 130
117 \section{CbCを用いる事についての評価} 131 \section{CbCを用いる事についての評価}
118 Perl6処理系はまずPerl6の豊富な文法に対応する物を作成せねばならず,類似する他のプログラミング言語処理系と比較してもより複雑となっている. 132 Perl6処理系はまずPerl6の豊富な文法に対応する物を作成せねばならず,類似する他のプログラミング言語処理系と比較してもより複雑となっている.
119 実際にPerl5を始めとしたスクリプト言語とPerl6がどのような処理時間の違いが見られるかを実測する. 133 実際にPerl5を始めとしたスクリプト言語とPerl6がどのような処理時間の違いが見られるかを実測する.
120 134