Mercurial > hg > Papers > 2019 > anatofuz-prosym
annotate Paper/anatofuz.tex @ 13:80944267f9c7
tweak tex and mv footnote sites
author | Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Tue, 06 Nov 2018 16:54:52 +0900 |
parents | 02ae2227d0a3 |
children | 56f4ac0231ee |
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} |
ea10413281c5
tweak Makefile and create reference.bib
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
10
diff
changeset
|
9 \usepackage{url} |
2
a758898008e6
add tex and Makefile
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
10 \begin{document} |
a758898008e6
add tex and Makefile
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
11 |
a758898008e6
add tex and Makefile
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
12 % Title, Author %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
3 | 13 \title{CbCを用いたPerl6処理系} |
14 | |
15 %\affiliate{IPSJ}{情報処理学会} | |
16 \affiliate{IERYUKYU}{琉球大学工学部情報工学科} | |
2
a758898008e6
add tex and Makefile
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
17 |
3 | 18 \author{清水 隆博}{Takahiro SHIMIZU}{IERYUKYU}[anatofuz@cr.ie.u-ryukyu.ac.jp] |
19 \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
|
20 |
3 | 21 %概要 |
2
a758898008e6
add tex and Makefile
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
22 \begin{abstract} |
3 | 23 スクリプト言語であるPerl5の後継言語としてPerl6が現在開発されている. |
24 Perl6は設計と実装が区分されており様々な処理系が開発されている.現在主流なPerl6はRakudoと言われるプロジェクトである. | |
25 RakudoではPerl6自体をNQP(NotQuitPerl)と言われるPerl6のサブセットで記述し,NQPをVMが解釈するという処理流れになっている. | |
26 このVMは任意のVMが選択できるようになっており,現在はMoarVM,JavaVM,Javascriptが動作環境として選択可能である. | |
27 主に利用されているVMにCで書かれたMoarVMが存在する. | |
13
80944267f9c7
tweak tex and mv footnote sites
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
12
diff
changeset
|
28 MoarVMはJITコンパイルなどをサポートしているが,全体的な起動時間及び処理速度がPerl5と比較し非常に低速である. |
3 | 29 この問題を解決するためにContinuation based C (CbC)という言語を一部用いる. |
30 本論文ではMoarVMの一部をCbCを用いて書き直し,実際にどのようなパフォーマンスが出るかを報告する. | |
31 | |
32 | |
2
a758898008e6
add tex and Makefile
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
33 \end{abstract} |
a758898008e6
add tex and Makefile
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
34 |
a758898008e6
add tex and Makefile
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
35 \begin{jkeyword} |
3 | 36 プログラミング言語, コンパイラ, CbC, Perl6, MoarVM |
2
a758898008e6
add tex and Makefile
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
37 \end{jkeyword} |
a758898008e6
add tex and Makefile
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
38 |
a758898008e6
add tex and Makefile
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
39 \maketitle |
a758898008e6
add tex and Makefile
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
40 |
a758898008e6
add tex and Makefile
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
41 % Body %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
4
1035c41fc2db
add abstract
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
3
diff
changeset
|
42 \section{研究目的} |
1035c41fc2db
add abstract
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
3
diff
changeset
|
43 現在も広く使われているスクリプト言語PerlことPerl5の後継言語としてPerl6が開発されている. |
1035c41fc2db
add abstract
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
3
diff
changeset
|
44 Perl6は設計と実装が区分されており,現在広く使われている実装はRakudoと呼ばれるプロジェクトである. |
1035c41fc2db
add abstract
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
3
diff
changeset
|
45 Rakudoの実装はPerl6コンパイラ開発者用のサブセットであるNQP(NotQuitPerl)で実装されているPerl6の事を指す. |
1035c41fc2db
add abstract
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
3
diff
changeset
|
46 現在RakudoはNQPを解釈できる実行環境として,C言語で実装されたMoarVM,JVM,Javascript上で動作する様に開発されている. |
1035c41fc2db
add abstract
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
3
diff
changeset
|
47 Rakudoとして主に使われている処理系はMoarVMであるが,MoarVMの処理時間がPerl5などの多くのスクリプト言語と比較し非常に低速である. |
1035c41fc2db
add abstract
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
3
diff
changeset
|
48 その為現在日本国内ではPerl6を実務として利用するケースは概ね存在しない. |
13
80944267f9c7
tweak tex and mv footnote sites
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
12
diff
changeset
|
49 Perl6の持つ言語機能や型システムは非常に柔軟かつ強力であるため実用的な処理速度に達すれば言語の利用件数が向上することが期待される. |
4
1035c41fc2db
add abstract
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
3
diff
changeset
|
50 この問題を解決するために現在当研究室で開発しているContinuation Based C(以下CbC)を用いて改良を行う. |
10
9c172999d70e
tweak Papers for CbC abstract
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
9
diff
changeset
|
51 CbCはCよりさらにきめ細やかな記述が可能であるためスクリプト言語などのプログラミング言語の記述と親和性が高い事が推測される. |
9c172999d70e
tweak Papers for CbC abstract
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
9
diff
changeset
|
52 故に本研究はCbCをスクリプト言語の実装に適応した場合,どのような利点やプログラミング上の問題点に遭遇するかCbCの応用としての側面でも行う. |
9c172999d70e
tweak Papers for CbC abstract
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
9
diff
changeset
|
53 本稿ではまずCbC,Perl6の特徴及び現在の実装について述べ,次に改良を行うMoarVMの一連の処理流れについて述べる. |
4
1035c41fc2db
add abstract
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
3
diff
changeset
|
54 そして今回改良した一部分と今後の展開について記す. |
1035c41fc2db
add abstract
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
3
diff
changeset
|
55 |
10
9c172999d70e
tweak Papers for CbC abstract
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
9
diff
changeset
|
56 \section{CbC} |
9c172999d70e
tweak Papers for CbC abstract
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
9
diff
changeset
|
57 \subsection{CbCの概要} |
9c172999d70e
tweak Papers for CbC abstract
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
9
diff
changeset
|
58 CbCは当研究室で開発しているプログラミング言語である. |
13
80944267f9c7
tweak tex and mv footnote sites
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
12
diff
changeset
|
59 CbCではCodeSegment(以下CS),DetaSegment(以下DS)を基本単位として記述するプログラミングスタイルを取る. |
10
9c172999d70e
tweak Papers for CbC abstract
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
9
diff
changeset
|
60 |
9c172999d70e
tweak Papers for CbC abstract
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
9
diff
changeset
|
61 |
9c172999d70e
tweak Papers for CbC abstract
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
9
diff
changeset
|
62 \subsection{現在の実装} |
9c172999d70e
tweak Papers for CbC abstract
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
9
diff
changeset
|
63 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
|
64 gccはバージョン9.0.0に,clangは7.0.0に対応している. |
80944267f9c7
tweak tex and mv footnote sites
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
12
diff
changeset
|
65 CbCコンパイラ自身はそれぞれ用意したテストスイートを通化するものの,MoarVMの様な巨大なプロジェクトのCSをコンパイルを実行する場合,予期せぬバグが発生した. |
80944267f9c7
tweak tex and mv footnote sites
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
12
diff
changeset
|
66 主にCS間のgotoにおけるtail callフラグの除去や,DSとして渡している構造体の変数のアドレスがスタックポインタの値より上位に来てしまい,通常のCの関数をcallした際にローカル変数の領域がDSのアドレスの周辺を利用してしまう. |
80944267f9c7
tweak tex and mv footnote sites
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
12
diff
changeset
|
67 その為DSの構造体の値が書き換わり,CからDSにreturnした際にDSの構造体が破壊されるバグである. |
80944267f9c7
tweak tex and mv footnote sites
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
12
diff
changeset
|
68 現状ではCbCコンパイラがプログラマの意図と反する挙動を取るためCbCコンパイラのバグを回避するプログラミングが要求されている. |
80944267f9c7
tweak tex and mv footnote sites
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
12
diff
changeset
|
69 本来コンパイラ側のバグを回避するプログラミングをプログラマに要求するスタイルは好ましくない. |
80944267f9c7
tweak tex and mv footnote sites
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
12
diff
changeset
|
70 従ってCbCコンパイラ自身の信頼性を向上させる事も今後の課題となっている. |
10
9c172999d70e
tweak Papers for CbC abstract
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
9
diff
changeset
|
71 \subsection{CbCとCの互換性} |
13
80944267f9c7
tweak tex and mv footnote sites
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
12
diff
changeset
|
72 CbCはCコンパイラ上に実装している為,CSを利用しない場合は通常のCプログラムとして動作する. |
80944267f9c7
tweak tex and mv footnote sites
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
12
diff
changeset
|
73 CbCコンパイラは内部的に与えられているソースコードがCbCであるかどうかを判断し,そうでない場合は通常のコンパイラとして動作する. |
80944267f9c7
tweak tex and mv footnote sites
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
12
diff
changeset
|
74 その為MoarVMのビルドにおいてもCbCで書き換えたソースコードがあるターゲットと,手を加えていないオリジナルのターゲットの2種類を同一のCbCコンパイラでビルドする事が可能である. |
10
9c172999d70e
tweak Papers for CbC abstract
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
9
diff
changeset
|
75 |
9
8e80522a88bd
tweek mindmap and wrote table of contents for Paper
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
7
diff
changeset
|
76 |
8e80522a88bd
tweek mindmap and wrote table of contents for Paper
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
7
diff
changeset
|
77 \section{Perl6の概要} |
5
06f3183ef6c3
add about Perl6
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
4
diff
changeset
|
78 この章では現在までの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
|
79 \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
|
80 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
|
81 Perl5の言語的な問題点であるオブジェクト指向機能の強力なサポートなどを取り入れた言語として設計された. |
5
06f3183ef6c3
add about Perl6
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
4
diff
changeset
|
82 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
|
83 まず2005年に唐鳳によってHaskellで実装されたPugs\cite{pugs}が登場した. |
5
06f3183ef6c3
add about Perl6
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
4
diff
changeset
|
84 Pugsは最初に登場したPerl6実装であり,この実装を基にしてPerl6の仕様も修正された. |
6
6dcf1143dc8f
add about NQP
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
5
diff
changeset
|
85 現在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
|
86 |
8e80522a88bd
tweek mindmap and wrote table of contents for Paper
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
7
diff
changeset
|
87 \subsection{Parrot} |
13
80944267f9c7
tweak tex and mv footnote sites
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
12
diff
changeset
|
88 その後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
|
89 ParrotはPASMと呼ばれるバイトコードを解釈可能なレジスタマシンである. |
5
06f3183ef6c3
add about Perl6
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
4
diff
changeset
|
90 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
|
91 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
|
92 こちらもPugsと同様に現在のPerl6プロジェクトでは歴史的な実装とされている. |
5
06f3183ef6c3
add about Perl6
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
4
diff
changeset
|
93 現在主に使用されている実装である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
|
94 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
|
95 |
8e80522a88bd
tweek mindmap and wrote table of contents for Paper
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
7
diff
changeset
|
96 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
|
97 従って現在では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
|
98 Perl6は現在有力な処理系であるRakudoから名前を取り\texttt{Raku}という言語名に変更しようという動きが一部存在している. |
5
06f3183ef6c3
add about Perl6
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
4
diff
changeset
|
99 |
06f3183ef6c3
add about Perl6
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
4
diff
changeset
|
100 \subsection{Rakudo} |
06f3183ef6c3
add about Perl6
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
4
diff
changeset
|
101 |
6
6dcf1143dc8f
add about NQP
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
5
diff
changeset
|
102 RakudoとはParrotで構想に上がったNQP,NQPに基づくPerl6を基にしたプロジェクトである. |
6dcf1143dc8f
add about NQP
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
5
diff
changeset
|
103 RakudoがPerl6のコンパイラかつインタプリタであると考えても良い. |
5
06f3183ef6c3
add about Perl6
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
4
diff
changeset
|
104 Rakudoの構成はNQPで記述されたPerl6,NQP自身,そしてNQPを解釈するVMという構成である. |
06f3183ef6c3
add about Perl6
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
4
diff
changeset
|
105 このVMは現在MoarVM,JavaVM,Javascript,GraalVMを選択可能である. |
6
6dcf1143dc8f
add about NQP
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
5
diff
changeset
|
106 NQPで書かれたPerl6のことをRakudoと呼ぶ. |
6dcf1143dc8f
add about NQP
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
5
diff
changeset
|
107 RakudoStarとはこのMoarVM,NQP,Perl6が一体となったパッケージの事である. |
6dcf1143dc8f
add about NQP
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
5
diff
changeset
|
108 |
6dcf1143dc8f
add about NQP
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
5
diff
changeset
|
109 \subsection{NQP} |
13
80944267f9c7
tweak tex and mv footnote sites
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
12
diff
changeset
|
110 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
|
111 NQPはPerl6のサブセットであるため主な文法などはPerl6に準拠しているが幾つか異なる点が存在する. |
6dcf1143dc8f
add about NQP
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
5
diff
changeset
|
112 NQP自身はStage0と呼ばれる名前空間上のモジュールのみ動作環境のVMのバイトコードを必要とするが,それ以外はNQPで記述されておりBootstrappingされている言語である. |
6dcf1143dc8f
add about NQP
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
5
diff
changeset
|
113 その為Rakudoを動作させる為にはMoarVMなどのVM,VMに対応させる様にビルドしたNQPがそれぞれ必要となる. |
6dcf1143dc8f
add about NQP
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
5
diff
changeset
|
114 現在の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
|
115 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
|
116 |
8e80522a88bd
tweek mindmap and wrote table of contents for Paper
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
7
diff
changeset
|
117 Stage0にあるファイルはNQPのコンパイラの構成要素そのものである. |
8e80522a88bd
tweek mindmap and wrote table of contents for Paper
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
7
diff
changeset
|
118 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
|
119 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
|
120 |
10
9c172999d70e
tweak Papers for CbC abstract
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
9
diff
changeset
|
121 実際に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
|
122 |
6dcf1143dc8f
add about NQP
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
5
diff
changeset
|
123 Roastやドキュメントなどによって設計が定まっているPerl6とは異なりNQP自身の設計は今後も変更になる可能性が開発者から公表されている. |
13
80944267f9c7
tweak tex and mv footnote sites
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
12
diff
changeset
|
124 現在の公表されているNQPのオペコードはNQPのGitHubリポジトリ\cite{nqpopcode}に記述されているものである. |
5
06f3183ef6c3
add about Perl6
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
4
diff
changeset
|
125 |
06f3183ef6c3
add about Perl6
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
4
diff
changeset
|
126 |
9
8e80522a88bd
tweek mindmap and wrote table of contents for Paper
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
7
diff
changeset
|
127 \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
|
128 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
|
129 前述した通り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
|
130 従って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
|
131 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
|
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 言語的な特徴としてはPerl5とは違いアトミックに演算を行う事が可能なatom演算子や,すべてがオブジェクトであるオブジェクト指向言語としての進化も見られる. |
6
6dcf1143dc8f
add about NQP
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
5
diff
changeset
|
134 |
13
80944267f9c7
tweak tex and mv footnote sites
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
12
diff
changeset
|
135 \subsection{現在のPerl6} |
80944267f9c7
tweak tex and mv footnote sites
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
12
diff
changeset
|
136 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
|
137 従来は言語仕様は自然言語の仕様書であったが,現在はテストスイートである「Roast\cite{roast}」そのものと定義されている. |
80944267f9c7
tweak tex and mv footnote sites
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
12
diff
changeset
|
138 現在のPerl6の仕様はRoastを確認し,現在rakudo上に実装されている機能を見る場合は公式ドキュメントを確認する. |
6
6dcf1143dc8f
add about NQP
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
5
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 |
10
9c172999d70e
tweak Papers for CbC abstract
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
9
diff
changeset
|
141 \section{CbCによるMoarVM} |
13
80944267f9c7
tweak tex and mv footnote sites
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
12
diff
changeset
|
142 この章では改良を行ったPerl6処理系であるMoarVMについて述べる. |
10
9c172999d70e
tweak Papers for CbC abstract
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
9
diff
changeset
|
143 \subsection{CbCコンパイラによるバグ} |
6
6dcf1143dc8f
add about NQP
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
5
diff
changeset
|
144 |
9
8e80522a88bd
tweek mindmap and wrote table of contents for Paper
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
7
diff
changeset
|
145 \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
|
146 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
|
147 実際にPerl5を始めとしたスクリプト言語とPerl6がどのような処理時間の違いが見られるかを実測する. |
2
a758898008e6
add tex and Makefile
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
148 |
a758898008e6
add tex and Makefile
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
149 |
9
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{単純なループ処理の測定} |
8e80522a88bd
tweek mindmap and wrote table of contents for Paper
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
7
diff
changeset
|
151 % 簡単な例題として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
|
152 % 今回の評価対象として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
|
153 % 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
|
154 % |
8e80522a88bd
tweek mindmap and wrote table of contents for Paper
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
7
diff
changeset
|
155 % \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
|
156 % \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
|
157 % ループ回数 & 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
|
158 % 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
|
159 % 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
|
160 % 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
|
161 % \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
|
162 % \end{table} |
2
a758898008e6
add tex and Makefile
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
163 |
9
8e80522a88bd
tweek mindmap and wrote table of contents for Paper
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
7
diff
changeset
|
164 |
8e80522a88bd
tweek mindmap and wrote table of contents for Paper
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
7
diff
changeset
|
165 \section{今後の課題} |
2
a758898008e6
add tex and Makefile
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
166 |
a758898008e6
add tex and Makefile
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
167 \section{まとめ} |
a758898008e6
add tex and Makefile
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
168 |
a758898008e6
add tex and Makefile
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
169 |
9
8e80522a88bd
tweek mindmap and wrote table of contents for Paper
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
7
diff
changeset
|
170 %å\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
|
171 %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
|
172 |
2
a758898008e6
add tex and Makefile
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
173 |
a758898008e6
add tex and Makefile
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
174 % BibTeX を使用する場合 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
11
ea10413281c5
tweak Makefile and create reference.bib
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
10
diff
changeset
|
175 \nocite{*} |
ea10413281c5
tweak Makefile and create reference.bib
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
10
diff
changeset
|
176 \bibliographystyle{ipsjsort} |
ea10413281c5
tweak Makefile and create reference.bib
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
10
diff
changeset
|
177 \bibliography{reference} |
2
a758898008e6
add tex and Makefile
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
178 |
a758898008e6
add tex and Makefile
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
179 \end{document} |