annotate Paper/anatofuz.tex @ 24:d8f77d0a3452

update environemt return and bib
author Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
date Thu, 08 Nov 2018 23:16:52 +0900
parents 7689b70a1a79
children 7a2d604607d8
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
2
a758898008e6 add tex and Makefile
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1 % withpage: ページ番号をつける (著者確認用)
a758898008e6 add tex and Makefile
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2 % english: 英語原稿用フォーマット
a758898008e6 add tex and Makefile
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
3 \documentclass{ipsjprosym}
a758898008e6 add tex and Makefile
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
4 %\documentclass[withpage,english]{ipsjprosym}
a758898008e6 add tex and Makefile
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
5
11
ea10413281c5 tweak Makefile and create reference.bib
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
6 \usepackage[dvipdfmx]{graphicx}
2
a758898008e6 add tex and Makefile
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
7 \usepackage{latexsym}
11
ea10413281c5 tweak Makefile and create reference.bib
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
8 \usepackage{comment}
14
56f4ac0231ee tweak tex and add bibfile
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
9 \usepackage{listings}
56f4ac0231ee tweak tex and add bibfile
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
10 \lstset{
56f4ac0231ee tweak tex and add bibfile
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
11 language=C,
56f4ac0231ee tweak tex and add bibfile
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
12 tabsize=2,
56f4ac0231ee tweak tex and add bibfile
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
13 frame=single,
56f4ac0231ee tweak tex and add bibfile
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
14 basicstyle={\ttfamily\footnotesize},%
56f4ac0231ee tweak tex and add bibfile
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
15 identifierstyle={\footnotesize},%
56f4ac0231ee tweak tex and add bibfile
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
16 commentstyle={\footnotesize\itshape},%
56f4ac0231ee tweak tex and add bibfile
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
17 keywordstyle={\footnotesize\bfseries},%
56f4ac0231ee tweak tex and add bibfile
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
18 ndkeywordstyle={\footnotesize},%
56f4ac0231ee tweak tex and add bibfile
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
19 stringstyle={\footnotesize\ttfamily},
56f4ac0231ee tweak tex and add bibfile
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
20 breaklines=true,
56f4ac0231ee tweak tex and add bibfile
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
21 captionpos=b,
56f4ac0231ee tweak tex and add bibfile
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
22 columns=[l]{fullflexible},%
56f4ac0231ee tweak tex and add bibfile
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
23 xrightmargin=0zw,%
56f4ac0231ee tweak tex and add bibfile
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
24 xleftmargin=1zw,%
56f4ac0231ee tweak tex and add bibfile
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
25 aboveskip=1zw,
56f4ac0231ee tweak tex and add bibfile
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
26 numberstyle={\scriptsize},%
56f4ac0231ee tweak tex and add bibfile
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
27 stepnumber=1,
56f4ac0231ee tweak tex and add bibfile
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
28 numbersep=0.5zw,%
56f4ac0231ee tweak tex and add bibfile
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
29 lineskip=-0.5ex,
56f4ac0231ee tweak tex and add bibfile
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
30 }
56f4ac0231ee tweak tex and add bibfile
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
31 \renewcommand{\lstlistingname}{Code}
56f4ac0231ee tweak tex and add bibfile
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
32 \usepackage{caption}
56f4ac0231ee tweak tex and add bibfile
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
33 \captionsetup[lstlisting]{font={small,tt}}
11
ea10413281c5 tweak Makefile and create reference.bib
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
34 \usepackage{url}
2
a758898008e6 add tex and Makefile
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
35 \begin{document}
a758898008e6 add tex and Makefile
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
36
a758898008e6 add tex and Makefile
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
37 % Title, Author %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
3
154c6acc0e23 add_abst
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
38 \title{CbCを用いたPerl6処理系}
154c6acc0e23 add_abst
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
39
154c6acc0e23 add_abst
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
40 %\affiliate{IPSJ}{情報処理学会}
154c6acc0e23 add_abst
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
41 \affiliate{IERYUKYU}{琉球大学工学部情報工学科}
2
a758898008e6 add tex and Makefile
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
42
3
154c6acc0e23 add_abst
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
43 \author{清水 隆博}{Takahiro SHIMIZU}{IERYUKYU}[anatofuz@cr.ie.u-ryukyu.ac.jp]
154c6acc0e23 add_abst
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
44 \author{河野 真治}{Shinji KONO}{IERYUKYU}[kono@ie.u-ryukyu.ac.jp]
2
a758898008e6 add tex and Makefile
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
45
3
154c6acc0e23 add_abst
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
46 %概要
2
a758898008e6 add tex and Makefile
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
47 \begin{abstract}
3
154c6acc0e23 add_abst
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
48 スクリプト言語であるPerl5の後継言語としてPerl6が現在開発されている.
154c6acc0e23 add_abst
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
49 Perl6は設計と実装が区分されており様々な処理系が開発されている.現在主流なPerl6はRakudoと言われるプロジェクトである.
154c6acc0e23 add_abst
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
50 RakudoではPerl6自体をNQP(NotQuitPerl)と言われるPerl6のサブセットで記述し,NQPをVMが解釈するという処理流れになっている.
154c6acc0e23 add_abst
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
51 このVMは任意のVMが選択できるようになっており,現在はMoarVM,JavaVM,Javascriptが動作環境として選択可能である.
154c6acc0e23 add_abst
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
52 主に利用されているVMにCで書かれたMoarVMが存在する.
13
80944267f9c7 tweak tex and mv footnote sites
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
53 MoarVMはJITコンパイルなどをサポートしているが,全体的な起動時間及び処理速度がPerl5と比較し非常に低速である.
24
d8f77d0a3452 update environemt return and bib
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 23
diff changeset
54 この問題を解決するためにContinuation based C (CbC)という言語を一部用いてMoarVMの書き換えを行う.
d8f77d0a3452 update environemt return and bib
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 23
diff changeset
55 本論文ではCbCを用いたMoarVMの書き換えを検討し,得られた知見について述べる.
3
154c6acc0e23 add_abst
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
56
154c6acc0e23 add_abst
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
57
2
a758898008e6 add tex and Makefile
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
58 \end{abstract}
a758898008e6 add tex and Makefile
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
59
a758898008e6 add tex and Makefile
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
60 \begin{jkeyword}
3
154c6acc0e23 add_abst
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
61 プログラミング言語, コンパイラ, CbC, Perl6, MoarVM
2
a758898008e6 add tex and Makefile
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
62 \end{jkeyword}
a758898008e6 add tex and Makefile
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
63
a758898008e6 add tex and Makefile
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
64 \maketitle
a758898008e6 add tex and Makefile
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
65
a758898008e6 add tex and Makefile
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
66 % Body %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
4
1035c41fc2db add abstract
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
67 \section{研究目的}
1035c41fc2db add abstract
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
68 現在も広く使われているスクリプト言語PerlことPerl5の後継言語としてPerl6が開発されている.
1035c41fc2db add abstract
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
69 Perl6は設計と実装が区分されており,現在広く使われている実装はRakudoと呼ばれるプロジェクトである.
1035c41fc2db add abstract
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
70 Rakudoの実装はPerl6コンパイラ開発者用のサブセットであるNQP(NotQuitPerl)で実装されているPerl6の事を指す.
1035c41fc2db add abstract
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
71 現在RakudoはNQPを解釈できる実行環境として,C言語で実装されたMoarVM,JVM,Javascript上で動作する様に開発されている.
1035c41fc2db add abstract
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
72 Rakudoとして主に使われている処理系はMoarVMであるが,MoarVMの処理時間がPerl5などの多くのスクリプト言語と比較し非常に低速である.
1035c41fc2db add abstract
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
73 その為現在日本国内ではPerl6を実務として利用するケースは概ね存在しない.
13
80944267f9c7 tweak tex and mv footnote sites
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
74 Perl6の持つ言語機能や型システムは非常に柔軟かつ強力であるため実用的な処理速度に達すれば言語の利用件数が向上することが期待される.
4
1035c41fc2db add abstract
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
75 この問題を解決するために現在当研究室で開発しているContinuation Based C(以下CbC)を用いて改良を行う.
10
9c172999d70e tweak Papers for CbC abstract
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
76 CbCはCよりさらにきめ細やかな記述が可能であるためスクリプト言語などのプログラミング言語の記述と親和性が高い事が推測される.
24
d8f77d0a3452 update environemt return and bib
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 23
diff changeset
77 本研究はCbCをスクリプト言語の実装に適応した場合,どのような利点やプログラミング上の問題点に遭遇するかCbCの応用としての側面でも行う.
10
9c172999d70e tweak Papers for CbC abstract
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
78 本稿ではまずCbC,Perl6の特徴及び現在の実装について述べ,次に改良を行うMoarVMの一連の処理流れについて述べる.
4
1035c41fc2db add abstract
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
79 そして今回改良した一部分と今後の展開について記す.
1035c41fc2db add abstract
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 3
diff changeset
80
10
9c172999d70e tweak Papers for CbC abstract
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
81 \section{CbC}
9c172999d70e tweak Papers for CbC abstract
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
82 \subsection{CbCの概要}
9c172999d70e tweak Papers for CbC abstract
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
83 CbCは当研究室で開発しているプログラミング言語である.
24
d8f77d0a3452 update environemt return and bib
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 23
diff changeset
84 Cレベルでのプログラミングを行う場合,本来プログラマが行いたい処理の他にmallocなどを利用したメモリのアロケートやエラーハンドリングなどを記述する必要がある.
d8f77d0a3452 update environemt return and bib
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 23
diff changeset
85 これらの処理をmeta computationと呼ぶ.これらmeta computationと通常の処理を分離することでバグの原因がmeta computation側にあるか処理側にあるかの分離などが可能となる.
d8f77d0a3452 update environemt return and bib
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 23
diff changeset
86 しかしC言語などを用いたプログラミングでmeta computationの分離を行おうとすると,それぞれ事細かに関数やクラスを分割せねばならず容易ではない.
14
56f4ac0231ee tweak tex and add bibfile
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
87 CbCでは関数よりmeta computationを細かく記述する為にCodeSegmentという単位を導入した.
22
fb4c1b408c9f add sample codes and tweak tex
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 21
diff changeset
88 またCodeSegmentの実行に必要なデータをDataSegmentという単位で受け渡す.
14
56f4ac0231ee tweak tex and add bibfile
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
89 CbCではCodeSegment,DetaSegmentを基本単位として記述するプログラミングスタイルを取る.
10
9c172999d70e tweak Papers for CbC abstract
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
90
14
56f4ac0231ee tweak tex and add bibfile
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
91 \subsection{CodeSegmentとDataSegment}
56f4ac0231ee tweak tex and add bibfile
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
92 CbCではCの関数の代わりにCodeSegmentを導入する.
56f4ac0231ee tweak tex and add bibfile
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
93 CodeSegmentはCの関数宣言の型名の代わりに\_\_codeと書くことで 宣言できる.
16
ed882dba29f6 add about threaded code and jlisting.sty
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
94 \_\_codeはCbCコンパイラの扱いはvoidと同じ型であるが,CbCプログラミングではCodeSegmentである事を示す識別子としての意味で利用する.
22
fb4c1b408c9f add sample codes and tweak tex
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 21
diff changeset
95 CodeSegment間の移動はgoto文によって記述する.
fb4c1b408c9f add sample codes and tweak tex
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 21
diff changeset
96 \lstinputlisting[label=cbcexample, caption=cbc\_example.cbc]{./src/cbc_example.cbc}
fb4c1b408c9f add sample codes and tweak tex
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 21
diff changeset
97 Code\ref{cbcexample}に示すCbCのコードではmain関数からcs1,cs2に遷移し,最終的にdataの値が2となる.
fb4c1b408c9f add sample codes and tweak tex
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 21
diff changeset
98 CodeSegment間の入出力の受け渡しは引数を利用する.この引数は小さなDataSegmentであると言える.
16
ed882dba29f6 add about threaded code and jlisting.sty
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
99
17
b2a795a294c4 update Moarvm bytecodes and perlcc
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
100 \subsection{軽量継続}
22
fb4c1b408c9f add sample codes and tweak tex
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 21
diff changeset
101 %TBD
fb4c1b408c9f add sample codes and tweak tex
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 21
diff changeset
102 CbCでは次のCodeSegmentに移行する際,Cのgoto文を利用する.
fb4c1b408c9f add sample codes and tweak tex
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 21
diff changeset
103 通常のCの関数呼び出しの場合,スタックポインタを操作しローカル変数などをスタックに保存する.
fb4c1b408c9f add sample codes and tweak tex
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 21
diff changeset
104 CbCの場合スタックフレームを操作せず,レジスタの値を変更せずそのまま次のCodeSegmentに遷移する事が可能である.
24
d8f77d0a3452 update environemt return and bib
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 23
diff changeset
105 通常Sechemeのcall/ccなどの継続は現在の位置までの情報を環境として所持した状態で遷移する.
d8f77d0a3452 update environemt return and bib
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 23
diff changeset
106 対してCbCは環境を持たず遷移する為,通常の継続と比較して軽量であることから軽量継続であると言える.
22
fb4c1b408c9f add sample codes and tweak tex
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 21
diff changeset
107 CbCは軽量継続を利用するためレジスタレベルでのきめ細やかな実装が可能となっている.
10
9c172999d70e tweak Papers for CbC abstract
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
108
9c172999d70e tweak Papers for CbC abstract
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
109 \subsection{現在の実装}
9c172999d70e tweak Papers for CbC abstract
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
110 CbCは現在主要なCコンパイラであるgcc及びllvmをバックエンドとしたclang上の2種類の実装が存在する.
13
80944267f9c7 tweak tex and mv footnote sites
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
111 gccはバージョン9.0.0に,clangは7.0.0に対応している.
14
56f4ac0231ee tweak tex and add bibfile
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
112
56f4ac0231ee tweak tex and add bibfile
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
113 \subsection{CbCコンパイラのバグ}
17
b2a795a294c4 update Moarvm bytecodes and perlcc
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
114 % 局所変数のポインタを握ったままgotoするとtail callにならない
b2a795a294c4 update Moarvm bytecodes and perlcc
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
115 CbCコンパイラは現在も開発中であり幾つかのバグが発見されている.
b2a795a294c4 update Moarvm bytecodes and perlcc
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
116 まずCodeSegment内で宣言した局所変数のポインタを別の変数などで確保した状態でgotoしてしまうとtail call最適化が切られる.
b2a795a294c4 update Moarvm bytecodes and perlcc
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
117 これはただの関数呼び出しになってしまう為,直接的な被害はないもののCbCとしての利点が損なわれてしまう.
b2a795a294c4 update Moarvm bytecodes and perlcc
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
118 また本来は操作しないはずのスタック領域の操作が入ってしまうため,プログラマの意図と反したスタックポインタなのど操作が行われてしまいバグが発生する可能性が存在する.
b2a795a294c4 update Moarvm bytecodes and perlcc
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
119
10
9c172999d70e tweak Papers for CbC abstract
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
120 \subsection{CbCとCの互換性}
16
ed882dba29f6 add about threaded code and jlisting.sty
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
121 CbCコンパイラは内部的に与えられているソースコードがCbCであるかどうかを判断する.
ed882dba29f6 add about threaded code and jlisting.sty
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
122 この際にCodeSegmentを利用していない場合は通常のCプログラムとして動作する.
24
d8f77d0a3452 update environemt return and bib
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 23
diff changeset
123 その為今回検証するMoarVMのビルドにおいてもCbCで書き換えたソースコードがあるMoarVMと,手を加えていないオリジナルのMoarVMの2種類を同一のCbCコンパイラでビルドする事が可能である.
d8f77d0a3452 update environemt return and bib
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 23
diff changeset
124
d8f77d0a3452 update environemt return and bib
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 23
diff changeset
125 またCからCbCへの遷移時に,再びCの関数に戻るように実装したい場合がある.
d8f77d0a3452 update environemt return and bib
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 23
diff changeset
126 その際は環境付きgotoと呼ばれる手法を取る.これは\_CbC\_return及び\_CbC\_environmentという変数を渡す.
d8f77d0a3452 update environemt return and bib
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 23
diff changeset
127 この変数は\_CbC\_returnが元の環境に戻る際に利用するCodeSegmentを指し,\_CbC\_environmentは復帰時に戻す元の環境である.
d8f77d0a3452 update environemt return and bib
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 23
diff changeset
128 復帰する場合,呼び出した位置には帰らず,呼び出した関数の終了する位置に帰る.
d8f77d0a3452 update environemt return and bib
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 23
diff changeset
129 \lstinputlisting[label=cbcreturn, caption=環境付き継続の例]{./src/return.cbc}
d8f77d0a3452 update environemt return and bib
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 23
diff changeset
130 Code\ref{cbcreturn}に示す例ではc\_funcから環境付き継続でがcsに継続している.
d8f77d0a3452 update environemt return and bib
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 23
diff changeset
131 通常c\_funcの返り値は-1であるが,csから環境付き継続でmainに帰る為にcsから渡される1がtestの値となる.
10
9c172999d70e tweak Papers for CbC abstract
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
132
9
8e80522a88bd tweek mindmap and wrote table of contents for Paper
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
133
14
56f4ac0231ee tweak tex and add bibfile
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
134 \subsection{言語処理系におけるCbCの応用}
56f4ac0231ee tweak tex and add bibfile
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
135 CbCを言語処理系,特にスクリプト言語に応用すると幾つかの箇所に置いて利点があると推測される.
56f4ac0231ee tweak tex and add bibfile
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
136 CbCにおけるCSはコンパイラの基本ブロックに相当する.
17
b2a795a294c4 update Moarvm bytecodes and perlcc
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
137 その為従来のスクリプト言語では主にcase文で記述していた命令コードディスパッチの箇所をCodeSegmentの遷移として記述する事が可能である.
b2a795a294c4 update Moarvm bytecodes and perlcc
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
138 CbCは状態を単位として記述が可能であるため,命令コードなどにおける状態を利用するスクリプト言語の実装は応用例として適していると考えられる.
14
56f4ac0231ee tweak tex and add bibfile
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
139
9
8e80522a88bd tweek mindmap and wrote table of contents for Paper
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
140 \section{Perl6の概要}
5
06f3183ef6c3 add about Perl6
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
141 この章では現在までのPerl6の遍歴及びPerl6の言語的な特徴について記載する.
9
8e80522a88bd tweek mindmap and wrote table of contents for Paper
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
142 \subsection{Perl6の構想と初期の処理系}
8e80522a88bd tweek mindmap and wrote table of contents for Paper
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
143 Perl6は2002年にLarryWallがPerlを置き換える言語として設計を開始した.
8e80522a88bd tweek mindmap and wrote table of contents for Paper
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
144 Perl5の言語的な問題点であるオブジェクト指向機能の強力なサポートなどを取り入れた言語として設計された.
5
06f3183ef6c3 add about Perl6
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
145 Perl5は設計と実装が同一であり,Larryらによって書かれたC実装のみだった.Perl6は設計と実装が分離しており様々な処理系が開発されきた.
13
80944267f9c7 tweak tex and mv footnote sites
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
146 まず2005年に唐鳳によってHaskellで実装されたPugs\cite{pugs}が登場した.
5
06f3183ef6c3 add about Perl6
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
147 Pugsは最初に登場したPerl6実装であり,この実装を基にしてPerl6の仕様も修正された.
6
6dcf1143dc8f add about NQP
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
148 現在Pugsは歴史的な実装となっており,更新はされていない.
9
8e80522a88bd tweek mindmap and wrote table of contents for Paper
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
149
8e80522a88bd tweek mindmap and wrote table of contents for Paper
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
150 \subsection{Parrot}
13
80944267f9c7 tweak tex and mv footnote sites
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
151 その後Pythonとの共同動作環境としてParrot\cite{parrot}が実装された.
9
8e80522a88bd tweek mindmap and wrote table of contents for Paper
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
152 ParrotはPASMと呼ばれるバイトコードを解釈可能なレジスタマシンである.
5
06f3183ef6c3 add about Perl6
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
153 ParrotでのPerl6の実装はNQP(NotQuitPerl)と呼ばれるPerl6のサブセットでPerl6を記述するというアイディアの基実装された.
9
8e80522a88bd tweek mindmap and wrote table of contents for Paper
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
154 ParrotVMは2006年のversion8.1.0が最後のリリースである.
8e80522a88bd tweek mindmap and wrote table of contents for Paper
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
155 こちらもPugsと同様に現在のPerl6プロジェクトでは歴史的な実装とされている.
5
06f3183ef6c3 add about Perl6
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
156 現在主に使用されている実装であるRakudoは2010年にRakudo-Starという一連のツール郡としてリリースされた.
9
8e80522a88bd tweek mindmap and wrote table of contents for Paper
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
157
8e80522a88bd tweek mindmap and wrote table of contents for Paper
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
158 Perl6は言語仕様及び処理実装がPerl5と大幅に異なっており,言語的な互換性が存在しない.
8e80522a88bd tweek mindmap and wrote table of contents for Paper
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
159 従って現在ではPerl6とPerl5は別言語としての開発方針になっている.
22
fb4c1b408c9f add sample codes and tweak tex
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 21
diff changeset
160 Perl6は現在有力な処理系であるRakudoから名前を取りRakuという別名がつけられている.
5
06f3183ef6c3 add about Perl6
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
161
06f3183ef6c3 add about Perl6
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
162 \subsection{Rakudo}
06f3183ef6c3 add about Perl6
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
163
6
6dcf1143dc8f add about NQP
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
164 RakudoとはParrotで構想に上がったNQP,NQPに基づくPerl6を基にしたプロジェクトである.
6dcf1143dc8f add about NQP
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
165 RakudoがPerl6のコンパイラかつインタプリタであると考えても良い.
22
fb4c1b408c9f add sample codes and tweak tex
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 21
diff changeset
166 Rakudoは図\ref{fig:perl6construction}に示す構成になっている.
14
56f4ac0231ee tweak tex and add bibfile
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
167 Rakudoにおけるコンパイラとは厳密には2種類存在する.
56f4ac0231ee tweak tex and add bibfile
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
168 まず第1のものがPerl6,もしくはNQPをMoarVM,JVMのバイトコードに変換するNQPコンパイラである.
56f4ac0231ee tweak tex and add bibfile
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
169 次にそのNQPが出力したバイトコードをネイティブコードに変換するVMの2種類である.
24
d8f77d0a3452 update environemt return and bib
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 23
diff changeset
170 このVMは現在MoarVM,JavaVM,Javascriptを選択可能である.
15
8580ad6c50dd tweak .tex and bib
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 14
diff changeset
171 Rakudo及びNQP projectではこのNQPコンパイラの部分をフロントエンド,VMの部分をバックエンド\cite{rani1}と呼称している.
14
56f4ac0231ee tweak tex and add bibfile
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
172 NQPで主に書かれたPerl6のことをRakudoと呼ぶ.
56f4ac0231ee tweak tex and add bibfile
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
173 Perl6はNQP以外にもPerl6独自の一種のシンタックスシュガーの様な物を持っており,これはNQPコンパイラ側で処理を行う.
6
6dcf1143dc8f add about NQP
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
174
22
fb4c1b408c9f add sample codes and tweak tex
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 21
diff changeset
175 \begin{figure}[ht]
fb4c1b408c9f add sample codes and tweak tex
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 21
diff changeset
176 \begin{center}
fb4c1b408c9f add sample codes and tweak tex
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 21
diff changeset
177 \includegraphics[width=70mm]{fig/perl6nqp.pdf}
fb4c1b408c9f add sample codes and tweak tex
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 21
diff changeset
178 \end{center}
fb4c1b408c9f add sample codes and tweak tex
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 21
diff changeset
179 \caption{Perl6の構成}
fb4c1b408c9f add sample codes and tweak tex
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 21
diff changeset
180 \label{fig:perl6construction}
fb4c1b408c9f add sample codes and tweak tex
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 21
diff changeset
181 \end{figure}
fb4c1b408c9f add sample codes and tweak tex
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 21
diff changeset
182
6
6dcf1143dc8f add about NQP
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
183 \subsection{NQP}
14
56f4ac0231ee tweak tex and add bibfile
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 13
diff changeset
184
13
80944267f9c7 tweak tex and mv footnote sites
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
185 RakudoにおけるNQP\cite{nqp}は現在MoarVM,JVM上で動作し,MoarVMを一部利用することでNodeJSからも動作させる事が可能である.
6
6dcf1143dc8f add about NQP
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
186 NQPはPerl6のサブセットであるため主な文法などはPerl6に準拠しているが幾つか異なる点が存在する.
24
d8f77d0a3452 update environemt return and bib
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 23
diff changeset
187 NQPは最終的にはNQP自身でブートストラップする言語であるが,ビルドの最初にはすでに書かれたMoarvMByteCodeを必要とする.
d8f77d0a3452 update environemt return and bib
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 23
diff changeset
188 このMoarVM~yteCodeの状態をStage0と言い,ディレクトリ名として設定されている.
17
b2a795a294c4 update Moarvm bytecodes and perlcc
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
189 Perl6の一部はNQPを拡張したもので書かれている為,Rakudoを動作させる為にはMoarVMなどのVM,VMに対応させる様にビルドしたNQPがそれぞれ必要となる.
23
7689b70a1a79 create stagenqp.pdf and tweak tex
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 22
diff changeset
190 現在のNQPではMoarVM,JVMに対応するStage0はそれぞれMoarVMBytecode,jarファイルが用意されており,Javascriptではバイトコードの代わりにランタイム独自のModuleLoaderなどが設計されている.
7689b70a1a79 create stagenqp.pdf and tweak tex
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 22
diff changeset
191 MoarVMのModuleLoaderはStage0あるMoarVMBytecodeで書かれた一連のファイルが該当する.
9
8e80522a88bd tweek mindmap and wrote table of contents for Paper
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
192
23
7689b70a1a79 create stagenqp.pdf and tweak tex
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 22
diff changeset
193 NQPのビルドフローは図\ref{fig:nqpbuild}に示す.
17
b2a795a294c4 update Moarvm bytecodes and perlcc
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
194 Stage0にあるファイルをmoarvmに与えることでnqpのインタプリタが実行される様になっている.
b2a795a294c4 update Moarvm bytecodes and perlcc
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
195 これはStage0の一連のファイルはmoarvm bytecodeなどで記述されたNQPコンパイラのモジュールである為である.
23
7689b70a1a79 create stagenqp.pdf and tweak tex
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 22
diff changeset
196 NQPは6modelと呼ばれるオブジェクトモデルを採用としているが,これを構築する為に必要なNQPCORE,正規表現系のQRegex,MoarVMのModuleLoaderなどがMoarVMBytecodeで記述されている.これらMoarVMBytecodeの拡張子は.moarvmである.
10
9c172999d70e tweak Papers for CbC abstract
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
197 MoarVMに対してStage0のディレクトリにライブラリパスを設定し,nqp.moarvmを実行させることでnqpの対話型環境が起動する.
9
8e80522a88bd tweek mindmap and wrote table of contents for Paper
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
198
10
9c172999d70e tweak Papers for CbC abstract
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
199 実際にperl6を動かすためにはself buildしたNQPコンパイラが必要となる.その為にstage0を利用してStage1をビルドしNQPコンパイラを作成する.
23
7689b70a1a79 create stagenqp.pdf and tweak tex
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 22
diff changeset
200 Stage1は中間的な出力であり,生成されたNQPファイルはStage2と同一であるが,MoarVMBytecodeが異なる.
7689b70a1a79 create stagenqp.pdf and tweak tex
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 22
diff changeset
201 Perl6では完全なセルフコンパイルを実行したNQPが要求される為,Stage1を利用してもう一度ビルドを行いStage2を作成する.
6
6dcf1143dc8f add about NQP
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
202
24
d8f77d0a3452 update environemt return and bib
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 23
diff changeset
203 Perl6のテストスイートである「Roast\cite{roast}」やドキュメントなどによって設計が定まっているPerl6とは異なりNQP自身の設計は今後も変更になる可能性が開発者から公表されている.
22
fb4c1b408c9f add sample codes and tweak tex
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 21
diff changeset
204 現在の公表されているNQPのオペコードはNQPのリポジトリ\cite{nqpopcode}に記述されているものである.
5
06f3183ef6c3 add about Perl6
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
205
23
7689b70a1a79 create stagenqp.pdf and tweak tex
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 22
diff changeset
206 \begin{figure}[ht]
7689b70a1a79 create stagenqp.pdf and tweak tex
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 22
diff changeset
207 \begin{center}
7689b70a1a79 create stagenqp.pdf and tweak tex
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 22
diff changeset
208 \includegraphics[width=70mm]{fig/stagenqp.pdf}
7689b70a1a79 create stagenqp.pdf and tweak tex
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 22
diff changeset
209 \end{center}
7689b70a1a79 create stagenqp.pdf and tweak tex
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 22
diff changeset
210 \caption{NQPのビルドフロー}
7689b70a1a79 create stagenqp.pdf and tweak tex
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 22
diff changeset
211 \label{fig:nqpbuild}
7689b70a1a79 create stagenqp.pdf and tweak tex
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 22
diff changeset
212 \end{figure}
5
06f3183ef6c3 add about Perl6
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
213
9
8e80522a88bd tweek mindmap and wrote table of contents for Paper
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
214 \subsection{Rakudo Perl6}
8e80522a88bd tweek mindmap and wrote table of contents for Paper
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
215 Rakudo実装上におけるPerl6はRakudo Perl6と呼ばれているGitリポジトリで管理されているプログラムのことである.
8e80522a88bd tweek mindmap and wrote table of contents for Paper
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
216 前述した通りRakudo Perl6はPerl6のサブセットであるNQPを用いて記述されている.
8e80522a88bd tweek mindmap and wrote table of contents for Paper
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
217 従ってyaccやlexと言ったPerl5の文字解析,構文解析に利用していたプログラムは利用せず,NQP側で構文定義などを行っている.
8e80522a88bd tweek mindmap and wrote table of contents for Paper
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
218 NQPはNQP自身でBootstrappingされている為,Rakudo Perl6のbuild時にはNQPの実行環境として要したVM,それに基づいてbuildしたNQPがそれぞれ必要となる.
8e80522a88bd tweek mindmap and wrote table of contents for Paper
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
219
17
b2a795a294c4 update Moarvm bytecodes and perlcc
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
220 言語的な特徴としてはPerl5とは違いアトミックに演算を行う事が可能な絵文字で実装されたatom演算子や,すべてがオブジェクトであるオブジェクト指向言語としての進化も見られる.
15
8580ad6c50dd tweak .tex and bib
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 14
diff changeset
221 またPerl6は漸進的型付け言語である.
8580ad6c50dd tweak .tex and bib
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 14
diff changeset
222 従来のPerlの様に変数に代入する対象の型や文脈に応じて型を変更する動的型言語としての側面を持ちつつ独自に定義した型を始めとする様々な型に静的に変数の型を設定する事が可能である.
6
6dcf1143dc8f add about NQP
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
223
21
5ba21dfc6e0c add fig Perl6 construction
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 20
diff changeset
224
13
80944267f9c7 tweak tex and mv footnote sites
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
225 \subsection{現在のPerl6}
80944267f9c7 tweak tex and mv footnote sites
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
226 Perl6の言語仕様\cite{perl6design}とその時点での実装状況を纏めた公式ドキュメント\cite{perl6doc}は分離している.
80944267f9c7 tweak tex and mv footnote sites
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
227 従来は言語仕様は自然言語の仕様書であったが,現在はテストスイートである「Roast\cite{roast}」そのものと定義されている.
17
b2a795a294c4 update Moarvm bytecodes and perlcc
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
228 現在のPerl6の仕様を読む場合Roastを確認し,現在rakudo上に実装されている機能を見る場合は公式ドキュメントを確認する必要がある.
6
6dcf1143dc8f add about NQP
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
229
9
8e80522a88bd tweek mindmap and wrote table of contents for Paper
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
230
10
9c172999d70e tweak Papers for CbC abstract
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
231 \section{CbCによるMoarVM}
13
80944267f9c7 tweak tex and mv footnote sites
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
232 この章では改良を行ったPerl6処理系であるMoarVMについて述べる.
15
8580ad6c50dd tweak .tex and bib
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 14
diff changeset
233 \subsection{方針}
8580ad6c50dd tweak .tex and bib
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 14
diff changeset
234 MoarVMそのものをCbCで書き換えることも考えられるがMoarVM自体既に巨大なプロジェクトである為すべてを書き換える事は困難である.
8580ad6c50dd tweak .tex and bib
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 14
diff changeset
235 その為まず比較的CbCで書き換えることが容易な箇所を修正する.
8580ad6c50dd tweak .tex and bib
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 14
diff changeset
236 前章までに述べた通りCbCのCodeSegmentはコンパイラの基本ブロックに該当する.
8580ad6c50dd tweak .tex and bib
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 14
diff changeset
237 従ってMoarVMにおける基本ブロックの箇所をCodeSegmentに書き換える事が可能である.
8580ad6c50dd tweak .tex and bib
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 14
diff changeset
238 MoarVMにおける基本ブロックはインタプリタが実行するバイトコードごとの処理に該当する.
17
b2a795a294c4 update Moarvm bytecodes and perlcc
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
239
b2a795a294c4 update Moarvm bytecodes and perlcc
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
240 \subsection{MoarByteCodeのディスパッチ}
b2a795a294c4 update Moarvm bytecodes and perlcc
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
241 MoarVMのバイトコードインタプリタはsrc/core/interp.cで定義されている.
b2a795a294c4 update Moarvm bytecodes and perlcc
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
242 この中の関数MVM\_interp\_runで命令に応じた処理を実行する.
b2a795a294c4 update Moarvm bytecodes and perlcc
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
243 関数内では命令列が保存されているcur\_op,現在と次の命令を指し示すop,Threadの環境が保存されているThreadcontextなどの変数を利用する.
22
fb4c1b408c9f add sample codes and tweak tex
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 21
diff changeset
244 命令実行は大きく二種類の動作があり,Code\ref{orig_macro}に示すCのgotoが利用できる場合はMVM\_CGOTOフラグが立ちラベル遷移を利用する.
17
b2a795a294c4 update Moarvm bytecodes and perlcc
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
245 それ以外の場合は巨大なcase文として命令を実行する.
b2a795a294c4 update Moarvm bytecodes and perlcc
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
246
b2a795a294c4 update Moarvm bytecodes and perlcc
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
247 ラベル遷移を利用する場合はラベルテーブルにアクセスし,テーブルに登録されているアドレスを取得し,NEXTで遷移する.
b2a795a294c4 update Moarvm bytecodes and perlcc
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
248 このラベルテーブルの中身はラベルが変換されたアドレスであるため,Cレベルでのデバッグ時にはアドレスと実際に呼ばれる箇所を確認する事に手間がかかる.
b2a795a294c4 update Moarvm bytecodes and perlcc
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
249 巨大なcase文として実行された場合,実行時間が遅いだけでなく,ラベル遷移と共存させて記述を行っている為Cのソースコードにおける可読性も低下する.
b2a795a294c4 update Moarvm bytecodes and perlcc
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
250
20
2bf64cfb91b1 add CbC evaluation and CbCinterp fig
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
251 CbCMoarVMではこの問題を解決するために,それぞれの命令に対応するCodeSegmentを作成し,CodeSegment名前を要素として持つCbCのCodeSegmentのテーブルを作成した.
22
fb4c1b408c9f add sample codes and tweak tex
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 21
diff changeset
252 \lstinputlisting[label=orig_macro, caption=interp.cのマクロ部分]{./src/orig_macro.c}
fb4c1b408c9f add sample codes and tweak tex
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 21
diff changeset
253
17
b2a795a294c4 update Moarvm bytecodes and perlcc
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
254
b2a795a294c4 update Moarvm bytecodes and perlcc
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
255 \subsection{命令実行箇所のCodeSegmentへの変換}
b2a795a294c4 update Moarvm bytecodes and perlcc
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
256 ラベルテーブルやcase文のswitch相当の命令実行箇所をCbCに変換し,CodeSegmentの遷移として利用する.
22
fb4c1b408c9f add sample codes and tweak tex
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 21
diff changeset
257 interp.cはCode\ref{dispatch_c}に示すスタイルで記述されている.
fb4c1b408c9f add sample codes and tweak tex
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 21
diff changeset
258 \lstinputlisting[label=dispatch_c, caption=オリジナル版MoarVMのバイトコードディスパッチ]{./src/dispatch.c}
fb4c1b408c9f add sample codes and tweak tex
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 21
diff changeset
259
fb4c1b408c9f add sample codes and tweak tex
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 21
diff changeset
260
17
b2a795a294c4 update Moarvm bytecodes and perlcc
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
261 OP(.*)の.*に該当する箇所はバイトコードの名前である.通常このブロックにはLABELから遷移する為,バイトコードの名前はLABELSの配列の添字に変換されている.
b2a795a294c4 update Moarvm bytecodes and perlcc
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
262 そのため対象となるCodeSegmentをLABLESの並びと対応させ,配列CODESに設定すればCodeSegmentの名前は問わない.
b2a795a294c4 update Moarvm bytecodes and perlcc
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
263 今回はCodeSegmentである事を示す為にsuffixとしてcbc\_をつける.
b2a795a294c4 update Moarvm bytecodes and perlcc
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
264
22
fb4c1b408c9f add sample codes and tweak tex
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 21
diff changeset
265 命令実行中のCodeSegmentの遷移を図\ref{fig:perl6cbcinter}に示す.
fb4c1b408c9f add sample codes and tweak tex
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 21
diff changeset
266 この中で実線で書かれている部分はCbCのgoto文で遷移し,波線の箇所は通常のCの関数呼び出しとなっている.
fb4c1b408c9f add sample codes and tweak tex
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 21
diff changeset
267
fb4c1b408c9f add sample codes and tweak tex
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 21
diff changeset
268 %現在のCbCMoarVMは次の命令セットのディスパッチをcbc\_nextというCodeSegmentで処理している.
fb4c1b408c9f add sample codes and tweak tex
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 21
diff changeset
269 %これは元のMoarVMの命令ディスパッチで行われる現在のオペコードを示すcur\_opと命令列opの操作及び次のラベルに遷移するマクロに該当する.
fb4c1b408c9f add sample codes and tweak tex
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 21
diff changeset
270 %CbCMoarVMではラベルに対しての遷移の代わりにMoarVMの命令のCodeSegmentの集合体である配列CODESにアクセスし,その要素であるCodeSegmentに対して遷移する形を取っている.
fb4c1b408c9f add sample codes and tweak tex
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 21
diff changeset
271
20
2bf64cfb91b1 add CbC evaluation and CbCinterp fig
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
272 \begin{figure}[ht]
2bf64cfb91b1 add CbC evaluation and CbCinterp fig
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
273 \begin{center}
2bf64cfb91b1 add CbC evaluation and CbCinterp fig
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
274 \includegraphics[width=70mm]{fig/cbc_next.pdf}
2bf64cfb91b1 add CbC evaluation and CbCinterp fig
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
275 \end{center}
2bf64cfb91b1 add CbC evaluation and CbCinterp fig
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
276 \caption{CbCにおけるインタプリタの関数遷移}
22
fb4c1b408c9f add sample codes and tweak tex
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 21
diff changeset
277 \label{fig:perl6cbcinter}
20
2bf64cfb91b1 add CbC evaluation and CbCinterp fig
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
278 \end{figure}
2bf64cfb91b1 add CbC evaluation and CbCinterp fig
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
279
22
fb4c1b408c9f add sample codes and tweak tex
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 21
diff changeset
280 現在CbCで記述されたOSであるGearsOSにはInterfaceが導入されている.
fb4c1b408c9f add sample codes and tweak tex
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 21
diff changeset
281 これはJavaのinterface,Haskellの型クラスに該当する概念であり,次のCodeSegmentにInterface経由で継続する事が可能である.
fb4c1b408c9f add sample codes and tweak tex
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 21
diff changeset
282 Interfaceは現在のMoarVMには実装されていない為,今後ThreadeCodeの実装を行うにあたり導入を検討している.
20
2bf64cfb91b1 add CbC evaluation and CbCinterp fig
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
283
17
b2a795a294c4 update Moarvm bytecodes and perlcc
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
284 \subsection{MoarVMのBytecodeのデバッグ}
b2a795a294c4 update Moarvm bytecodes and perlcc
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
285 moarに対してmoarvm bytecodeをdumpオプションを付けて読み込ませるとmoarvmのbytecodeがアセンブラの様に出力される.
b2a795a294c4 update Moarvm bytecodes and perlcc
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
286 しかしこれはmoarvmが実行したbytecodeのトレースではなくmoarvm bytecodeを変換したものに過ぎない.
b2a795a294c4 update Moarvm bytecodes and perlcc
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
287 また,明らかに異なる挙動を示す両者のmoarを利用しても同じ結果が返ってきてしまう.
b2a795a294c4 update Moarvm bytecodes and perlcc
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
288 そのため今回のMoarVMBytecodeインタプリタの実装のデバッグにはこの方法は適さない.
b2a795a294c4 update Moarvm bytecodes and perlcc
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
289 従って実際に実行した命令を確認するにはgdbなどのCデバッガを利用してMoarVMを直接トレースする必要がある.
20
2bf64cfb91b1 add CbC evaluation and CbCinterp fig
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
290 \lstinputlisting[label=debug_origmoar, caption=オリジナル版MoarVMのバイトコードのトレース]{./src/origin_breakpoint.txt}
2bf64cfb91b1 add CbC evaluation and CbCinterp fig
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
291
17
b2a795a294c4 update Moarvm bytecodes and perlcc
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
292
b2a795a294c4 update Moarvm bytecodes and perlcc
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
293 \subsection{MoarVMの並列デバッグ手法}
b2a795a294c4 update Moarvm bytecodes and perlcc
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
294 しかしMoarVMが実行する命令は膨大な数がある.
b2a795a294c4 update Moarvm bytecodes and perlcc
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
295 その為gdbでMoarVMをCbCとオリジナル版での並列デバッグを人間が同時に行うことは困難である.
b2a795a294c4 update Moarvm bytecodes and perlcc
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
296 Perlなどのスクリプトを用いて自動的に解析したいため,ログを残す為にscriptコマンドを実行した状態でgdbを起動する.
b2a795a294c4 update Moarvm bytecodes and perlcc
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
297 CbC側はcbc\_nextにbreak pointを設定し,オリジナル側は次のオペコードの設定のマクロにダミーの関数を呼び出すように修正し,そこにbreak pointを設定する.
b2a795a294c4 update Moarvm bytecodes and perlcc
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
298 CbC側ではCodeSegmentの名前を直接確認できるが,オリジナル版はLABLEの配列の添え字から自分でどのオペコードに対応しているかを探す必要がある.
b2a795a294c4 update Moarvm bytecodes and perlcc
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
299 CbCとオリジナルのCODES,LABELの添字は対応している為,ログの解析を行う際はそれぞれの添字を抽出し違いが発生している箇所を探索する.
19
3e4ffa621ae9 add after work
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
300 違いが生じている箇所が発見できた場合,その前後のCodeSegment及びディスパッチ部分にbreak pointをかけ,それぞれの変数の挙動を比較する.
3e4ffa621ae9 add after work
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
301 主にcbc\_return系の命令が実行されている場合は,その直前で命令を切り替えるcbc\_invoke系統の命令が呼ばれているが,この周辺で何かしらの違いが発生している可能性が高い.
24
d8f77d0a3452 update environemt return and bib
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 23
diff changeset
302 またCbCコンパイラのバグが生じている可能性もある為,アセンブラレベルの命令を確認しながらデバッグを進めることとなる.
19
3e4ffa621ae9 add after work
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
303
17
b2a795a294c4 update Moarvm bytecodes and perlcc
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
304
b2a795a294c4 update Moarvm bytecodes and perlcc
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
305
10
9c172999d70e tweak Papers for CbC abstract
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
306 \subsection{CbCコンパイラによるバグ}
17
b2a795a294c4 update Moarvm bytecodes and perlcc
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
307 現在までのCbCは複数個の入出力をCodeSegmentに与えるユースケースで利用していた.
b2a795a294c4 update Moarvm bytecodes and perlcc
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
308 CbCコンパイラ自身はそれぞれ用意したテストスイートを通化するものの,MoarVMの様な巨大なプロジェクトのCSをコンパイルを実行する場合,予期せぬバグが発生した.
b2a795a294c4 update Moarvm bytecodes and perlcc
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
309 主にCS間のgotoにおけるtail callフラグの除去や,DSとして渡している構造体の変数のアドレスがスタックポインタの値より上位に来てしまい,通常のCの関数をcallした際にローカル変数の領域がDSのアドレスの周辺を利用してしまう.
b2a795a294c4 update Moarvm bytecodes and perlcc
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
310 その為DSの構造体の値が書き換わり,CからDSにreturnした際にDSの構造体が破壊されるバグである.
19
3e4ffa621ae9 add after work
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
311 このバグは先程の並列デバッグを行いながらプログラムカウンタや変数の動きをトレースする事などで発見することが出来る.
17
b2a795a294c4 update Moarvm bytecodes and perlcc
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
312 現状ではCbCコンパイラがプログラマの意図と反する挙動を取るためCbCコンパイラのバグを回避するプログラミングが要求されている.
b2a795a294c4 update Moarvm bytecodes and perlcc
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
313 本来コンパイラ側のバグを回避するプログラミングをプログラマに要求するスタイルは好ましくない.
b2a795a294c4 update Moarvm bytecodes and perlcc
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
314 従ってCbCコンパイラ自身の信頼性を向上させる事も今後の課題となっている.
6
6dcf1143dc8f add about NQP
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
315
16
ed882dba29f6 add about threaded code and jlisting.sty
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
316 \subsection{Threaded Code}
ed882dba29f6 add about threaded code and jlisting.sty
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
317 CbCはCodeSegmentで末尾最適化(Tail call optimization)を行う.
ed882dba29f6 add about threaded code and jlisting.sty
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
318 これはCodeSegmentは必ず関数呼び出しではなくgotoで次の状態に遷移する為にスタック領域の操作が必要とならない為である.
ed882dba29f6 add about threaded code and jlisting.sty
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
319 現在のCbCコンパイラの実装ではCodeSegmentからCの関数に戻る場合は末尾最適化を切り,CodeSegment間の遷移では末尾最適化が行われる.
ed882dba29f6 add about threaded code and jlisting.sty
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
320 末尾最適化を応用することでContinuation-passingスタイルのThreaded Codeの実装が可能となる.\cite{threadedcode}
24
d8f77d0a3452 update environemt return and bib
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 23
diff changeset
321 またCodeSegment自体を直接次の遷移先として設定することも可能であるため,CbCならThrededCodeを実装するアプローチが複数検討出来る.
16
ed882dba29f6 add about threaded code and jlisting.sty
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
322
22
fb4c1b408c9f add sample codes and tweak tex
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 21
diff changeset
323 %現在のCbCMoarVMは次の命令セットのディスパッチをcbc\_nextというCodeSegmentで処理している.
fb4c1b408c9f add sample codes and tweak tex
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 21
diff changeset
324 %これは元のMoarVMの命令ディスパッチで行われる現在のオペコードを示すcur\_opと命令列opの操作及び次のラベルに遷移するマクロに該当する.
fb4c1b408c9f add sample codes and tweak tex
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 21
diff changeset
325 %CbCMoarVMではラベルに対しての遷移の代わりにMoarVMの命令のCodeSegmentの集合体である配列CODESにアクセスし,その要素であるCodeSegmentに対して遷移する形を取っている.
16
ed882dba29f6 add about threaded code and jlisting.sty
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
326 この一連の処理がオーバーヘッドになる為,今後はcbc\_fixt\_nextというCodeSegmentを導入し直接次の命令に該当するCodeSegmentへgotoする様に実装する予定である.
ed882dba29f6 add about threaded code and jlisting.sty
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
327
17
b2a795a294c4 update Moarvm bytecodes and perlcc
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
328 \subsubsection{perlcc}
b2a795a294c4 update Moarvm bytecodes and perlcc
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
329 Perl5においてはperlccというモジュールが開発されている.
b2a795a294c4 update Moarvm bytecodes and perlcc
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
330 これはPerl5内部で利用しているPerlバイトコードを,PerlのC APIであるXS言語の様なCのソースファイルに埋め込み,それをCコンパイルでコンパイルするというものである.
b2a795a294c4 update Moarvm bytecodes and perlcc
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
331 perlccを利用することでPerlインタプリタが無い状況でも可動するバイナリファイルを作成する事が可能である.
b2a795a294c4 update Moarvm bytecodes and perlcc
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
332 しかしPerlccはPerlスクリプトが複雑になるほど正確にCに移植を行う事が出来ず,現在ではPerlのコアモジュールから外されている.
b2a795a294c4 update Moarvm bytecodes and perlcc
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
333 PerlccはPerlのバイトコードをCに変換しただけであり,Cで実装されているPerl経由で実行した場合と処理速度はほぼ変わらない.
b2a795a294c4 update Moarvm bytecodes and perlcc
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
334 またPerlccで生成されたCのソースコードは難解であり,これをデバッグするのが困難でもある.
b2a795a294c4 update Moarvm bytecodes and perlcc
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
335 MoarVMでthreaded codeを実現出来た場合,その箇所のみCbCプログラムとして切り出す事が可能である為perlccと似たツールを作成することも可能である.
b2a795a294c4 update Moarvm bytecodes and perlcc
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 16
diff changeset
336 この場合,Perl6を通常動かした際とは異なりバイトコードインタプリタに到達する前の処理が無くなる為多少の高速化が望めると推測できる.
16
ed882dba29f6 add about threaded code and jlisting.sty
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 15
diff changeset
337
20
2bf64cfb91b1 add CbC evaluation and CbCinterp fig
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
338 \section{CbCを用いる事についての利点と欠点}
2bf64cfb91b1 add CbC evaluation and CbCinterp fig
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
339 MoarVMの様な巨大なスクリプト言語処理系にCbCを適応した所現在までに複数の利点と欠点が発見された.
2bf64cfb91b1 add CbC evaluation and CbCinterp fig
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
340 本章ではまず利点を述べ,次に現段階でのCbCを適応した場合の欠点について考察する.
2bf64cfb91b1 add CbC evaluation and CbCinterp fig
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
341
2bf64cfb91b1 add CbC evaluation and CbCinterp fig
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
342 \subsection{利点}
2bf64cfb91b1 add CbC evaluation and CbCinterp fig
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
343 \subsection{コード分割}
2bf64cfb91b1 add CbC evaluation and CbCinterp fig
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
344 オリジナルのMoarVMでは命令コードに対応する箇所はラベルジャンプ,もしくはswitch文で実装されていた.
2bf64cfb91b1 add CbC evaluation and CbCinterp fig
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
345 その為同じCファイルに命令コードの実行の定義が存在しなければならない.
2bf64cfb91b1 add CbC evaluation and CbCinterp fig
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
346 今後MoarVMに新たなバイトコードが導入されていく事を考えるとinterp.cが巨大になる可能性がある.
2bf64cfb91b1 add CbC evaluation and CbCinterp fig
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
347 関数単位での処理の比重が偏る事に加え,
2bf64cfb91b1 add CbC evaluation and CbCinterp fig
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
348 switch文中に書かれている処理は他の関数から呼ぶ事が出来ないため,余計な手間がかかる箇所が発生すると考えられる.
2
a758898008e6 add tex and Makefile
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
349
20
2bf64cfb91b1 add CbC evaluation and CbCinterp fig
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
350 CbCMoarVMの場合,CodeSegmentとして基本ブロックを記述出来る為オリジナルのMoarVMの様にswtich文のブロック中に書く必要性が無くなる.
2bf64cfb91b1 add CbC evaluation and CbCinterp fig
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
351 その為類似する命令系をコード分割し,モジュール化する事が可能である.
2bf64cfb91b1 add CbC evaluation and CbCinterp fig
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
352 これは通常のインタプリタの実装と比べ可読性と言う意味とモノリシックアーキテクチャをマイクロ化出来るという意味でも利点である.
2
a758898008e6 add tex and Makefile
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
353
20
2bf64cfb91b1 add CbC evaluation and CbCinterp fig
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
354 \subsubsection{MoarVMのデバッグ}
2bf64cfb91b1 add CbC evaluation and CbCinterp fig
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
355 MoarVMのバイトコードインタプリタの箇所はオリジナルの実装ではラベルジャンプを用いて実装されている.
2bf64cfb91b1 add CbC evaluation and CbCinterp fig
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
356 その為,直接ラベルにbreak pointをかける事が出来ない.
2bf64cfb91b1 add CbC evaluation and CbCinterp fig
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
357 作業者がデバッガが読み込んでいるCソースコードの位置を把握し,行番号を指定してdebug pointを設定する必要があった.
2bf64cfb91b1 add CbC evaluation and CbCinterp fig
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
358
2bf64cfb91b1 add CbC evaluation and CbCinterp fig
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
359 CbCMoarVMの場合,CodeSegment単位でバイトコードの処理単位を記述している為,通常の関数と同じく直接CodeSegmentにデバッグポイントをかける事が可能である.
2bf64cfb91b1 add CbC evaluation and CbCinterp fig
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
360 これはCプログラミングの関数に対してのデバッグで,状態ごとにbreak pointをかける事が出来ることを意味する.
2bf64cfb91b1 add CbC evaluation and CbCinterp fig
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
361 通常のC言語で言語処理系を実装した場合と比較して扱いやすくなっていると言える.
2bf64cfb91b1 add CbC evaluation and CbCinterp fig
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
362 さらにラベルテーブルでの管理場合,次のバイトコード箇所は数値でしか確認できず,実際にどこに飛ぶのかはラベルテーブル内と数値を作業者が手作業で確認する必要があった.
2bf64cfb91b1 add CbC evaluation and CbCinterp fig
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
363 スクリプトなどを組めば効率化は出来るがデバッガ上で完結しない為手間がかかる.
2bf64cfb91b1 add CbC evaluation and CbCinterp fig
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
364 CbC実装ではCODESテーブル内は次のCodeSegmentの名前が入っている為,数値からCodeSegmentの名前をデバッガ上で確認する事が出来る.
9
8e80522a88bd tweek mindmap and wrote table of contents for Paper
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
365 % \subsection{単純なループ処理の測定}
8e80522a88bd tweek mindmap and wrote table of contents for Paper
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
366 % 簡単な例題としてfor文を用いて100000回ループさせ,ある変数をインクリメントするというプログラムを作成する.
8e80522a88bd tweek mindmap and wrote table of contents for Paper
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
367 % 今回の評価対象としてPerl6は2018年4月にリリースされたMoarVM,NQP,Rakudoの実装を用いる.
8e80522a88bd tweek mindmap and wrote table of contents for Paper
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
368 % Perl5は5.26.2を利用した.
20
2bf64cfb91b1 add CbC evaluation and CbCinterp fig
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
369
9
8e80522a88bd tweek mindmap and wrote table of contents for Paper
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
370 % \begin{table}[htb]
8e80522a88bd tweek mindmap and wrote table of contents for Paper
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
371 % \begin{tabular}{|c|c|c|} \hline
8e80522a88bd tweek mindmap and wrote table of contents for Paper
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
372 % ループ回数 & Perl5 (sec) & Perl6(sec) \\ \hline \hline
8e80522a88bd tweek mindmap and wrote table of contents for Paper
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
373 % 1000000 & 0.131 & 1.444 \\ \hline
8e80522a88bd tweek mindmap and wrote table of contents for Paper
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
374 % 10000000 & 0.131 & 1.444 \\ \hline
8e80522a88bd tweek mindmap and wrote table of contents for Paper
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
375 % 100000000 & 3.258 & 124.69 \\ \hline
8e80522a88bd tweek mindmap and wrote table of contents for Paper
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
376 % \end{tabular}
8e80522a88bd tweek mindmap and wrote table of contents for Paper
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
377 % \end{table}
2
a758898008e6 add tex and Makefile
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
378
20
2bf64cfb91b1 add CbC evaluation and CbCinterp fig
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
379 \subsection{欠点}
2bf64cfb91b1 add CbC evaluation and CbCinterp fig
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
380 \subsubsection{CbCコンパイラ}
2bf64cfb91b1 add CbC evaluation and CbCinterp fig
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
381 前章までに複数述べた通りCbCコンパイラが現在非常にバグを発生させやすい状態になっている.
2bf64cfb91b1 add CbC evaluation and CbCinterp fig
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
382 CbCコンパイラはgccとllvm/clangに実装している為,これらのアップデートに追従する必要がある.
2bf64cfb91b1 add CbC evaluation and CbCinterp fig
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
383 しかしコンパイラのバージョンに応じてCbCで利用するコンパイラ内のAPIが異なる場合が多く,APIの変更に伴う修正作業などを行う必要がある.
2bf64cfb91b1 add CbC evaluation and CbCinterp fig
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
384
24
d8f77d0a3452 update environemt return and bib
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 23
diff changeset
385 CbCMoarVMではCからCodeSegmentへ,CodeSegmentからCへの遷移などが複数回繰り返されているが,この処理中のCodeSegmentでのtail callの強制が非常に難関である.
20
2bf64cfb91b1 add CbC evaluation and CbCinterp fig
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
386 tail callの強制には関数定義の箇所や引数,スタック領域のサイズ修正などを行う必要がある.
2bf64cfb91b1 add CbC evaluation and CbCinterp fig
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 19
diff changeset
387
9
8e80522a88bd tweek mindmap and wrote table of contents for Paper
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
388
8e80522a88bd tweek mindmap and wrote table of contents for Paper
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
389 \section{今後の課題}
19
3e4ffa621ae9 add after work
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
390 本論文ではCbCによってPerl6の処理系であるMoarVMインタプリタの一部改良とその手法を示した.
3e4ffa621ae9 add after work
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
391 CbCのCodeSegment部分を用いることできめ細やかな記述が出来,デバッグし辛い箇所もbreakpointの設定などが容易になった.
2
a758898008e6 add tex and Makefile
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
392
19
3e4ffa621ae9 add after work
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
393 今後CbCでの開発をより深く行っていくにあたり,CbCコンパイラそのものの信頼性を向上させる必要がある.
22
fb4c1b408c9f add sample codes and tweak tex
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 21
diff changeset
394 MoarVMの開発を行うにあたり新たに発見された複数のバグを修正し,より安定するコンパイラにする為に改良を行う.
19
3e4ffa621ae9 add after work
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
395
3e4ffa621ae9 add after work
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
396 現在CbCMoarVMで直接バイトコードを入力した場合のnqpのテストは\%パスする.
3e4ffa621ae9 add after work
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
397 また数値の計算と出力などの簡単なNQPの例題を作成し,オリジナルのNQP,moarvmでバイトコード化したものを入力した際も正常に動作している.
3e4ffa621ae9 add after work
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
398 今後はさらに複雑な例題やPerl6の独自文法でも動くかどうかの実験を行う.
3e4ffa621ae9 add after work
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
399
3e4ffa621ae9 add after work
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
400 MoarVMではGCからオブジェクトを守る為にMVMROOTというマクロを利用し,局所変数のポインタをスタックに登録する処理を行っている.
3e4ffa621ae9 add after work
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
401 GCの制御を効率的に行えば本来は必要ない処理であり,実行するとCodeSegmentの優位性が損なわれてしまう.
3e4ffa621ae9 add after work
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
402 従ってMoarVMのGCの最適化を行う.
3e4ffa621ae9 add after work
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
403
3e4ffa621ae9 add after work
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
404 また高速化という面では,Perlの特徴である正規表現に着目し,正規表現の表現のみ高速で動く最適化の導入なども検討している.
3e4ffa621ae9 add after work
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
405
3e4ffa621ae9 add after work
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
406 Perl6の開発は非常に活発に行われている為,CbCMoarVMの最新版の追従も課題となっている.
3e4ffa621ae9 add after work
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
407 現在はinterp.cからPerlスクリプトを用いて自動でCbCのCodeSegmentを生成している.
23
7689b70a1a79 create stagenqp.pdf and tweak tex
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 22
diff changeset
408 今後の開発領域の拡大と共により効率的にCbCコードへの自動変換も複数のCコードに対応する様に開発を行っていく.
2
a758898008e6 add tex and Makefile
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
409
9
8e80522a88bd tweek mindmap and wrote table of contents for Paper
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
410 %å\subsection{MoarVMの処理流れ}
8e80522a88bd tweek mindmap and wrote table of contents for Paper
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
411 %MoarVMはC言語で実装されており,Perl5で記述されたConfigure.plを
8e80522a88bd tweek mindmap and wrote table of contents for Paper
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 7
diff changeset
412
2
a758898008e6 add tex and Makefile
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
413
a758898008e6 add tex and Makefile
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
414 % BibTeX を使用する場合 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
11
ea10413281c5 tweak Makefile and create reference.bib
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
415 \nocite{*}
ea10413281c5 tweak Makefile and create reference.bib
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
416 \bibliographystyle{ipsjsort}
ea10413281c5 tweak Makefile and create reference.bib
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
417 \bibliography{reference}
2
a758898008e6 add tex and Makefile
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
418
a758898008e6 add tex and Makefile
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
419 \end{document}