Mercurial > hg > Papers > 2019 > anatofuz-prosym
comparison Paper/anatofuz.tex @ 23:7689b70a1a79
create stagenqp.pdf and tweak tex
author | Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Thu, 08 Nov 2018 19:29:49 +0900 |
parents | fb4c1b408c9f |
children | d8f77d0a3452 |
comparison
equal
deleted
inserted
replaced
22:fb4c1b408c9f | 23:7689b70a1a79 |
---|---|
175 | 175 |
176 \subsection{NQP} | 176 \subsection{NQP} |
177 | 177 |
178 RakudoにおけるNQP\cite{nqp}は現在MoarVM,JVM上で動作し,MoarVMを一部利用することでNodeJSからも動作させる事が可能である. | 178 RakudoにおけるNQP\cite{nqp}は現在MoarVM,JVM上で動作し,MoarVMを一部利用することでNodeJSからも動作させる事が可能である. |
179 NQPはPerl6のサブセットであるため主な文法などはPerl6に準拠しているが幾つか異なる点が存在する. | 179 NQPはPerl6のサブセットであるため主な文法などはPerl6に準拠しているが幾つか異なる点が存在する. |
180 NQP自身はStage0と呼ばれる名前空間上のモジュールのみ動作環境のVMのバイトコードを必要とするが,それ以外はNQPで記述されておりBootstrappingされている言語である. | 180 NQP自身はStage0と呼ばれるディレクトリに用意されているモジュールのみ動作環境のVMのバイトコードを必要とするが,それ以外はNQPで記述されておりBootstrappingされている言語である. |
181 Perl6の一部はNQPを拡張したもので書かれている為,Rakudoを動作させる為にはMoarVMなどのVM,VMに対応させる様にビルドしたNQPがそれぞれ必要となる. | 181 Perl6の一部はNQPを拡張したもので書かれている為,Rakudoを動作させる為にはMoarVMなどのVM,VMに対応させる様にビルドしたNQPがそれぞれ必要となる. |
182 現在のNQPではMoarVM,JVMに対応するStage0はそれぞれMoarVMbytecode,jarファイルが用意されており,Javascriptではバイトコードの代わりにランタイム独自のModuleLoaderなどが設計されている. | 182 現在のNQPではMoarVM,JVMに対応するStage0はそれぞれMoarVMBytecode,jarファイルが用意されており,Javascriptではバイトコードの代わりにランタイム独自のModuleLoaderなどが設計されている. |
183 MoarVMのModuleLoaderはStage0あるMoarVMbytecodeで書かれた一連のファイルが該当する. | 183 MoarVMのModuleLoaderはStage0あるMoarVMBytecodeで書かれた一連のファイルが該当する. |
184 | 184 |
185 NQPのビルドフローは図\ref{fig:nqpbuild}に示す. | |
185 Stage0にあるファイルをmoarvmに与えることでnqpのインタプリタが実行される様になっている. | 186 Stage0にあるファイルをmoarvmに与えることでnqpのインタプリタが実行される様になっている. |
186 これはStage0の一連のファイルはmoarvm bytecodeなどで記述されたNQPコンパイラのモジュールである為である. | 187 これはStage0の一連のファイルはmoarvm bytecodeなどで記述されたNQPコンパイラのモジュールである為である. |
187 NQPは6modelと呼ばれるオブジェクトモデルを採用としているが,これを構築する為に必要なNQPCORE,正規表現系のQRegex,MoarVMのModuleLoaderなどがmoarvmbytecodeで記述されている.これらMoarVMBytecodeの拡張子は.moarvmである. | 188 NQPは6modelと呼ばれるオブジェクトモデルを採用としているが,これを構築する為に必要なNQPCORE,正規表現系のQRegex,MoarVMのModuleLoaderなどがMoarVMBytecodeで記述されている.これらMoarVMBytecodeの拡張子は.moarvmである. |
188 MoarVMに対してStage0のディレクトリにライブラリパスを設定し,nqp.moarvmを実行させることでnqpの対話型環境が起動する. | 189 MoarVMに対してStage0のディレクトリにライブラリパスを設定し,nqp.moarvmを実行させることでnqpの対話型環境が起動する. |
189 | 190 |
190 実際にperl6を動かすためにはself buildしたNQPコンパイラが必要となる.その為にstage0を利用してStage1をビルドしNQPコンパイラを作成する. | 191 実際にperl6を動かすためにはself buildしたNQPコンパイラが必要となる.その為にstage0を利用してStage1をビルドしNQPコンパイラを作成する. |
192 Stage1は中間的な出力であり,生成されたNQPファイルはStage2と同一であるが,MoarVMBytecodeが異なる. | |
193 Perl6では完全なセルフコンパイルを実行したNQPが要求される為,Stage1を利用してもう一度ビルドを行いStage2を作成する. | |
191 | 194 |
192 Roastやドキュメントなどによって設計が定まっているPerl6とは異なりNQP自身の設計は今後も変更になる可能性が開発者から公表されている. | 195 Roastやドキュメントなどによって設計が定まっているPerl6とは異なりNQP自身の設計は今後も変更になる可能性が開発者から公表されている. |
193 現在の公表されているNQPのオペコードはNQPのリポジトリ\cite{nqpopcode}に記述されているものである. | 196 現在の公表されているNQPのオペコードはNQPのリポジトリ\cite{nqpopcode}に記述されているものである. |
194 | 197 |
198 \begin{figure}[ht] | |
199 \begin{center} | |
200 \includegraphics[width=70mm]{fig/stagenqp.pdf} | |
201 \end{center} | |
202 \caption{NQPのビルドフロー} | |
203 \label{fig:nqpbuild} | |
204 \end{figure} | |
195 | 205 |
196 \subsection{Rakudo Perl6} | 206 \subsection{Rakudo Perl6} |
197 Rakudo実装上におけるPerl6はRakudo Perl6と呼ばれているGitリポジトリで管理されているプログラムのことである. | 207 Rakudo実装上におけるPerl6はRakudo Perl6と呼ばれているGitリポジトリで管理されているプログラムのことである. |
198 前述した通りRakudo Perl6はPerl6のサブセットであるNQPを用いて記述されている. | 208 前述した通りRakudo Perl6はPerl6のサブセットであるNQPを用いて記述されている. |
199 従ってyaccやlexと言ったPerl5の文字解析,構文解析に利用していたプログラムは利用せず,NQP側で構文定義などを行っている. | 209 従ってyaccやlexと言ったPerl5の文字解析,構文解析に利用していたプログラムは利用せず,NQP側で構文定義などを行っている. |
384 | 394 |
385 また高速化という面では,Perlの特徴である正規表現に着目し,正規表現の表現のみ高速で動く最適化の導入なども検討している. | 395 また高速化という面では,Perlの特徴である正規表現に着目し,正規表現の表現のみ高速で動く最適化の導入なども検討している. |
386 | 396 |
387 Perl6の開発は非常に活発に行われている為,CbCMoarVMの最新版の追従も課題となっている. | 397 Perl6の開発は非常に活発に行われている為,CbCMoarVMの最新版の追従も課題となっている. |
388 現在はinterp.cからPerlスクリプトを用いて自動でCbCのCodeSegmentを生成している. | 398 現在はinterp.cからPerlスクリプトを用いて自動でCbCのCodeSegmentを生成している. |
389 今後の開発領域の拡大と共により効率的にCbCコードへの自動変換も複数のCコードに対応する様に開発を行っていく.. | 399 今後の開発領域の拡大と共により効率的にCbCコードへの自動変換も複数のCコードに対応する様に開発を行っていく. |
390 | 400 |
391 %å\subsection{MoarVMの処理流れ} | 401 %å\subsection{MoarVMの処理流れ} |
392 %MoarVMはC言語で実装されており,Perl5で記述されたConfigure.plを | 402 %MoarVMはC言語で実装されており,Perl5で記述されたConfigure.plを |
393 | 403 |
394 | 404 |