Mercurial > hg > Papers > 2019 > anatofuz-prosym
comparison Paper/anatofuz.tex @ 75:1c1307cedf11
update
author | Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Tue, 27 Nov 2018 16:12:50 +0900 |
parents | 93f1484eab1e |
children | 57547b9cbf5f |
comparison
equal
deleted
inserted
replaced
74:93f1484eab1e | 75:1c1307cedf11 |
---|---|
254 現在のPerl6が他のプログラミング言語と比較した場合どのような違いがでるのか計測した. | 254 現在のPerl6が他のプログラミング言語と比較した場合どのような違いがでるのか計測した. |
255 macOSの/var/log/system.logファイルから正規表現でログ中のプログラムが書き込んだ回数を個別に数え上げるというものである. | 255 macOSの/var/log/system.logファイルから正規表現でログ中のプログラムが書き込んだ回数を個別に数え上げるというものである. |
256 今回はファイルを231Kと3GBの二種類用意し, どの様な違いが出るのか測定した. | 256 今回はファイルを231Kと3GBの二種類用意し, どの様な違いが出るのか測定した. |
257 | 257 |
258 測定した環境は次の通りである. | 258 測定した環境は次の通りである. |
259 今回は現在広く使用されているスクリプト言語であるPython, Perl5 | 259 今回は現在広く使用されているスクリプト言語であるPerl5を計測対象に追加した. |
260 またRakudoの処理系による処理時間の差を計測する為にMoarVM, JVMに構築したPerl6の処理速度を計測を行った. | 260 またRakudoの処理系による処理時間の差を計測する為にMoarVM, JVMに構築したPerl6の処理速度を計測を行った. |
261 JVM自体の処理時間とRakudoを構築したJVMの速度の差を見るために, 同様のプログラムをJava10でも行った. | 261 JVM自体の処理時間とRakudoを構築したJVMの速度の差を見るために, 同様のプログラムをJava10でも行った. |
262 | 262 |
263 \begin{itemize} | 263 \begin{itemize} |
264 \item Perl6 (MoarVM) ver.2018.04.01 | 264 \item Perl6 (MoarVM) ver.2018.04.01 |
270 | 270 |
271 測定した結果を以下に示す.測定結果の単位は秒である. | 271 測定した結果を以下に示す.測定結果の単位は秒である. |
272 | 272 |
273 \begin{table}[htb] | 273 \begin{table}[htb] |
274 \begin{tabular}{|l|c|c|c|c|c|} \hline | 274 \begin{tabular}{|l|c|c|c|c|c|} \hline |
275 FileSize & MoarVM & Perl6 on JVM & Python3 & Java & Perl5\\ \hline | 275 FileSize & MoarVM & Perl6 on JVM & Java & Perl5\\ \hline |
276 231K & 0.86 & 21.48 & 0.06 & 0.27 & 0.04 \\ | 276 231K & 0.86 & 21.48 & 0.27 & 0.04 \\ |
277 3G & 2331.08 & 1665.56 & 101.16 & 48.85 & 41.35\\ \hline | 277 3G & 2331.08 & 1665.56 & 48.85 & 41.35\\ \hline |
278 \end{tabular} | 278 \end{tabular} |
279 \end{table} | 279 \end{table} |
280 | 280 |
281 計測結果からファイルサイズが小さい場合はMoarVMよりJVMに乗せたPerl6が低速であるが, ファイルサイズが大きい場合はJavaのJITが働くためMoarVMより高速に動いていると推測できる. | 281 計測結果からファイルサイズが小さい場合はMoarVMよりJVMに乗せたPerl6が低速であるが, ファイルサイズが大きい場合はJavaのJITが働くためMoarVMより高速に動いていると推測できる. |
282 | 282 |
423 | 423 |
424 現在CbCで記述されたOSであるGearsOSにはInterfaceが導入されている. | 424 現在CbCで記述されたOSであるGearsOSにはInterfaceが導入されている. |
425 これはJavaのinterface, Haskellの型クラスに該当する概念であり, 次のCodeGearにInterface経由で継続する事が可能である. | 425 これはJavaのinterface, Haskellの型クラスに該当する概念であり, 次のCodeGearにInterface経由で継続する事が可能である. |
426 Interfaceは現在のCbCMoarVMの実装には用いていないが, 今後ThreadedCodeの実装を行うにあたり命令コードディスパッチ箇所に導入を検討している. | 426 Interfaceは現在のCbCMoarVMの実装には用いていないが, 今後ThreadedCodeの実装を行うにあたり命令コードディスパッチ箇所に導入を検討している. |
427 | 427 |
428 \subsection{他手法との比較} | |
429 本稿ではPerl6処理系の改良としてCbCを用い, 初期の実装を行った. | |
430 CbCを用い無い場合のMoarVMの改良方法としては, 命令コードに対応する処理をCの関数として記述し, この関数のポインタを利用する方法が考えられる. | |
431 関数ポインタの配列を作成し, 次の命令コードに対応する関数をポインタ経由で実行する. | |
432 Cの関数ポインタを利用した場合, CbCと同様に処理のモジュール化は可能である. | |
433 しかし, CbCとは違い軽量継続ではなく関数呼び出しで処理をする為, Cのスタックフレームが非常に巨大になる. | |
434 Cの関数呼び出しのコストから, 通常のcase文やラベルジャンプを利用した場合と速度差的に優位にならない. | |
435 | |
428 \section{MoarVMのデバッグ} | 436 \section{MoarVMのデバッグ} |
429 | 437 |
430 MoarVM自体のデバッグはMoarVMのリポジトリにテストコードが付随していない為単体では実行不可能である. | 438 MoarVM自体のデバッグはMoarVMのリポジトリにテストコードが付随していない為単体では実行不可能である. |
431 また, CbCを用いて言語処理系の改良時を行った際に言語処理系のデバッグを行う場合は, CbCを用いないオリジナルの処理系との並列デバッグが必要となる. | 439 また, CbCを用いて言語処理系の改良時を行った際に言語処理系のデバッグを行う場合は, CbCを用いないオリジナルの処理系との並列デバッグが必要となる. |
432 MoarVM自体にはデバッグを支援するツールが存在しない為, MoarVM自体のデバッグ方法や, CbCを用いた処理系との並列デバッグについて独自の手法を利用する必要がある. | 440 MoarVM自体にはデバッグを支援するツールが存在しない為, MoarVM自体のデバッグ方法や, CbCを用いた処理系との並列デバッグについて独自の手法を利用する必要がある. |
491 従ってCbCコンパイラ自身の信頼性を向上させる事も今後の課題となっている. | 499 従ってCbCコンパイラ自身の信頼性を向上させる事も今後の課題となっている. |
492 | 500 |
493 また現在はclang上に実装したCbCコンパイラではCodeGear内部のtaill call除去のエラーが発生してしまう為コンパイルする事が出来ない. | 501 また現在はclang上に実装したCbCコンパイラではCodeGear内部のtaill call除去のエラーが発生してしまう為コンパイルする事が出来ない. |
494 その為現在はgcc上に実装したcbcコンパイラを利用しgdbを利用しデバッグを行う. | 502 その為現在はgcc上に実装したcbcコンパイラを利用しgdbを利用しデバッグを行う. |
495 | 503 |
496 \subsection{他手法との比較} | |
497 本稿ではPerl6処理系の改良としてCbCを用い, 初期の実装を行った. | |
498 CbCを用い無い場合のMoarVMの改良方法としては, 命令コードに対応する処理をCの関数として記述し, この関数のポインタを利用する方法が考えられる. | |
499 関数ポインタの配列を作成し, 次の命令コードに対応する関数をポインタ経由で実行する. | |
500 Cの関数ポインタを利用した場合, CbCと同様に処理のモジュール化は可能である. | |
501 しかし, CbCとは違い軽量継続ではなく関数呼び出しで処理をする為, Cのスタックフレームが非常に巨大になる. | |
502 Cの関数呼び出しのコストから, 通常のcase文やラベルジャンプを利用した場合と速度差的に優位にならない. | |
503 | 504 |
504 | 505 |
505 | 506 |
506 \section{CbCMoarVMの利点と欠点} | 507 \section{CbCMoarVMの利点と欠点} |
507 MoarVMの様な巨大なスクリプト言語処理系にCbCを適応した所現在までに複数の利点と欠点が発見された. | 508 MoarVMの様な巨大なスクリプト言語処理系にCbCを適応した所現在までに複数の利点と欠点が発見された. |