comparison Paper/anatofuz.tex @ 9:8e80522a88bd

tweek mindmap and wrote table of contents for Paper
author Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
date Mon, 05 Nov 2018 22:25:26 +0900
parents afefc0e58ea1
children 9c172999d70e
comparison
equal deleted inserted replaced
8:a3e09f39e36d 9:8e80522a88bd
47 その為現在日本国内ではPerl6を実務として利用するケースは概ね存在しない. 47 その為現在日本国内ではPerl6を実務として利用するケースは概ね存在しない.
48 この問題を解決するために現在当研究室で開発しているContinuation Based C(以下CbC)を用いて改良を行う. 48 この問題を解決するために現在当研究室で開発しているContinuation Based C(以下CbC)を用いて改良を行う.
49 本稿ではまずPerl6の特徴及び実装について述べ,次に改良を行うMoarVMの一連の処理流れについて述べる. 49 本稿ではまずPerl6の特徴及び実装について述べ,次に改良を行うMoarVMの一連の処理流れについて述べる.
50 そして今回改良した一部分と今後の展開について記す. 50 そして今回改良した一部分と今後の展開について記す.
51 51
52 \section{Perl6} 52 \section{CbCの概要}
53
54 \section{Perl6の概要}
53 この章では現在までのPerl6の遍歴及びPerl6の言語的な特徴について記載する. 55 この章では現在までのPerl6の遍歴及びPerl6の言語的な特徴について記載する.
54 \subsection{現在までのPerl6} 56 \subsection{Perl6の構想と初期の処理系}
55 Perl6は2002年にLarryWallがPerlを置き換える言語として開発を開始した. 57 Perl6は2002年にLarryWallがPerlを置き換える言語として設計を開始した.
56 Perl5の言語的な問題点である純粋なオブジェクト指向言語としての機能などを取り入れた言語として設計された. 58 Perl5の言語的な問題点であるオブジェクト指向機能の強力なサポートなどを取り入れた言語として設計された.
57 Perl5は設計と実装が同一であり,Larryらによって書かれたC実装のみだった.Perl6は設計と実装が分離しており様々な処理系が開発されきた. 59 Perl5は設計と実装が同一であり,Larryらによって書かれたC実装のみだった.Perl6は設計と実装が分離しており様々な処理系が開発されきた.
58 まず2005年に唐鳳によってHaskellで実装されたPugs\footnote{http://hackage.haskell.org/package/Pugs}が登場した. 60 まず2005年に唐鳳によってHaskellで実装されたPugs\footnote{http://hackage.haskell.org/package/Pugs}が登場した.
59 Pugsは最初に登場したPerl6実装であり,この実装を基にしてPerl6の仕様も修正された. 61 Pugsは最初に登場したPerl6実装であり,この実装を基にしてPerl6の仕様も修正された.
60 現在Pugsは歴史的な実装となっており,更新はされていない. 62 現在Pugsは歴史的な実装となっており,更新はされていない.
63
64 \subsection{Parrot}
61 その後Pythonとの共同動作環境としてParrot\footnote{http://parrot.org/}が実装された. 65 その後Pythonとの共同動作環境としてParrot\footnote{http://parrot.org/}が実装された.
62 ParrotはPASMと呼ばれるアセンブリを解釈可能なレジスタマシンである. 66 ParrotはPASMと呼ばれるバイトコードを解釈可能なレジスタマシンである.
63 ParrotでのPerl6の実装はNQP(NotQuitPerl)と呼ばれるPerl6のサブセットでPerl6を記述するというアイディアの基実装された. 67 ParrotでのPerl6の実装はNQP(NotQuitPerl)と呼ばれるPerl6のサブセットでPerl6を記述するというアイディアの基実装された.
64 ParrotVMは2006年のversion8.1.0を最後のリリースである. 68 ParrotVMは2006年のversion8.1.0が最後のリリースである.
69 こちらもPugsと同様に現在のPerl6プロジェクトでは歴史的な実装とされている.
65 現在主に使用されている実装であるRakudoは2010年にRakudo-Starという一連のツール郡としてリリースされた. 70 現在主に使用されている実装であるRakudoは2010年にRakudo-Starという一連のツール郡としてリリースされた.
66 Perl6処理系自体は現在も未完成であるという認識であり,Perl6プロジェクトとして提供しているテストリポジトリ「Roast」\footnote{https://github.com/perl6/roast}で定義されているテストケースを完全に通化する処理系は現在未だ存在しない. 71 Perl6処理系自体は現在も未完成であり,Perl6プロジェクトとして提供しているテストリポジトリ「Roast」\footnote{https://github.com/perl6/roast}で定義されているテストケースを完全に通化する処理系は現在未だ存在しない.
72
73 Perl6は言語仕様及び処理実装がPerl5と大幅に異なっており,言語的な互換性が存在しない.
74 従って現在ではPerl6とPerl5は別言語としての開発方針になっている.
75 Perl6は現在有力な処理系であるRakudoから名前を取り\texttt{Raku}という言語名に変更しようという動きが一部存在している.
67 76
68 \subsection{Rakudo} 77 \subsection{Rakudo}
69 78
70 RakudoとはParrotで構想に上がったNQP,NQPに基づくPerl6を基にしたプロジェクトである. 79 RakudoとはParrotで構想に上がったNQP,NQPに基づくPerl6を基にしたプロジェクトである.
71 RakudoがPerl6のコンパイラかつインタプリタであると考えても良い. 80 RakudoがPerl6のコンパイラかつインタプリタであると考えても良い.
78 RakudoにおけるNQP\footnote{https://github.com/perl6/nqp}は現在MoarVM,JVM上で動作し,MoarVMを一部利用することでNodeJSからも動作させる事が可能である. 87 RakudoにおけるNQP\footnote{https://github.com/perl6/nqp}は現在MoarVM,JVM上で動作し,MoarVMを一部利用することでNodeJSからも動作させる事が可能である.
79 NQPはPerl6のサブセットであるため主な文法などはPerl6に準拠しているが幾つか異なる点が存在する. 88 NQPはPerl6のサブセットであるため主な文法などはPerl6に準拠しているが幾つか異なる点が存在する.
80 NQP自身はStage0と呼ばれる名前空間上のモジュールのみ動作環境のVMのバイトコードを必要とするが,それ以外はNQPで記述されておりBootstrappingされている言語である. 89 NQP自身はStage0と呼ばれる名前空間上のモジュールのみ動作環境のVMのバイトコードを必要とするが,それ以外はNQPで記述されておりBootstrappingされている言語である.
81 その為Rakudoを動作させる為にはMoarVMなどのVM,VMに対応させる様にビルドしたNQPがそれぞれ必要となる. 90 その為Rakudoを動作させる為にはMoarVMなどのVM,VMに対応させる様にビルドしたNQPがそれぞれ必要となる.
82 現在のNQPではMoarVM,JVMに対応するStage0はそれぞれMoarVMbytecode,jarファイルが用意されており,Javascriptではバイトコードの代わりにランタイム独自のModuleLoaderなどが設計されている. 91 現在のNQPではMoarVM,JVMに対応するStage0はそれぞれMoarVMbytecode,jarファイルが用意されており,Javascriptではバイトコードの代わりにランタイム独自のModuleLoaderなどが設計されている.
92 MoarVMのModuleLoaderはStage0あるMoarVMbytecodeで書かれた一連のファイルが該当する.
93
94 Stage0にあるファイルはNQPのコンパイラの構成要素そのものである.
95 NQPは6modelと呼ばれるオブジェクトモデルを採用としているが,これを構築する為に必要なNQPCORE,正規表現系のQRegex,MoarVMのModuleLoaderなどがmoarvmbytecodeで記述されている.これらMoarVMBytecodeの拡張子は.moarvmである.
96 MoarVMに対してStage0にライブラリパスを設定し,nqp.moarvmを実行させることでnqpの対話型環境が起動する.
97
98
83 99
84 Roastやドキュメントなどによって設計が定まっているPerl6とは異なりNQP自身の設計は今後も変更になる可能性が開発者から公表されている. 100 Roastやドキュメントなどによって設計が定まっているPerl6とは異なりNQP自身の設計は今後も変更になる可能性が開発者から公表されている.
85 現在の公表されているNQPのオペコードはNQPのGitHubリポジトリ\footnote{https://github.com/perl6/nqp/blob/master/docs/ops.markdown}に記述されているものである. 101 現在の公表されているNQPのオペコードはNQPのGitHubリポジトリ\footnote{https://github.com/perl6/nqp/blob/master/docs/ops.markdown}に記述されているものである.
86 102
87 103
88 \subsection{Perl6} 104 \subsection{Rakudo Perl6}
105 Rakudo実装上におけるPerl6はRakudo Perl6と呼ばれているGitリポジトリで管理されているプログラムのことである.
106 前述した通りRakudo Perl6はPerl6のサブセットであるNQPを用いて記述されている.
107 従ってyaccやlexと言ったPerl5の文字解析,構文解析に利用していたプログラムは利用せず,NQP側で構文定義などを行っている.
108 NQPはNQP自身でBootstrappingされている為,Rakudo Perl6のbuild時にはNQPの実行環境として要したVM,それに基づいてbuildしたNQPがそれぞれ必要となる.
109
110 言語的な特徴としてはPerl5とは違いアトミックに演算を行う事が可能なatom演算子や,すべてがオブジェクトであるオブジェクト指向言語としての進化も見られる.
89 111
90 112
91 \section{MoarMV} 113
114 \section{CbCによるMoarVMの概要}
92 この章では改良を行ったPerl6処理系であるMoarVMについて述べる. 115 この章では改良を行ったPerl6処理系であるMoarVMについて述べる.
93 116
94 \subsection{MoarVMの処理流れ} 117 \section{CbCを用いる事についての評価}
95 MoarVMはC言語で実装されており,Perl5で記述されたConfigure.plを 118 Perl6処理系はまずPerl6の豊富な文法に対応する物を作成せねばならず,類似する他のプログラミング言語処理系と比較してもより複雑となっている.
119 実際にPerl5を始めとしたスクリプト言語とPerl6がどのような処理時間の違いが見られるかを実測する.
96 120
97 \section{論文1ページ目の情報}
98 121
99 論文の1ページ目には,タイトル,著者名,著者所属,概要,キーワードが配置される. 122 % \subsection{単純なループ処理の測定}
100 それぞれ, 123 % 簡単な例題としてfor文を用いて100000回ループさせ,ある変数をインクリメントするというプログラムを作成する.
101 \begin{itemize} 124 % 今回の評価対象としてPerl6は2018年4月にリリースされたMoarVM,NQP,Rakudoの実装を用いる.
102 \item \verb|\title| 125 % Perl5は5.26.2を利用した.
103 \item \verb|\author| 126 %
104 \item \verb|affiliate| 127 % \begin{table}[htb]
105 \item \verb|\begin{abstract}|~\verb|\end{abstract}| 128 % \begin{tabular}{|c|c|c|} \hline
106 \item \verb|\begin{jkeyword}|~\verb|\end{jkeyword}| 129 % ループ回数 & Perl5 (sec) & Perl6(sec) \\ \hline \hline
107 \end{itemize} 130 % 1000000 & 0.131 & 1.444 \\ \hline
108 によって記述する. 131 % 10000000 & 0.131 & 1.444 \\ \hline
109 その後,\verb|\maketitle| コマンドによってそれらの情報が配置される. 132 % 100000000 & 3.258 & 124.69 \\ \hline
133 % \end{tabular}
134 % \end{table}
110 135
111 以下,通常の論文と同様の形式で記述して下さい. 136
137 \section{今後の課題}
112 138
113 \section{まとめ} 139 \section{まとめ}
114 140
115 本テンプレートでは,プログラミング・シンポジウム向けの原稿を,
116 \LaTeX を用いて準備する方法についてごく簡単に示した.
117 141
118 本テンプレートに関する質問・バグ報告は, 142 %å\subsection{MoarVMの処理流れ}
119 第56回プログラミングシンポジウム予稿集担当(松崎公紀)\verb|matsuzaki.kiminori@kochi-tech.ac.jp| 143 %MoarVMはC言語で実装されており,Perl5で記述されたConfigure.plを
120 まで連絡下さい. 144
121 145
122 \begin{acknowledgment} 146 \begin{acknowledgment}
123 謝辞が必要であれば,ここに書く. 147 謝辞が必要であれば,ここに書く.
124 \end{acknowledgment} 148 \end{acknowledgment}
125 149