Mercurial > hg > Papers > 2019 > anatofuz-prosym
view Paper/anatofuz.tex @ 7:afefc0e58ea1
create mindmap and mkdir Slide
author | anatofuz |
---|---|
date | Mon, 05 Nov 2018 20:11:49 +0900 |
parents | anatofuz.tex@6dcf1143dc8f |
children | 8e80522a88bd |
line wrap: on
line source
% withpage: ページ番号をつける (著者確認用) % english: 英語原稿用フォーマット \documentclass{ipsjprosym} %\documentclass[withpage,english]{ipsjprosym} \usepackage[dvips]{graphicx} \usepackage{latexsym} \begin{document} % Title, Author %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \title{CbCを用いたPerl6処理系} %\affiliate{IPSJ}{情報処理学会} \affiliate{IERYUKYU}{琉球大学工学部情報工学科} \author{清水 隆博}{Takahiro SHIMIZU}{IERYUKYU}[anatofuz@cr.ie.u-ryukyu.ac.jp] \author{河野 真治}{Shinji KONO}{IERYUKYU}[kono@ie.u-ryukyu.ac.jp] %概要 \begin{abstract} スクリプト言語であるPerl5の後継言語としてPerl6が現在開発されている. Perl6は設計と実装が区分されており様々な処理系が開発されている.現在主流なPerl6はRakudoと言われるプロジェクトである. RakudoではPerl6自体をNQP(NotQuitPerl)と言われるPerl6のサブセットで記述し,NQPをVMが解釈するという処理流れになっている. このVMは任意のVMが選択できるようになっており,現在はMoarVM,JavaVM,Javascriptが動作環境として選択可能である. 主に利用されているVMにCで書かれたMoarVMが存在する. MoarVMはJITコンパイルなどをサポートしているが,全体的な起動及び処理速度がPerl5と比較し非常に低速である. この問題を解決するためにContinuation based C (CbC)という言語を一部用いる. 本論文ではMoarVMの一部をCbCを用いて書き直し,実際にどのようなパフォーマンスが出るかを報告する. \end{abstract} \begin{jkeyword} プログラミング言語, コンパイラ, CbC, Perl6, MoarVM \end{jkeyword} \maketitle % Body %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \section{研究目的} 現在も広く使われているスクリプト言語PerlことPerl5の後継言語としてPerl6が開発されている. Perl6は設計と実装が区分されており,現在広く使われている実装はRakudoと呼ばれるプロジェクトである. Rakudoの実装はPerl6コンパイラ開発者用のサブセットであるNQP(NotQuitPerl)で実装されているPerl6の事を指す. 現在RakudoはNQPを解釈できる実行環境として,C言語で実装されたMoarVM,JVM,Javascript上で動作する様に開発されている. Rakudoとして主に使われている処理系はMoarVMであるが,MoarVMの処理時間がPerl5などの多くのスクリプト言語と比較し非常に低速である. その為現在日本国内ではPerl6を実務として利用するケースは概ね存在しない. この問題を解決するために現在当研究室で開発しているContinuation Based C(以下CbC)を用いて改良を行う. 本稿ではまずPerl6の特徴及び実装について述べ,次に改良を行うMoarVMの一連の処理流れについて述べる. そして今回改良した一部分と今後の展開について記す. \section{Perl6} この章では現在までのPerl6の遍歴及びPerl6の言語的な特徴について記載する. \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は歴史的な実装となっており,更新はされていない. その後Pythonとの共同動作環境としてParrot\footnote{http://parrot.org/}が実装された. ParrotはPASMと呼ばれるアセンブリを解釈可能なレジスタマシンである. ParrotでのPerl6の実装はNQP(NotQuitPerl)と呼ばれるPerl6のサブセットでPerl6を記述するというアイディアの基実装された. ParrotVMは2006年のversion8.1.0を最後のリリースである. 現在主に使用されている実装であるRakudoは2010年にRakudo-Starという一連のツール郡としてリリースされた. Perl6処理系自体は現在も未完成であるという認識であり,Perl6プロジェクトとして提供しているテストリポジトリ「Roast」\footnote{https://github.com/perl6/roast}で定義されているテストケースを完全に通化する処理系は現在未だ存在しない. \subsection{Rakudo} RakudoとはParrotで構想に上がったNQP,NQPに基づくPerl6を基にしたプロジェクトである. RakudoがPerl6のコンパイラかつインタプリタであると考えても良い. Rakudoの構成はNQPで記述されたPerl6,NQP自身,そしてNQPを解釈するVMという構成である. このVMは現在MoarVM,JavaVM,Javascript,GraalVMを選択可能である. NQPで書かれたPerl6のことをRakudoと呼ぶ. RakudoStarとはこのMoarVM,NQP,Perl6が一体となったパッケージの事である. \subsection{NQP} RakudoにおけるNQP\footnote{https://github.com/perl6/nqp}は現在MoarVM,JVM上で動作し,MoarVMを一部利用することでNodeJSからも動作させる事が可能である. NQPはPerl6のサブセットであるため主な文法などはPerl6に準拠しているが幾つか異なる点が存在する. NQP自身はStage0と呼ばれる名前空間上のモジュールのみ動作環境のVMのバイトコードを必要とするが,それ以外はNQPで記述されておりBootstrappingされている言語である. その為Rakudoを動作させる為にはMoarVMなどのVM,VMに対応させる様にビルドしたNQPがそれぞれ必要となる. 現在のNQPではMoarVM,JVMに対応するStage0はそれぞれMoarVMbytecode,jarファイルが用意されており,Javascriptではバイトコードの代わりにランタイム独自のModuleLoaderなどが設計されている. Roastやドキュメントなどによって設計が定まっているPerl6とは異なりNQP自身の設計は今後も変更になる可能性が開発者から公表されている. 現在の公表されているNQPのオペコードはNQPのGitHubリポジトリ\footnote{https://github.com/perl6/nqp/blob/master/docs/ops.markdown}に記述されているものである. \subsection{Perl6} \section{MoarMV} この章では改良を行ったPerl6処理系であるMoarVMについて述べる. \subsection{MoarVMの処理流れ} MoarVMはC言語で実装されており,Perl5で記述されたConfigure.plを \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| コマンドによってそれらの情報が配置される. 以下,通常の論文と同様の形式で記述して下さい. \section{まとめ} 本テンプレートでは,プログラミング・シンポジウム向けの原稿を, \LaTeX を用いて準備する方法についてごく簡単に示した. 本テンプレートに関する質問・バグ報告は, 第56回プログラミングシンポジウム予稿集担当(松崎公紀)\verb|matsuzaki.kiminori@kochi-tech.ac.jp| まで連絡下さい. \begin{acknowledgment} 謝辞が必要であれば,ここに書く. \end{acknowledgment} % BibTeX を使用する場合 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % \bibliographystyle{ipsjsort} % \bibliography{ref} % BibTeX を使用しない場合 \begin{thebibliography}{9} \bibitem{latex} 奥村晴彦, 黒木裕介: \textbf{LaTeX2e美文書作成入門}. 技術評論社, 2013. \end{thebibliography} \end{document}