Mercurial > hg > Papers > 2019 > koo-prosym
comparison Slide/Slide.pdf.html @ 8:3343b5914245
add Slide
author | e165727 <e165727@ie.u-ryukyu.ac.jp> |
---|---|
date | Wed, 25 Dec 2019 16:10:22 +0900 |
parents | 126266fc2c30 |
children | 480229d0ea65 |
comparison
equal
deleted
inserted
replaced
7:126266fc2c30 | 8:3343b5914245 |
---|---|
93 <h2 id="研究概要">研究概要</h2> | 93 <h2 id="研究概要">研究概要</h2> |
94 <ul> | 94 <ul> |
95 <li>Perl6 の実装の一つであるRakudoは、Byte code である MoarVM と、それ上で動作する Perl6 のsubsetであるnqp (Not Quite Perl)上に構成されている。</li> | 95 <li>Perl6 の実装の一つであるRakudoは、Byte code である MoarVM と、それ上で動作する Perl6 のsubsetであるnqp (Not Quite Perl)上に構成されている。</li> |
96 <li>現状のPerl6の実行はPerl6で記述されたコンパイラをloadしてJITしながら実行すること自体に時間がかかっている。</li> | 96 <li>現状のPerl6の実行はPerl6で記述されたコンパイラをloadしてJITしながら実行すること自体に時間がかかっている。</li> |
97 <li>そこで、Perl6をサーバとして動作させ、実行するファイルをサーバに投げて実行する方法を検討する</li> | 97 <li>そこで、Perl6をサーバとして動作させ、実行するファイルをサーバに投げて実行する方法を検討する</li> |
98 </ul> | 98 <li>同一ホスト内で終了せずに実行を続けるサーバープロセスを立ち上げ, このサーバープロセス上で立ち上げておいたコンパイラに実行するファイル名を転送し, サーバー上でコンパイルを行う手法を提案し実装する.</li> |
99 | 99 </ul> |
100 | 100 |
101 | 101 |
102 </div> | 102 |
103 | 103 </div> |
104 <div class='slide'> | 104 |
105 <!-- _S9SLIDE_ --> | 105 <div class='slide'> |
106 <h2 id="perl6-による-abyss-の実装">Perl6 による Abyss の実装</h2> | 106 <!-- _S9SLIDE_ --> |
107 <h2 id="perl6raku">Perl6(Raku)</h2> | |
108 | |
109 | |
110 | |
111 </div> | |
112 | |
113 <div class='slide'> | |
114 <!-- _S9SLIDE_ --> | |
115 <h2 id="rakudo">Rakudo</h2> | |
116 <ul> | |
117 <li>Rakudoとは現在のPerl6の主力な実装である.</li> | |
118 <li>Rakudo は MoarVM, と NQP と呼ばれる Perl6 のサブセット, NQP と Perl6 自身で記述された Perl6 という構成である.</li> | |
119 </ul> | |
120 | |
121 <p><img src="fig/Rakudo.pdf" alt="" /></p> | |
122 <ul> | |
123 <li>Rakudoの構成</li> | |
124 </ul> | |
125 | |
126 | |
127 | |
128 </div> | |
129 | |
130 <div class='slide'> | |
131 <!-- _S9SLIDE_ --> | |
132 <h2 id="nqp">NQP</h2> | |
133 | |
134 | |
135 | |
136 </div> | |
137 | |
138 <div class='slide'> | |
139 <!-- _S9SLIDE_ --> | |
140 <h2 id="perl6-による-abyssサーバーの実装">Perl6 による Abyssサーバーの実装</h2> | |
141 <ul> | |
142 <li>提案手法に沿い『Abyssサーバー』を実装した.</li> | |
143 <li>Abyssサーバーはクライアント側から投げられた Perl6 を実行するためのサーバーである.</li> | |
144 <li>下記の図は,Abyss サーバーを用いたスクリプト言語の実行手順である.</li> | |
145 </ul> | |
146 | |
147 <p><img src="fig/abyss.pdf" alt="" /></p> | |
148 | |
149 | |
150 | |
151 </div> | |
152 | |
153 <div class='slide'> | |
154 <!-- _S9SLIDE_ --> | |
155 <h2 id="abyss-server側の実装">Abyss Server側の実装</h2> | |
156 <ul> | |
157 <li>Abyss サーバーは起動すると, まず自身にファイル パスを転送するためのソケットを生成し, その後 ファイルを受け取るための待機ループに入る.</li> | |
158 </ul> | |
107 | 159 |
108 <pre><code>unit class Abyss::Server:ver<0.0.1>; | 160 <pre><code>unit class Abyss::Server:ver<0.0.1>; |
109 use MONKEY-SEE-NO-EVAL; | 161 use MONKEY-SEE-NO-EVAL; |
110 | 162 |
111 method readeval { | 163 method readeval { |
128 | 180 |
129 </div> | 181 </div> |
130 | 182 |
131 <div class='slide'> | 183 <div class='slide'> |
132 <!-- _S9SLIDE_ --> | 184 <!-- _S9SLIDE_ --> |
133 <h2 id="todo">Todo</h2> | 185 <h2 id="abyss-client側の実装">Abyss Client側の実装</h2> |
186 <ul> | |
187 <li>ユーザーはAbyssのサーバーを起動後,ファイルパスをサーバーに送信する.</li> | |
188 </ul> | |
189 | |
190 <pre><code>my $conn = IO::Socket::INET.new( :host<localhost>, | |
191 :port(3333) ); | |
192 | |
193 $conn.print: 'FILEPASS'; | |
194 </code></pre> | |
195 | |
196 | |
197 | |
198 </div> | |
199 | |
200 <div class='slide'> | |
201 <!-- _S9SLIDE_ --> | |
202 <h2 id="perl6のeval">Perl6のEVAL</h2> | |
203 <ul> | |
204 <li>Perl6 では EVAL 関数があり文字列を Perl6 のソースコード自身として評価できる</li> | |
205 <li>Perl6 では, EVAL は通常は使用できないようになっており, MONKEY-SEE-NO-EVAL という pragma を実行することで使うことができるようになる.</li> | |
206 </ul> | |
207 | |
208 <pre><code>use MONKEY-SEE-NO-EVAL; | |
209 | |
210 EVAL "say { 5 + 5 }"; # OUTPUT: 10 | |
211 </code></pre> | |
212 | |
213 | |
214 | |
215 </div> | |
216 | |
217 <div class='slide'> | |
218 <!-- _S9SLIDE_ --> | |
219 <h2 id="まとめと今後の課題">まとめと今後の課題</h2> | |
220 <ul> | |
221 <li>Perl6 の新たな実行方法の提案,及び実装を行なった.</li> | |
222 </ul> | |
134 | 223 |
135 </div> | 224 </div> |
136 | 225 |
137 | 226 |
138 </div><!-- presentation --> | 227 </div><!-- presentation --> |