# HG changeset patch # User Takahiro SHIMIZU # Date 1541428683 -32400 # Node ID 9c172999d70ed4e558bb415b7c158edc6092a6c9 # Parent 8e80522a88bd24cf44a6f7bfe8833a8c26529661 tweak Papers for CbC abstract diff -r 8e80522a88bd -r 9c172999d70e Paper/anatofuz.tex --- a/Paper/anatofuz.tex Mon Nov 05 22:25:26 2018 +0900 +++ b/Paper/anatofuz.tex Mon Nov 05 23:38:03 2018 +0900 @@ -46,10 +46,23 @@ Rakudoとして主に使われている処理系はMoarVMであるが,MoarVMの処理時間がPerl5などの多くのスクリプト言語と比較し非常に低速である. その為現在日本国内ではPerl6を実務として利用するケースは概ね存在しない. この問題を解決するために現在当研究室で開発しているContinuation Based C(以下CbC)を用いて改良を行う. -本稿ではまずPerl6の特徴及び実装について述べ,次に改良を行うMoarVMの一連の処理流れについて述べる. +CbCはCよりさらにきめ細やかな記述が可能であるためスクリプト言語などのプログラミング言語の記述と親和性が高い事が推測される. +故に本研究はCbCをスクリプト言語の実装に適応した場合,どのような利点やプログラミング上の問題点に遭遇するかCbCの応用としての側面でも行う. +本稿ではまずCbC,Perl6の特徴及び現在の実装について述べ,次に改良を行うMoarVMの一連の処理流れについて述べる. そして今回改良した一部分と今後の展開について記す. -\section{CbCの概要} +\section{CbC} +\subsection{CbCの概要} +CbCは当研究室で開発しているプログラミング言語である. + + +\subsection{現在の実装} +CbCは現在主要なCコンパイラであるgcc及びllvmをバックエンドとしたclang上の2種類の実装が存在する. +これらは内部的に与えられているソースコードがCbCであるかどうかを判断し,そうでない場合は通常のコンパイラとして動作する. +その為MoarVMのビルドにおいてもCbCで書き換えたソースコードがあるターゲットと,手を加えていないオリジナルのターゲットの2種類を同一のコンパイラでビルドする事が可能である. + +\subsection{CbCとCの互換性} + \section{Perl6の概要} この章では現在までのPerl6の遍歴及びPerl6の言語的な特徴について記載する. @@ -93,9 +106,9 @@ Stage0にあるファイルはNQPのコンパイラの構成要素そのものである. NQPは6modelと呼ばれるオブジェクトモデルを採用としているが,これを構築する為に必要なNQPCORE,正規表現系のQRegex,MoarVMのModuleLoaderなどがmoarvmbytecodeで記述されている.これらMoarVMBytecodeの拡張子は.moarvmである. -MoarVMに対してStage0にライブラリパスを設定し,nqp.moarvmを実行させることでnqpの対話型環境が起動する. +MoarVMに対してStage0のディレクトリにライブラリパスを設定し,nqp.moarvmを実行させることでnqpの対話型環境が起動する. - +実際にperl6を動かすためにはself buildしたNQPコンパイラが必要となる.その為にstage0を利用してStage1をビルドしNQPコンパイラを作成する. Roastやドキュメントなどによって設計が定まっているPerl6とは異なりNQP自身の設計は今後も変更になる可能性が開発者から公表されている. 現在の公表されているNQPのオペコードはNQPのGitHubリポジトリ\footnote{https://github.com/perl6/nqp/blob/master/docs/ops.markdown}に記述されているものである. @@ -111,8 +124,9 @@ -\section{CbCによるMoarVMの概要} +\section{CbCによるMoarVM} この章では改良を行ったPerl6処理系であるMoarVMについて述べる. +\subsection{CbCコンパイラによるバグ} \section{CbCを用いる事についての評価} Perl6処理系はまずPerl6の豊富な文法に対応する物を作成せねばならず,類似する他のプログラミング言語処理系と比較してもより複雑となっている.