Mercurial > hg > Papers > 2019 > anatofuz-prosym
comparison Paper/anatofuz.tex @ 80:dec42afa6aaa
update
author | Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Fri, 30 Nov 2018 11:44:49 +0900 |
parents | 7aa749f9d936 |
children | 1b1089b0aef5 |
comparison
equal
deleted
inserted
replaced
79:7aa749f9d936 | 80:dec42afa6aaa |
---|---|
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 |
436 \section{MoarVMのデバッグ} | 429 \section{MoarVMのデバッグ} |
437 | 430 |
438 MoarVM自体のデバッグはMoarVMのリポジトリにテストコードが付随していない為単体では実行不可能である. | 431 MoarVM自体のデバッグはMoarVMのリポジトリにテストコードが付随していない為単体では実行不可能である. |
439 また, CbCを用いて言語処理系の改良時を行う際に, 処理系のデバッグを行う場合は, CbCを用いないオリジナルの処理系との並列デバッグが必要となる. | 432 また, CbCを用いて言語処理系の改良時を行う際に, 処理系のデバッグを行う場合は, CbCを用いないオリジナルの処理系との並列デバッグが必要となる. |
603 CodeGearがインライン展開される限界については別途研究する必要があるが, CbCを利用した場合CodeGear単位でインライン展開が可能である. | 596 CodeGearがインライン展開される限界については別途研究する必要があるが, CbCを利用した場合CodeGear単位でインライン展開が可能である. |
604 その為, ThrededCodeを実装する場合に決定した次のCodeGearをインライン展開する事が可能である. | 597 その為, ThrededCodeを実装する場合に決定した次のCodeGearをインライン展開する事が可能である. |
605 従ってThreadedCodeを実現するにあたり新たな処理系を開発する必要がなく, 既存の資源を利用してThreadedCodeが実現出来る. | 598 従ってThreadedCodeを実現するにあたり新たな処理系を開発する必要がなく, 既存の資源を利用してThreadedCodeが実現出来る. |
606 これを繰り返す事でperlccなどと比較してより高速化したThrededCodeが実現できる. | 599 これを繰り返す事でperlccなどと比較してより高速化したThrededCodeが実現できる. |
607 | 600 |
601 CbCを使わずにバイトコードディスパッチの箇所を改良する際に, 関数ポインタを利用する場合も考えられる. | |
602 この場合は, 関数ポインタの配列を作成し, 次の命令コードに対応する関数をポインタ経由で実行する. | |
603 Cの関数ポインタを利用した場合, CbCと同様に処理のモジュール化は可能である. | |
604 しかし, CbCとは違い軽量継続ではなく関数呼び出しで処理をする為, Cのスタックフレームが非常に巨大になる. | |
605 Cの関数呼び出しのコストから, 通常のcase文やラベルジャンプを利用した場合と速度差的に優位にならない. | |
606 また, ThreadedCodeの観点では, 命令列に対応した関数をThreadedCode用に大幅に修正する必要がある. | |
607 その為, CbCの様に関数そのものの並びでThreadedCodeに対応させることは出来ない. | |
608 | 608 |
609 \section{まとめ} | 609 \section{まとめ} |
610 本稿ではCbCによってPerl6の処理系であるMoarVMインタプリタの一部改良とその手法を示した. | 610 本稿ではCbCによってPerl6の処理系であるMoarVMインタプリタの一部改良とその手法を示した. |
611 CbCMoarVMではオリジナルのMoarVMと比較して以下の様な利点が見られた. | 611 CbCMoarVMではオリジナルのMoarVMと比較して以下の様な利点が見られた. |
612 | 612 |