view paper/chapter1.tex @ 113:0bdadb2a7355

update
author anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
date Tue, 19 Feb 2019 20:17:27 +0900
parents e8f9e4559082
children
line wrap: on
line source

\chapter{現在のPerl6処理系}
\label{chap:introduction}
\pagenumbering{arabic}

% 序論の目安としては1枚半ぐらい.
% 英語発表者は,最終予稿の「はじめに」の英訳などを載せてもいいかも.
 
%\section{メタ計算の重要性}

現在開発が進んでいるプログラミング言語にPerl6がある。\cite{perl6doc}
Perl6は設計と実装が分離しており\cite{perl6design}、 現在の主要な実装はRakudoと呼ばれている。
RakudoはPerl6のサブセットである、NQP\cite{nqp}と呼ばれる言語を中心に 記述されている。
NQP自体はプロセス仮想機械と呼ばれる、 言語処理系の仮想機械で実行される。
Rakudoの場合実行する仮想機械は、 Perl6専用の処理系であるMoarVM、 Java環境のJVMが選択可能である。

Rakudoはインタプリタの起動時間及び、 全体的な処理時間が他のスクリプト言語と比較して非常に低速である。
また、 実行環境であるMoarVMの実装事態も複雑であり、 巨大なcase文が利用されているなど見通しが悪くなっている。

当研究室で開発しているプログラミング言語に、 Continuation Based C (CbC)\cite{gcccbc} がある。
CbCはCと互換性のある言語であり、 関数より細かな単位である、 CodeGearを用いて記述することが可能となる。
CbCでは各CodeGear間の移動に、 環境などを保存せず次の状態に移動する軽量継続を用いている。
この為、 C言語におけるループや関数呼び出しを排除する事が可能となる。


現在までのCbCを用いた研究においては、 CbCの言語処理系への応用例が少ない。
スクリプト言語処理系では、 バイトコードから実行するべき命令のディスパッチの際にswitch分やgcc拡張のラベルgotoなどを利用している。
これらは通常巨大なswitch-case文となり、特定のCファイルに記述せざるを得なくなる。
CbCの場合、 このcase文相当のCodeGearを生成する事が可能である為、 スクリプト言語処理系の記述に適していると考えられる。
またこの命令ディスパッチ部分は、 スクリプト言語の中心的な処理である為、 スクリプト言語の改修にはまず中心部分の実装から変更したい為、この箇所を修正する。


MoarVMはC言語で記述されており、 Cと互換性のある言語であれば拡張する事が可能となる。
CbCはCと互換性のある言語である為、 MoarVMの一部記述をCbCで書き換える事が可能となる。
CbCにおけるCodeGearは、 関数より細かな単位として利用出来る為、 MoarVMの命令ディスパッチの巨大なcase文の書き換えがCodeGearを用いることで可能であると考える。

本研究では CbC を用いてPerl6の実行環境である、 MoarVMの命令ディスパッチ部分の処理の書き換えを検討する。