Mercurial > hg > Papers > 2019 > anatofuz-prosym
changeset 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 | a3e09f39e36d |
children | 9c172999d70e |
files | Paper/anatofuz.tex mindmap.mm |
diffstat | 2 files changed, 55 insertions(+), 36 deletions(-) [+] |
line wrap: on
line diff
--- a/Paper/anatofuz.tex Mon Nov 05 20:23:35 2018 +0900 +++ b/Paper/anatofuz.tex Mon Nov 05 22:25:26 2018 +0900 @@ -49,21 +49,30 @@ 本稿ではまずPerl6の特徴及び実装について述べ,次に改良を行うMoarVMの一連の処理流れについて述べる. そして今回改良した一部分と今後の展開について記す. -\section{Perl6} +\section{CbCの概要} + +\section{Perl6の概要} この章では現在までのPerl6の遍歴及びPerl6の言語的な特徴について記載する. -\subsection{現在までのPerl6} -Perl6は2002年にLarryWallがPerlを置き換える言語として開発を開始した. -Perl5の言語的な問題点である純粋なオブジェクト指向言語としての機能などを取り入れた言語として設計された. +\subsection{Perl6の構想と初期の処理系} +Perl6は2002年にLarryWallがPerlを置き換える言語として設計を開始した. +Perl5の言語的な問題点であるオブジェクト指向機能の強力なサポートなどを取り入れた言語として設計された. Perl5は設計と実装が同一であり,Larryらによって書かれたC実装のみだった.Perl6は設計と実装が分離しており様々な処理系が開発されきた. まず2005年に唐鳳によってHaskellで実装されたPugs\footnote{http://hackage.haskell.org/package/Pugs}が登場した. Pugsは最初に登場したPerl6実装であり,この実装を基にしてPerl6の仕様も修正された. 現在Pugsは歴史的な実装となっており,更新はされていない. + +\subsection{Parrot} その後Pythonとの共同動作環境としてParrot\footnote{http://parrot.org/}が実装された. -ParrotはPASMと呼ばれるアセンブリを解釈可能なレジスタマシンである. +ParrotはPASMと呼ばれるバイトコードを解釈可能なレジスタマシンである. ParrotでのPerl6の実装はNQP(NotQuitPerl)と呼ばれるPerl6のサブセットでPerl6を記述するというアイディアの基実装された. -ParrotVMは2006年のversion8.1.0を最後のリリースである. +ParrotVMは2006年のversion8.1.0が最後のリリースである. +こちらもPugsと同様に現在のPerl6プロジェクトでは歴史的な実装とされている. 現在主に使用されている実装であるRakudoは2010年にRakudo-Starという一連のツール郡としてリリースされた. -Perl6処理系自体は現在も未完成であるという認識であり,Perl6プロジェクトとして提供しているテストリポジトリ「Roast」\footnote{https://github.com/perl6/roast}で定義されているテストケースを完全に通化する処理系は現在未だ存在しない. +Perl6処理系自体は現在も未完成であり,Perl6プロジェクトとして提供しているテストリポジトリ「Roast」\footnote{https://github.com/perl6/roast}で定義されているテストケースを完全に通化する処理系は現在未だ存在しない. + +Perl6は言語仕様及び処理実装がPerl5と大幅に異なっており,言語的な互換性が存在しない. +従って現在ではPerl6とPerl5は別言語としての開発方針になっている. +Perl6は現在有力な処理系であるRakudoから名前を取り\texttt{Raku}という言語名に変更しようという動きが一部存在している. \subsection{Rakudo} @@ -80,44 +89,59 @@ NQP自身はStage0と呼ばれる名前空間上のモジュールのみ動作環境のVMのバイトコードを必要とするが,それ以外はNQPで記述されておりBootstrappingされている言語である. その為Rakudoを動作させる為にはMoarVMなどのVM,VMに対応させる様にビルドしたNQPがそれぞれ必要となる. 現在のNQPではMoarVM,JVMに対応するStage0はそれぞれMoarVMbytecode,jarファイルが用意されており,Javascriptではバイトコードの代わりにランタイム独自のModuleLoaderなどが設計されている. +MoarVMのModuleLoaderはStage0あるMoarVMbytecodeで書かれた一連のファイルが該当する. + +Stage0にあるファイルはNQPのコンパイラの構成要素そのものである. +NQPは6modelと呼ばれるオブジェクトモデルを採用としているが,これを構築する為に必要なNQPCORE,正規表現系のQRegex,MoarVMのModuleLoaderなどがmoarvmbytecodeで記述されている.これらMoarVMBytecodeの拡張子は.moarvmである. +MoarVMに対してStage0にライブラリパスを設定し,nqp.moarvmを実行させることでnqpの対話型環境が起動する. + + Roastやドキュメントなどによって設計が定まっているPerl6とは異なりNQP自身の設計は今後も変更になる可能性が開発者から公表されている. 現在の公表されているNQPのオペコードはNQPのGitHubリポジトリ\footnote{https://github.com/perl6/nqp/blob/master/docs/ops.markdown}に記述されているものである. -\subsection{Perl6} +\subsection{Rakudo Perl6} +Rakudo実装上におけるPerl6はRakudo Perl6と呼ばれているGitリポジトリで管理されているプログラムのことである. +前述した通りRakudo Perl6はPerl6のサブセットであるNQPを用いて記述されている. +従ってyaccやlexと言ったPerl5の文字解析,構文解析に利用していたプログラムは利用せず,NQP側で構文定義などを行っている. +NQPはNQP自身でBootstrappingされている為,Rakudo Perl6のbuild時にはNQPの実行環境として要したVM,それに基づいてbuildしたNQPがそれぞれ必要となる. + +言語的な特徴としてはPerl5とは違いアトミックに演算を行う事が可能なatom演算子や,すべてがオブジェクトであるオブジェクト指向言語としての進化も見られる. -\section{MoarMV} + +\section{CbCによるMoarVMの概要} この章では改良を行ったPerl6処理系であるMoarVMについて述べる. -\subsection{MoarVMの処理流れ} -MoarVMはC言語で実装されており,Perl5で記述されたConfigure.plを +\section{CbCを用いる事についての評価} +Perl6処理系はまずPerl6の豊富な文法に対応する物を作成せねばならず,類似する他のプログラミング言語処理系と比較してもより複雑となっている. +実際にPerl5を始めとしたスクリプト言語とPerl6がどのような処理時間の違いが見られるかを実測する. -\section{論文1ページ目の情報} -論文の1ページ目には,タイトル,著者名,著者所属,概要,キーワードが配置される. -それぞれ, -\begin{itemize} -\item \verb|\title| -\item \verb|\author| -\item \verb|affiliate| -\item \verb|\begin{abstract}|~\verb|\end{abstract}| -\item \verb|\begin{jkeyword}|~\verb|\end{jkeyword}| -\end{itemize} -によって記述する. -その後,\verb|\maketitle| コマンドによってそれらの情報が配置される. +% \subsection{単純なループ処理の測定} +% 簡単な例題としてfor文を用いて100000回ループさせ,ある変数をインクリメントするというプログラムを作成する. +% 今回の評価対象としてPerl6は2018年4月にリリースされたMoarVM,NQP,Rakudoの実装を用いる. +% Perl5は5.26.2を利用した. +% +% \begin{table}[htb] +% \begin{tabular}{|c|c|c|} \hline +% ループ回数 & Perl5 (sec) & Perl6(sec) \\ \hline \hline +% 1000000 & 0.131 & 1.444 \\ \hline +% 10000000 & 0.131 & 1.444 \\ \hline +% 100000000 & 3.258 & 124.69 \\ \hline +% \end{tabular} +% \end{table} -以下,通常の論文と同様の形式で記述して下さい. + +\section{今後の課題} \section{まとめ} -本テンプレートでは,プログラミング・シンポジウム向けの原稿を, -\LaTeX を用いて準備する方法についてごく簡単に示した. -本テンプレートに関する質問・バグ報告は, -第56回プログラミングシンポジウム予稿集担当(松崎公紀)\verb|matsuzaki.kiminori@kochi-tech.ac.jp| -まで連絡下さい. +%å\subsection{MoarVMの処理流れ} +%MoarVMはC言語で実装されており,Perl5で記述されたConfigure.plを + \begin{acknowledgment} 謝辞が必要であれば,ここに書く.
--- a/mindmap.mm Mon Nov 05 20:23:35 2018 +0900 +++ b/mindmap.mm Mon Nov 05 22:25:26 2018 +0900 @@ -15,9 +15,7 @@ <node CREATED="1541414047128" ID="ID_16933733" MODIFIED="1541414053411" TEXT="CodeSegment"/> <node CREATED="1541414054620" ID="ID_1935230593" MODIFIED="1541414059146" TEXT="goto Statement"/> <node CREATED="1541414062173" ID="ID_7319522" MODIFIED="1541414068087" TEXT="軽量継続"> -<node CREATED="1541414076519" ID="ID_1442630319" MODIFIED="1541414084987" TEXT="Stackを消費しない"> -<node CREATED="1541414143614" ID="ID_1660961241" MODIFIED="1541414143614" TEXT=""/> -</node> +<node CREATED="1541414076519" ID="ID_1442630319" MODIFIED="1541414084987" TEXT="Stackを消費しない"/> <node CREATED="1541414137421" ID="ID_1727341369" MODIFIED="1541414185766" TEXT="tail call"/> </node> <node CREATED="1541414147487" ID="ID_1727268527" MODIFIED="1541414152425" TEXT="bug"> @@ -64,12 +62,9 @@ <node CREATED="1541414865747" ID="ID_814602879" MODIFIED="1541414883520" TEXT="インタプリタの状態を格納する構造体"> <node CREATED="1541414896442" ID="ID_1422656613" MODIFIED="1541414902097" TEXT="それへのポインタ"/> <node CREATED="1541414904745" ID="ID_1264721395" MODIFIED="1541414912409" TEXT="レジスタへマッピング"/> -<node CREATED="1541415020055" ID="ID_1464947225" MODIFIED="1541415020055" TEXT=""/> </node> <node CREATED="1541415436644" ID="ID_314825177" MODIFIED="1541415467419" TEXT="gears osのinterfaceは使用していない"/> -<node CREATED="1541415024122" ID="ID_330058705" MODIFIED="1541415048113" TEXT="cbcのcode segmentの入力引数を使ってレジスタマッピングを管理できる"> -<node CREATED="1541415429410" ID="ID_712452860" MODIFIED="1541415429410" TEXT=""/> -</node> +<node CREATED="1541415024122" ID="ID_330058705" MODIFIED="1541415048113" TEXT="cbcのcode segmentの入力引数を使ってレジスタマッピングを管理できる"/> </node> <node CREATED="1541414341726" ID="ID_1487177431" MODIFIED="1541414417373" TEXT="Threaded Code"> <node CREATED="1541414423299" ID="ID_836473525" MODIFIED="1541414431718" TEXT="Perlcc"/>