Mercurial > hg > Papers > 2019 > anatofuz-prosym
annotate Paper/anatofuz.tex @ 19:3e4ffa621ae9
add after work
author | Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Wed, 07 Nov 2018 22:35:07 +0900 (2018-11-07) |
parents | b2a795a294c4 |
children | 2bf64cfb91b1 |
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 | 38 \title{CbCを用いたPerl6処理系} |
39 | |
40 %\affiliate{IPSJ}{情報処理学会} | |
41 \affiliate{IERYUKYU}{琉球大学工学部情報工学科} | |
2
a758898008e6
add tex and Makefile
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
42 |
3 | 43 \author{清水 隆博}{Takahiro SHIMIZU}{IERYUKYU}[anatofuz@cr.ie.u-ryukyu.ac.jp] |
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 | 46 %概要 |
2
a758898008e6
add tex and Makefile
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
47 \begin{abstract} |
3 | 48 スクリプト言語であるPerl5の後継言語としてPerl6が現在開発されている. |
49 Perl6は設計と実装が区分されており様々な処理系が開発されている.現在主流なPerl6はRakudoと言われるプロジェクトである. | |
50 RakudoではPerl6自体をNQP(NotQuitPerl)と言われるPerl6のサブセットで記述し,NQPをVMが解釈するという処理流れになっている. | |
51 このVMは任意のVMが選択できるようになっており,現在はMoarVM,JavaVM,Javascriptが動作環境として選択可能である. | |
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と比較し非常に低速である. |
3 | 54 この問題を解決するためにContinuation based C (CbC)という言語を一部用いる. |
17
b2a795a294c4
update Moarvm bytecodes and perlcc
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
55 本論文ではCbCを用いてMoarVMの一部を書き換える事を検討し,得られた知見についてに述べる. |
3 | 56 |
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 | 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よりさらにきめ細やかな記述が可能であるためスクリプト言語などのプログラミング言語の記述と親和性が高い事が推測される. |
9c172999d70e
tweak Papers for CbC abstract
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
9
diff
changeset
|
77 故に本研究はCbCをスクリプト言語の実装に適応した場合,どのような利点やプログラミング上の問題点に遭遇するかCbCの応用としての側面でも行う. |
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は当研究室で開発しているプログラミング言語である. |
14
56f4ac0231ee
tweak tex and add bibfile
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
13
diff
changeset
|
84 Cレベルでのプログラミングを行う場合,本来プログラマが行いたい処理の他にmallocなどを利用したメモリのアロケートやエラーハンドリングなどが存在する. |
56f4ac0231ee
tweak tex and add bibfile
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
13
diff
changeset
|
85 これらをmeta computationと呼ぶ.これらmeta computationと通常の処理を分離することでバグの原因がmeta computation側にあるか処理側にあるかの分離などが可能となる. |
56f4ac0231ee
tweak tex and add bibfile
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
13
diff
changeset
|
86 しかしC言語などを用いたプログラミングで分離を行おうとすると,それぞれ事細かに関数やクラスを分割せねばならず容易ではない. |
56f4ac0231ee
tweak tex and add bibfile
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
13
diff
changeset
|
87 CbCでは関数よりmeta computationを細かく記述する為にCodeSegmentという単位を導入した. |
56f4ac0231ee
tweak tex and add bibfile
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
13
diff
changeset
|
88 CbCではCodeSegment,DetaSegmentを基本単位として記述するプログラミングスタイルを取る. |
10
9c172999d70e
tweak Papers for CbC abstract
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
9
diff
changeset
|
89 |
14
56f4ac0231ee
tweak tex and add bibfile
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
13
diff
changeset
|
90 \subsection{CodeSegmentとDataSegment} |
56f4ac0231ee
tweak tex and add bibfile
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
13
diff
changeset
|
91 CbCではCの関数の代わりにCodeSegmentを導入する. |
56f4ac0231ee
tweak tex and add bibfile
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
13
diff
changeset
|
92 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
|
93 \_\_codeはCbCコンパイラの扱いはvoidと同じ型であるが,CbCプログラミングではCodeSegmentである事を示す識別子としての意味で利用する. |
ed882dba29f6
add about threaded code and jlisting.sty
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
15
diff
changeset
|
94 |
17
b2a795a294c4
update Moarvm bytecodes and perlcc
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
95 \subsection{軽量継続} |
b2a795a294c4
update Moarvm bytecodes and perlcc
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
96 TBD |
10
9c172999d70e
tweak Papers for CbC abstract
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
9
diff
changeset
|
97 |
9c172999d70e
tweak Papers for CbC abstract
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
9
diff
changeset
|
98 \subsection{現在の実装} |
9c172999d70e
tweak Papers for CbC abstract
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
9
diff
changeset
|
99 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
|
100 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
|
101 |
56f4ac0231ee
tweak tex and add bibfile
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
13
diff
changeset
|
102 \subsection{CbCコンパイラのバグ} |
17
b2a795a294c4
update Moarvm bytecodes and perlcc
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
103 % 局所変数のポインタを握ったままgotoするとtail callにならない |
b2a795a294c4
update Moarvm bytecodes and perlcc
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
104 CbCコンパイラは現在も開発中であり幾つかのバグが発見されている. |
b2a795a294c4
update Moarvm bytecodes and perlcc
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
105 まずCodeSegment内で宣言した局所変数のポインタを別の変数などで確保した状態でgotoしてしまうとtail call最適化が切られる. |
b2a795a294c4
update Moarvm bytecodes and perlcc
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
106 これはただの関数呼び出しになってしまう為,直接的な被害はないもののCbCとしての利点が損なわれてしまう. |
b2a795a294c4
update Moarvm bytecodes and perlcc
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
107 また本来は操作しないはずのスタック領域の操作が入ってしまうため,プログラマの意図と反したスタックポインタなのど操作が行われてしまいバグが発生する可能性が存在する. |
b2a795a294c4
update Moarvm bytecodes and perlcc
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
108 |
10
9c172999d70e
tweak Papers for CbC abstract
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
9
diff
changeset
|
109 \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
|
110 CbCコンパイラは内部的に与えられているソースコードがCbCであるかどうかを判断する. |
ed882dba29f6
add about threaded code and jlisting.sty
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
15
diff
changeset
|
111 この際にCodeSegmentを利用していない場合は通常のCプログラムとして動作する. |
ed882dba29f6
add about threaded code and jlisting.sty
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
15
diff
changeset
|
112 これはCbCコンパイラがCコンパイラであるgccとllvm/clang上に実装している為である. |
13
80944267f9c7
tweak tex and mv footnote sites
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
12
diff
changeset
|
113 その為MoarVMのビルドにおいてもCbCで書き換えたソースコードがあるターゲットと,手を加えていないオリジナルのターゲットの2種類を同一のCbCコンパイラでビルドする事が可能である. |
10
9c172999d70e
tweak Papers for CbC abstract
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
9
diff
changeset
|
114 |
9
8e80522a88bd
tweek mindmap and wrote table of contents for Paper
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
7
diff
changeset
|
115 |
14
56f4ac0231ee
tweak tex and add bibfile
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
13
diff
changeset
|
116 \subsection{言語処理系におけるCbCの応用} |
56f4ac0231ee
tweak tex and add bibfile
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
13
diff
changeset
|
117 CbCを言語処理系,特にスクリプト言語に応用すると幾つかの箇所に置いて利点があると推測される. |
56f4ac0231ee
tweak tex and add bibfile
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
13
diff
changeset
|
118 CbCにおけるCSはコンパイラの基本ブロックに相当する. |
17
b2a795a294c4
update Moarvm bytecodes and perlcc
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
119 その為従来のスクリプト言語では主にcase文で記述していた命令コードディスパッチの箇所をCodeSegmentの遷移として記述する事が可能である. |
b2a795a294c4
update Moarvm bytecodes and perlcc
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
120 CbCは状態を単位として記述が可能であるため,命令コードなどにおける状態を利用するスクリプト言語の実装は応用例として適していると考えられる. |
14
56f4ac0231ee
tweak tex and add bibfile
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
13
diff
changeset
|
121 |
56f4ac0231ee
tweak tex and add bibfile
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
13
diff
changeset
|
122 |
9
8e80522a88bd
tweek mindmap and wrote table of contents for Paper
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
7
diff
changeset
|
123 \section{Perl6の概要} |
5
06f3183ef6c3
add about Perl6
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
4
diff
changeset
|
124 この章では現在までの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
|
125 \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
|
126 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
|
127 Perl5の言語的な問題点であるオブジェクト指向機能の強力なサポートなどを取り入れた言語として設計された. |
5
06f3183ef6c3
add about Perl6
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
4
diff
changeset
|
128 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
|
129 まず2005年に唐鳳によってHaskellで実装されたPugs\cite{pugs}が登場した. |
5
06f3183ef6c3
add about Perl6
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
4
diff
changeset
|
130 Pugsは最初に登場したPerl6実装であり,この実装を基にしてPerl6の仕様も修正された. |
6
6dcf1143dc8f
add about NQP
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
5
diff
changeset
|
131 現在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
|
132 |
8e80522a88bd
tweek mindmap and wrote table of contents for Paper
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
7
diff
changeset
|
133 \subsection{Parrot} |
13
80944267f9c7
tweak tex and mv footnote sites
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
12
diff
changeset
|
134 その後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
|
135 ParrotはPASMと呼ばれるバイトコードを解釈可能なレジスタマシンである. |
5
06f3183ef6c3
add about Perl6
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
4
diff
changeset
|
136 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
|
137 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
|
138 こちらもPugsと同様に現在のPerl6プロジェクトでは歴史的な実装とされている. |
5
06f3183ef6c3
add about Perl6
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
4
diff
changeset
|
139 現在主に使用されている実装であるRakudoは2010年にRakudo-Starという一連のツール郡としてリリースされた. |
13
80944267f9c7
tweak tex and mv footnote sites
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
12
diff
changeset
|
140 Perl6処理系自体は現在も未完成であり,Perl6プロジェクトとして提供しているテストリポジトリ「Roast\cite{roast}」で定義されているテストケースを完全に通化する処理系は現在未だ存在しない. |
9
8e80522a88bd
tweek mindmap and wrote table of contents for Paper
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
7
diff
changeset
|
141 |
8e80522a88bd
tweek mindmap and wrote table of contents for Paper
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
7
diff
changeset
|
142 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
|
143 従って現在では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
|
144 Perl6は現在有力な処理系であるRakudoから名前を取り\texttt{Raku}という言語名に変更しようという動きが一部存在している. |
5
06f3183ef6c3
add about Perl6
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
4
diff
changeset
|
145 |
06f3183ef6c3
add about Perl6
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
4
diff
changeset
|
146 \subsection{Rakudo} |
06f3183ef6c3
add about Perl6
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
4
diff
changeset
|
147 |
6
6dcf1143dc8f
add about NQP
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
5
diff
changeset
|
148 RakudoとはParrotで構想に上がったNQP,NQPに基づくPerl6を基にしたプロジェクトである. |
6dcf1143dc8f
add about NQP
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
5
diff
changeset
|
149 RakudoがPerl6のコンパイラかつインタプリタであると考えても良い. |
14
56f4ac0231ee
tweak tex and add bibfile
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
13
diff
changeset
|
150 Rakudoにおけるコンパイラとは厳密には2種類存在する. |
56f4ac0231ee
tweak tex and add bibfile
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
13
diff
changeset
|
151 まず第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
|
152 次にそのNQPが出力したバイトコードをネイティブコードに変換するVMの2種類である. |
5
06f3183ef6c3
add about Perl6
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
4
diff
changeset
|
153 このVMは現在MoarVM,JavaVM,Javascript,GraalVMを選択可能である. |
15
8580ad6c50dd
tweak .tex and bib
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
14
diff
changeset
|
154 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
|
155 NQPで主に書かれたPerl6のことをRakudoと呼ぶ. |
56f4ac0231ee
tweak tex and add bibfile
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
13
diff
changeset
|
156 Perl6はNQP以外にもPerl6独自の一種のシンタックスシュガーの様な物を持っており,これはNQPコンパイラ側で処理を行う. |
6
6dcf1143dc8f
add about NQP
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
5
diff
changeset
|
157 |
6dcf1143dc8f
add about NQP
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
5
diff
changeset
|
158 \subsection{NQP} |
14
56f4ac0231ee
tweak tex and add bibfile
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
13
diff
changeset
|
159 |
13
80944267f9c7
tweak tex and mv footnote sites
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
12
diff
changeset
|
160 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
|
161 NQPはPerl6のサブセットであるため主な文法などはPerl6に準拠しているが幾つか異なる点が存在する. |
6dcf1143dc8f
add about NQP
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
5
diff
changeset
|
162 NQP自身はStage0と呼ばれる名前空間上のモジュールのみ動作環境のVMのバイトコードを必要とするが,それ以外はNQPで記述されておりBootstrappingされている言語である. |
17
b2a795a294c4
update Moarvm bytecodes and perlcc
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
163 Perl6の一部はNQPを拡張したもので書かれている為,Rakudoを動作させる為にはMoarVMなどのVM,VMに対応させる様にビルドしたNQPがそれぞれ必要となる. |
6
6dcf1143dc8f
add about NQP
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
5
diff
changeset
|
164 現在のNQPではMoarVM,JVMに対応するStage0はそれぞれMoarVMbytecode,jarファイルが用意されており,Javascriptではバイトコードの代わりにランタイム独自のModuleLoaderなどが設計されている. |
9
8e80522a88bd
tweek mindmap and wrote table of contents for Paper
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
7
diff
changeset
|
165 MoarVMのModuleLoaderはStage0あるMoarVMbytecodeで書かれた一連のファイルが該当する. |
8e80522a88bd
tweek mindmap and wrote table of contents for Paper
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
7
diff
changeset
|
166 |
17
b2a795a294c4
update Moarvm bytecodes and perlcc
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
167 Stage0にあるファイルをmoarvmに与えることでnqpのインタプリタが実行される様になっている. |
b2a795a294c4
update Moarvm bytecodes and perlcc
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
168 これはStage0の一連のファイルはmoarvm bytecodeなどで記述された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
|
169 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
|
170 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
|
171 |
10
9c172999d70e
tweak Papers for CbC abstract
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
9
diff
changeset
|
172 実際にperl6を動かすためにはself buildしたNQPコンパイラが必要となる.その為にstage0を利用してStage1をビルドしNQPコンパイラを作成する. |
6
6dcf1143dc8f
add about NQP
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
5
diff
changeset
|
173 |
6dcf1143dc8f
add about NQP
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
5
diff
changeset
|
174 Roastやドキュメントなどによって設計が定まっているPerl6とは異なりNQP自身の設計は今後も変更になる可能性が開発者から公表されている. |
13
80944267f9c7
tweak tex and mv footnote sites
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
12
diff
changeset
|
175 現在の公表されているNQPのオペコードはNQPのGitHubリポジトリ\cite{nqpopcode}に記述されているものである. |
5
06f3183ef6c3
add about Perl6
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
4
diff
changeset
|
176 |
06f3183ef6c3
add about Perl6
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
4
diff
changeset
|
177 |
9
8e80522a88bd
tweek mindmap and wrote table of contents for Paper
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
7
diff
changeset
|
178 \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
|
179 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
|
180 前述した通り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
|
181 従って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
|
182 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
|
183 |
17
b2a795a294c4
update Moarvm bytecodes and perlcc
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
184 言語的な特徴としてはPerl5とは違いアトミックに演算を行う事が可能な絵文字で実装されたatom演算子や,すべてがオブジェクトであるオブジェクト指向言語としての進化も見られる. |
15
8580ad6c50dd
tweak .tex and bib
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
14
diff
changeset
|
185 またPerl6は漸進的型付け言語である. |
8580ad6c50dd
tweak .tex and bib
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
14
diff
changeset
|
186 従来のPerlの様に変数に代入する対象の型や文脈に応じて型を変更する動的型言語としての側面を持ちつつ独自に定義した型を始めとする様々な型に静的に変数の型を設定する事が可能である. |
6
6dcf1143dc8f
add about NQP
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
5
diff
changeset
|
187 |
13
80944267f9c7
tweak tex and mv footnote sites
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
12
diff
changeset
|
188 \subsection{現在のPerl6} |
80944267f9c7
tweak tex and mv footnote sites
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
12
diff
changeset
|
189 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
|
190 従来は言語仕様は自然言語の仕様書であったが,現在はテストスイートである「Roast\cite{roast}」そのものと定義されている. |
17
b2a795a294c4
update Moarvm bytecodes and perlcc
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
191 現在のPerl6の仕様を読む場合Roastを確認し,現在rakudo上に実装されている機能を見る場合は公式ドキュメントを確認する必要がある. |
6
6dcf1143dc8f
add about NQP
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
5
diff
changeset
|
192 |
9
8e80522a88bd
tweek mindmap and wrote table of contents for Paper
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
7
diff
changeset
|
193 |
10
9c172999d70e
tweak Papers for CbC abstract
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
9
diff
changeset
|
194 \section{CbCによるMoarVM} |
13
80944267f9c7
tweak tex and mv footnote sites
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
12
diff
changeset
|
195 この章では改良を行ったPerl6処理系であるMoarVMについて述べる. |
15
8580ad6c50dd
tweak .tex and bib
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
14
diff
changeset
|
196 \subsection{方針} |
8580ad6c50dd
tweak .tex and bib
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
14
diff
changeset
|
197 MoarVMそのものをCbCで書き換えることも考えられるがMoarVM自体既に巨大なプロジェクトである為すべてを書き換える事は困難である. |
8580ad6c50dd
tweak .tex and bib
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
14
diff
changeset
|
198 その為まず比較的CbCで書き換えることが容易な箇所を修正する. |
8580ad6c50dd
tweak .tex and bib
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
14
diff
changeset
|
199 前章までに述べた通りCbCのCodeSegmentはコンパイラの基本ブロックに該当する. |
8580ad6c50dd
tweak .tex and bib
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
14
diff
changeset
|
200 従ってMoarVMにおける基本ブロックの箇所をCodeSegmentに書き換える事が可能である. |
8580ad6c50dd
tweak .tex and bib
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
14
diff
changeset
|
201 MoarVMにおける基本ブロックはインタプリタが実行するバイトコードごとの処理に該当する. |
17
b2a795a294c4
update Moarvm bytecodes and perlcc
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
202 |
b2a795a294c4
update Moarvm bytecodes and perlcc
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
203 \subsection{MoarByteCodeのディスパッチ} |
b2a795a294c4
update Moarvm bytecodes and perlcc
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
204 MoarVMのバイトコードインタプリタはsrc/core/interp.cで定義されている. |
b2a795a294c4
update Moarvm bytecodes and perlcc
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
205 この中の関数MVM\_interp\_runで命令に応じた処理を実行する. |
b2a795a294c4
update Moarvm bytecodes and perlcc
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
206 関数内では命令列が保存されているcur\_op,現在と次の命令を指し示すop,Threadの環境が保存されているThreadcontextなどの変数を利用する. |
b2a795a294c4
update Moarvm bytecodes and perlcc
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
207 命令実行は大きく二種類の動作があり,Cのgotoが利用できる場合はMVM\_CGOTOフラグが立ちラベル遷移を利用する. |
b2a795a294c4
update Moarvm bytecodes and perlcc
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
208 それ以外の場合は巨大なcase文として命令を実行する. |
b2a795a294c4
update Moarvm bytecodes and perlcc
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
209 |
b2a795a294c4
update Moarvm bytecodes and perlcc
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
210 ラベル遷移を利用する場合はラベルテーブルにアクセスし,テーブルに登録されているアドレスを取得し,NEXTで遷移する. |
b2a795a294c4
update Moarvm bytecodes and perlcc
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
211 このラベルテーブルの中身はラベルが変換されたアドレスであるため,Cレベルでのデバッグ時にはアドレスと実際に呼ばれる箇所を確認する事に手間がかかる. |
b2a795a294c4
update Moarvm bytecodes and perlcc
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
212 巨大なcase文として実行された場合,実行時間が遅いだけでなく,ラベル遷移と共存させて記述を行っている為Cのソースコードにおける可読性も低下する. |
b2a795a294c4
update Moarvm bytecodes and perlcc
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
213 |
b2a795a294c4
update Moarvm bytecodes and perlcc
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
214 CbCMoarVMではこの問題を解決するために,それぞれの命令に対応するCodeSegmentを作成し,これらへのポインタを持つCbCのCodeSegmentのテーブルを作成した. |
b2a795a294c4
update Moarvm bytecodes and perlcc
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
215 |
b2a795a294c4
update Moarvm bytecodes and perlcc
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
216 \subsection{命令実行箇所のCodeSegmentへの変換} |
b2a795a294c4
update Moarvm bytecodes and perlcc
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
217 ラベルテーブルやcase文のswitch相当の命令実行箇所をCbCに変換し,CodeSegmentの遷移として利用する. |
b2a795a294c4
update Moarvm bytecodes and perlcc
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
218 interp.cは?に示す様なスタイルで記述されている. |
b2a795a294c4
update Moarvm bytecodes and perlcc
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
219 OP(.*)の.*に該当する箇所はバイトコードの名前である.通常このブロックにはLABELから遷移する為,バイトコードの名前はLABELSの配列の添字に変換されている. |
b2a795a294c4
update Moarvm bytecodes and perlcc
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
220 そのため対象となるCodeSegmentをLABLESの並びと対応させ,配列CODESに設定すればCodeSegmentの名前は問わない. |
b2a795a294c4
update Moarvm bytecodes and perlcc
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
221 今回はCodeSegmentである事を示す為にsuffixとしてcbc\_をつける. |
b2a795a294c4
update Moarvm bytecodes and perlcc
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
222 |
b2a795a294c4
update Moarvm bytecodes and perlcc
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
223 \subsection{MoarVMのBytecodeのデバッグ} |
b2a795a294c4
update Moarvm bytecodes and perlcc
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
224 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
|
225 しかしこれはmoarvmが実行したbytecodeのトレースではなくmoarvm bytecodeを変換したものに過ぎない. |
b2a795a294c4
update Moarvm bytecodes and perlcc
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
226 また,明らかに異なる挙動を示す両者のmoarを利用しても同じ結果が返ってきてしまう. |
b2a795a294c4
update Moarvm bytecodes and perlcc
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
227 そのため今回のMoarVMBytecodeインタプリタの実装のデバッグにはこの方法は適さない. |
b2a795a294c4
update Moarvm bytecodes and perlcc
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
228 従って実際に実行した命令を確認するにはgdbなどのCデバッガを利用してMoarVMを直接トレースする必要がある. |
b2a795a294c4
update Moarvm bytecodes and perlcc
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
229 |
b2a795a294c4
update Moarvm bytecodes and perlcc
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
230 \subsection{MoarVMの並列デバッグ手法} |
b2a795a294c4
update Moarvm bytecodes and perlcc
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
231 しかしMoarVMが実行する命令は膨大な数がある. |
b2a795a294c4
update Moarvm bytecodes and perlcc
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
232 その為gdbでMoarVMをCbCとオリジナル版での並列デバッグを人間が同時に行うことは困難である. |
b2a795a294c4
update Moarvm bytecodes and perlcc
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
233 Perlなどのスクリプトを用いて自動的に解析したいため,ログを残す為にscriptコマンドを実行した状態でgdbを起動する. |
b2a795a294c4
update Moarvm bytecodes and perlcc
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
234 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
|
235 CbC側ではCodeSegmentの名前を直接確認できるが,オリジナル版はLABLEの配列の添え字から自分でどのオペコードに対応しているかを探す必要がある. |
b2a795a294c4
update Moarvm bytecodes and perlcc
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
236 CbCとオリジナルのCODES,LABELの添字は対応している為,ログの解析を行う際はそれぞれの添字を抽出し違いが発生している箇所を探索する. |
19
3e4ffa621ae9
add after work
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
17
diff
changeset
|
237 違いが生じている箇所が発見できた場合,その前後のCodeSegment及びディスパッチ部分にbreak pointをかけ,それぞれの変数の挙動を比較する. |
3e4ffa621ae9
add after work
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
17
diff
changeset
|
238 主にcbc\_return系の命令が実行されている場合は,その直前で命令を切り替えるcbc\_invoke系統の命令が呼ばれているが,この周辺で何かしらの違いが発生している可能性が高い. |
3e4ffa621ae9
add after work
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
17
diff
changeset
|
239 その為,アセンブラレベルの命令を確認しながらデバッグを進めることとなる. |
3e4ffa621ae9
add after work
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
17
diff
changeset
|
240 |
17
b2a795a294c4
update Moarvm bytecodes and perlcc
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
241 |
b2a795a294c4
update Moarvm bytecodes and perlcc
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
242 |
10
9c172999d70e
tweak Papers for CbC abstract
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
9
diff
changeset
|
243 \subsection{CbCコンパイラによるバグ} |
17
b2a795a294c4
update Moarvm bytecodes and perlcc
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
244 現在までのCbCは複数個の入出力をCodeSegmentに与えるユースケースで利用していた. |
b2a795a294c4
update Moarvm bytecodes and perlcc
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
245 CbCコンパイラ自身はそれぞれ用意したテストスイートを通化するものの,MoarVMの様な巨大なプロジェクトのCSをコンパイルを実行する場合,予期せぬバグが発生した. |
b2a795a294c4
update Moarvm bytecodes and perlcc
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
246 主に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
|
247 その為DSの構造体の値が書き換わり,CからDSにreturnした際にDSの構造体が破壊されるバグである. |
19
3e4ffa621ae9
add after work
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
17
diff
changeset
|
248 このバグは先程の並列デバッグを行いながらプログラムカウンタや変数の動きをトレースする事などで発見することが出来る. |
17
b2a795a294c4
update Moarvm bytecodes and perlcc
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
249 現状ではCbCコンパイラがプログラマの意図と反する挙動を取るためCbCコンパイラのバグを回避するプログラミングが要求されている. |
b2a795a294c4
update Moarvm bytecodes and perlcc
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
250 本来コンパイラ側のバグを回避するプログラミングをプログラマに要求するスタイルは好ましくない. |
b2a795a294c4
update Moarvm bytecodes and perlcc
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
251 従ってCbCコンパイラ自身の信頼性を向上させる事も今後の課題となっている. |
6
6dcf1143dc8f
add about NQP
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
5
diff
changeset
|
252 |
16
ed882dba29f6
add about threaded code and jlisting.sty
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
15
diff
changeset
|
253 \subsection{Threaded Code} |
ed882dba29f6
add about threaded code and jlisting.sty
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
15
diff
changeset
|
254 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
|
255 これはCodeSegmentは必ず関数呼び出しではなくgotoで次の状態に遷移する為にスタック領域の操作が必要とならない為である. |
ed882dba29f6
add about threaded code and jlisting.sty
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
15
diff
changeset
|
256 現在の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
|
257 末尾最適化を応用することでContinuation-passingスタイルのThreaded Codeの実装が可能となる.\cite{threadedcode} |
ed882dba29f6
add about threaded code and jlisting.sty
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
15
diff
changeset
|
258 |
ed882dba29f6
add about threaded code and jlisting.sty
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
15
diff
changeset
|
259 現在のCbCMoarVMは次の命令セットのディスパッチをcbc\_nextというCodeSegmentで処理している. |
ed882dba29f6
add about threaded code and jlisting.sty
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
15
diff
changeset
|
260 これは元のMoarVMの命令ディスパッチで行われる現在のオペコードを示すcur\_opと命令列opの操作及び次のラベルに遷移するマクロに該当する. |
ed882dba29f6
add about threaded code and jlisting.sty
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
15
diff
changeset
|
261 CbCMoarVMではラベルに対しての遷移の代わりにMoarVMの命令のCodeSegmentの集合体である配列CODESにアクセスし,その要素であるCodeSegmentに対して遷移する形を取っている. |
ed882dba29f6
add about threaded code and jlisting.sty
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
15
diff
changeset
|
262 この一連の処理がオーバーヘッドになる為,今後は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
|
263 |
17
b2a795a294c4
update Moarvm bytecodes and perlcc
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
264 \subsubsection{perlcc} |
b2a795a294c4
update Moarvm bytecodes and perlcc
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
265 Perl5においてはperlccというモジュールが開発されている. |
b2a795a294c4
update Moarvm bytecodes and perlcc
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
266 これは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
|
267 perlccを利用することでPerlインタプリタが無い状況でも可動するバイナリファイルを作成する事が可能である. |
b2a795a294c4
update Moarvm bytecodes and perlcc
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
268 しかしPerlccはPerlスクリプトが複雑になるほど正確にCに移植を行う事が出来ず,現在ではPerlのコアモジュールから外されている. |
b2a795a294c4
update Moarvm bytecodes and perlcc
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
269 PerlccはPerlのバイトコードをCに変換しただけであり,Cで実装されているPerl経由で実行した場合と処理速度はほぼ変わらない. |
b2a795a294c4
update Moarvm bytecodes and perlcc
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
270 またPerlccで生成されたCのソースコードは難解であり,これをデバッグするのが困難でもある. |
b2a795a294c4
update Moarvm bytecodes and perlcc
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
271 MoarVMでthreaded codeを実現出来た場合,その箇所のみCbCプログラムとして切り出す事が可能である為perlccと似たツールを作成することも可能である. |
b2a795a294c4
update Moarvm bytecodes and perlcc
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
16
diff
changeset
|
272 この場合,Perl6を通常動かした際とは異なりバイトコードインタプリタに到達する前の処理が無くなる為多少の高速化が望めると推測できる. |
16
ed882dba29f6
add about threaded code and jlisting.sty
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
15
diff
changeset
|
273 |
9
8e80522a88bd
tweek mindmap and wrote table of contents for Paper
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
7
diff
changeset
|
274 \section{CbCを用いる事についての評価} |
8e80522a88bd
tweek mindmap and wrote table of contents for Paper
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
7
diff
changeset
|
275 Perl6処理系はまずPerl6の豊富な文法に対応する物を作成せねばならず,類似する他のプログラミング言語処理系と比較してもより複雑となっている. |
8e80522a88bd
tweek mindmap and wrote table of contents for Paper
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
7
diff
changeset
|
276 実際にPerl5を始めとしたスクリプト言語とPerl6がどのような処理時間の違いが見られるかを実測する. |
2
a758898008e6
add tex and Makefile
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
277 |
a758898008e6
add tex and Makefile
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
278 |
9
8e80522a88bd
tweek mindmap and wrote table of contents for Paper
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
7
diff
changeset
|
279 % \subsection{単純なループ処理の測定} |
8e80522a88bd
tweek mindmap and wrote table of contents for Paper
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
7
diff
changeset
|
280 % 簡単な例題として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
|
281 % 今回の評価対象として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
|
282 % Perl5は5.26.2を利用した. |
8e80522a88bd
tweek mindmap and wrote table of contents for Paper
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
7
diff
changeset
|
283 % |
8e80522a88bd
tweek mindmap and wrote table of contents for Paper
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
7
diff
changeset
|
284 % \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
|
285 % \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
|
286 % ループ回数 & 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
|
287 % 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
|
288 % 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
|
289 % 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
|
290 % \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
|
291 % \end{table} |
2
a758898008e6
add tex and Makefile
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
292 |
9
8e80522a88bd
tweek mindmap and wrote table of contents for Paper
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
7
diff
changeset
|
293 |
8e80522a88bd
tweek mindmap and wrote table of contents for Paper
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
7
diff
changeset
|
294 \section{今後の課題} |
19
3e4ffa621ae9
add after work
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
17
diff
changeset
|
295 本論文ではCbCによってPerl6の処理系であるMoarVMインタプリタの一部改良とその手法を示した. |
3e4ffa621ae9
add after work
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
17
diff
changeset
|
296 CbCのCodeSegment部分を用いることできめ細やかな記述が出来,デバッグし辛い箇所もbreakpointの設定などが容易になった. |
2
a758898008e6
add tex and Makefile
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
297 |
19
3e4ffa621ae9
add after work
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
17
diff
changeset
|
298 今後CbCでの開発をより深く行っていくにあたり,CbCコンパイラそのものの信頼性を向上させる必要がある. |
3e4ffa621ae9
add after work
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
17
diff
changeset
|
299 MoarVMの開発を行うにあたり新たに発見された複数のバグを修正し,より安定するコンパイラに改良を行う. |
3e4ffa621ae9
add after work
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
17
diff
changeset
|
300 |
3e4ffa621ae9
add after work
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
17
diff
changeset
|
301 現在CbCMoarVMで直接バイトコードを入力した場合のnqpのテストは\%パスする. |
3e4ffa621ae9
add after work
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
17
diff
changeset
|
302 また数値の計算と出力などの簡単なNQPの例題を作成し,オリジナルのNQP,moarvmでバイトコード化したものを入力した際も正常に動作している. |
3e4ffa621ae9
add after work
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
17
diff
changeset
|
303 今後はさらに複雑な例題やPerl6の独自文法でも動くかどうかの実験を行う. |
3e4ffa621ae9
add after work
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
17
diff
changeset
|
304 |
3e4ffa621ae9
add after work
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
17
diff
changeset
|
305 MoarVMではGCからオブジェクトを守る為にMVMROOTというマクロを利用し,局所変数のポインタをスタックに登録する処理を行っている. |
3e4ffa621ae9
add after work
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
17
diff
changeset
|
306 GCの制御を効率的に行えば本来は必要ない処理であり,実行するとCodeSegmentの優位性が損なわれてしまう. |
3e4ffa621ae9
add after work
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
17
diff
changeset
|
307 従ってMoarVMのGCの最適化を行う. |
3e4ffa621ae9
add after work
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
17
diff
changeset
|
308 |
3e4ffa621ae9
add after work
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
17
diff
changeset
|
309 また高速化という面では,Perlの特徴である正規表現に着目し,正規表現の表現のみ高速で動く最適化の導入なども検討している. |
3e4ffa621ae9
add after work
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
17
diff
changeset
|
310 |
3e4ffa621ae9
add after work
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
17
diff
changeset
|
311 Perl6の開発は非常に活発に行われている為,CbCMoarVMの最新版の追従も課題となっている. |
3e4ffa621ae9
add after work
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
17
diff
changeset
|
312 現在はinterp.cからPerlスクリプトを用いて自動でCbCのCodeSegmentを生成している. |
3e4ffa621ae9
add after work
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
17
diff
changeset
|
313 今後の開発領域の拡大と共により効率的にCbCコードへの自動変換も開発していく. |
2
a758898008e6
add tex and Makefile
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
314 |
9
8e80522a88bd
tweek mindmap and wrote table of contents for Paper
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
7
diff
changeset
|
315 %å\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
|
316 %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
|
317 |
2
a758898008e6
add tex and Makefile
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
318 |
a758898008e6
add tex and Makefile
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
319 % BibTeX を使用する場合 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
11
ea10413281c5
tweak Makefile and create reference.bib
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
10
diff
changeset
|
320 \nocite{*} |
ea10413281c5
tweak Makefile and create reference.bib
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
10
diff
changeset
|
321 \bibliographystyle{ipsjsort} |
ea10413281c5
tweak Makefile and create reference.bib
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
10
diff
changeset
|
322 \bibliography{reference} |
2
a758898008e6
add tex and Makefile
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
323 |
a758898008e6
add tex and Makefile
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
324 \end{document} |