# HG changeset patch # User Takahiro SHIMIZU # Date 1543479559 -32400 # Node ID ddf88af2253ec394bded45cfb8d678f18f740347 # Parent 57547b9cbf5ff854967641584d7937dbee607627 update diff -r 57547b9cbf5f -r ddf88af2253e Paper/anatofuz.pdf Binary file Paper/anatofuz.pdf has changed diff -r 57547b9cbf5f -r ddf88af2253e Paper/anatofuz.tex --- a/Paper/anatofuz.tex Thu Nov 29 17:06:31 2018 +0900 +++ b/Paper/anatofuz.tex Thu Nov 29 17:19:19 2018 +0900 @@ -330,7 +330,6 @@ その為まず比較的CbCで書き換えることが容易な箇所を修正する. 前章までに述べた通りCbCのCodeGearはコンパイラの基本ブロックに該当する. 従ってMoarVMにおける基本ブロックの箇所をCodeGearに書き換える事が可能である. -MoarVMにおける基本ブロックはインタプリタが実行するバイトコードごとの処理に該当する. \subsection{MoarVMのバイトコードのディスパッチ} MoarVMのバイトコードインタプリタはsrc/core/interp.cで定義されている. @@ -347,8 +346,8 @@ 巨大なcase文として実行された場合, 実行時間が遅いだけでなく, ラベル遷移と共存させて記述を行っている為Cのソースコードにおける可読性も低下する. +\lstinputlisting[label=orig_macro, caption=interp.cのマクロ部分]{./src/orig_macro.c} \lstinputlisting[label=oplabelsh, caption=ラベルテーブルの一部分]{./src/oplabels.h} -\lstinputlisting[label=orig_macro, caption=interp.cのマクロ部分]{./src/orig_macro.c} \lstinputlisting[label=dispatch_c, caption=オリジナル版MoarVMのバイトコードディスパッチ]{./src/dispatch.c} @@ -557,10 +556,10 @@ % 100000000 & 3.258 & 124.69 \\ \hline % \end{tabular} % \end{table} -本来処理系は広く使われる為に著名なOSSなどを利用して開発するのが良いが, CbCプロジェクトの認知度が低いという現状がある. +しかし, 言語処理系は広く使われる為に著名なOSSなどを利用して開発するのが望ましいが, CbCプロジェクトの認知度が低いという現状がある. また, 前章までに複数述べた通りCbCコンパイラが現在非常にバグを発生させやすい状態になっている. -CbCコンパイラはgccとllvm/clangに実装している為, これらのアップデートに追従する必要がある. +CbCコンパイラはgccとllvm/clang上に実装している為, これらのアップデートに追従する必要がある. しかしコンパイラのバージョンに応じてCbCで利用するコンパイラ内のAPIが異なる場合が多く, APIの変更に伴う修正作業などを行う必要がある. CbCMoarVMではCからCodeGearへ, CodeGearからCへの遷移などが複数回繰り返されているが, この処理中のCodeGearでのtail callの強制が非常に難関である.