comparison Paper/anatofuz.tex @ 15:8580ad6c50dd

tweak .tex and bib
author Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
date Tue, 06 Nov 2018 23:22:43 +0900
parents 56f4ac0231ee
children ed882dba29f6
comparison
equal deleted inserted replaced
14:56f4ac0231ee 15:8580ad6c50dd
142 RakudoがPerl6のコンパイラかつインタプリタであると考えても良い. 142 RakudoがPerl6のコンパイラかつインタプリタであると考えても良い.
143 Rakudoにおけるコンパイラとは厳密には2種類存在する. 143 Rakudoにおけるコンパイラとは厳密には2種類存在する.
144 まず第1のものがPerl6,もしくはNQPをMoarVM,JVMのバイトコードに変換するNQPコンパイラである. 144 まず第1のものがPerl6,もしくはNQPをMoarVM,JVMのバイトコードに変換するNQPコンパイラである.
145 次にそのNQPが出力したバイトコードをネイティブコードに変換するVMの2種類である. 145 次にそのNQPが出力したバイトコードをネイティブコードに変換するVMの2種類である.
146 このVMは現在MoarVM,JavaVM,Javascript,GraalVMを選択可能である. 146 このVMは現在MoarVM,JavaVM,Javascript,GraalVMを選択可能である.
147 Rakudo及びNQP projectではこのNQPコンパイラの部分をフロントエンド,VMの部分をバックエンド\cite{rani1}と呼称している.
147 NQPで主に書かれたPerl6のことをRakudoと呼ぶ. 148 NQPで主に書かれたPerl6のことをRakudoと呼ぶ.
148 Perl6はNQP以外にもPerl6独自の一種のシンタックスシュガーの様な物を持っており,これはNQPコンパイラ側で処理を行う. 149 Perl6はNQP以外にもPerl6独自の一種のシンタックスシュガーの様な物を持っており,これはNQPコンパイラ側で処理を行う.
149 150
150 \subsection{NQP} 151 \subsection{NQP}
151 152
171 前述した通りRakudo Perl6はPerl6のサブセットであるNQPを用いて記述されている. 172 前述した通りRakudo Perl6はPerl6のサブセットであるNQPを用いて記述されている.
172 従ってyaccやlexと言ったPerl5の文字解析,構文解析に利用していたプログラムは利用せず,NQP側で構文定義などを行っている. 173 従ってyaccやlexと言ったPerl5の文字解析,構文解析に利用していたプログラムは利用せず,NQP側で構文定義などを行っている.
173 NQPはNQP自身でBootstrappingされている為,Rakudo Perl6のbuild時にはNQPの実行環境として要したVM,それに基づいてbuildしたNQPがそれぞれ必要となる. 174 NQPはNQP自身でBootstrappingされている為,Rakudo Perl6のbuild時にはNQPの実行環境として要したVM,それに基づいてbuildしたNQPがそれぞれ必要となる.
174 175
175 言語的な特徴としてはPerl5とは違いアトミックに演算を行う事が可能なatom演算子や,すべてがオブジェクトであるオブジェクト指向言語としての進化も見られる. 176 言語的な特徴としてはPerl5とは違いアトミックに演算を行う事が可能なatom演算子や,すべてがオブジェクトであるオブジェクト指向言語としての進化も見られる.
177 またPerl6は漸進的型付け言語である.
178 従来のPerlの様に変数に代入する対象の型や文脈に応じて型を変更する動的型言語としての側面を持ちつつ独自に定義した型を始めとする様々な型に静的に変数の型を設定する事が可能である.
176 179
177 \subsection{現在のPerl6} 180 \subsection{現在のPerl6}
178 Perl6の言語仕様\cite{perl6design}とその時点での実装状況を纏めた公式ドキュメント\cite{perl6doc}は分離している. 181 Perl6の言語仕様\cite{perl6design}とその時点での実装状況を纏めた公式ドキュメント\cite{perl6doc}は分離している.
179 従来は言語仕様は自然言語の仕様書であったが,現在はテストスイートである「Roast\cite{roast}」そのものと定義されている. 182 従来は言語仕様は自然言語の仕様書であったが,現在はテストスイートである「Roast\cite{roast}」そのものと定義されている.
180 現在のPerl6の仕様はRoastを確認し,現在rakudo上に実装されている機能を見る場合は公式ドキュメントを確認する. 183 現在のPerl6の仕様はRoastを確認し,現在rakudo上に実装されている機能を見る場合は公式ドキュメントを確認する.
181 184
182 185
183 \section{CbCによるMoarVM} 186 \section{CbCによるMoarVM}
184 この章では改良を行ったPerl6処理系であるMoarVMについて述べる. 187 この章では改良を行ったPerl6処理系であるMoarVMについて述べる.
188 \subsection{方針}
189 MoarVMそのものをCbCで書き換えることも考えられるがMoarVM自体既に巨大なプロジェクトである為すべてを書き換える事は困難である.
190 その為まず比較的CbCで書き換えることが容易な箇所を修正する.
191 前章までに述べた通りCbCのCodeSegmentはコンパイラの基本ブロックに該当する.
192 従ってMoarVMにおける基本ブロックの箇所をCodeSegmentに書き換える事が可能である.
193 MoarVMにおける基本ブロックはインタプリタが実行するバイトコードごとの処理に該当する.
185 \subsection{CbCコンパイラによるバグ} 194 \subsection{CbCコンパイラによるバグ}
186 195
187 \section{CbCを用いる事についての評価} 196 \section{CbCを用いる事についての評価}
188 Perl6処理系はまずPerl6の豊富な文法に対応する物を作成せねばならず,類似する他のプログラミング言語処理系と比較してもより複雑となっている. 197 Perl6処理系はまずPerl6の豊富な文法に対応する物を作成せねばならず,類似する他のプログラミング言語処理系と比較してもより複雑となっている.
189 実際にPerl5を始めとしたスクリプト言語とPerl6がどのような処理時間の違いが見られるかを実測する. 198 実際にPerl5を始めとしたスクリプト言語とPerl6がどのような処理時間の違いが見られるかを実測する.