Mercurial > hg > Events > OSC2019
annotate slide.html @ 5:e87cc0746622
update
author | Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Thu, 18 Apr 2019 17:23:28 +0900 |
parents | 8f21c0f19c09 |
children | f8f9af788fa7 |
rev | line source |
---|---|
0
19155754a586
create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
1 <!DOCTYPE html> |
19155754a586
create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
2 <html> |
19155754a586
create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
3 <head> |
19155754a586
create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
4 <meta http-equiv="content-type" content="text/html;charset=utf-8"> |
19155754a586
create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
5 <title>Perl6の内部表現</title> |
19155754a586
create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
6 |
1 | 7 <meta name="generator" content="Slide Show (S9) v2.5.0 on Ruby 2.4.2 (2017-09-14) [x86_64-darwin16]"> |
8 <meta name="author" content="Takahiro Shimizu" > | |
0
19155754a586
create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
9 |
19155754a586
create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
10 <!-- style sheet links --> |
19155754a586
create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
11 <link rel="stylesheet" href="s6/themes/projection.css" media="screen,projection"> |
19155754a586
create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
12 <link rel="stylesheet" href="s6/themes/screen.css" media="screen"> |
19155754a586
create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
13 <link rel="stylesheet" href="s6/themes/print.css" media="print"> |
19155754a586
create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
14 <link rel="stylesheet" href="s6/themes/blank.css" media="screen,projection"> |
19155754a586
create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
15 |
19155754a586
create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
16 <!-- JS --> |
19155754a586
create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
17 <script src="s6/js/jquery-1.11.3.min.js"></script> |
19155754a586
create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
18 <script src="s6/js/jquery.slideshow.js"></script> |
19155754a586
create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
19 <script src="s6/js/jquery.slideshow.counter.js"></script> |
19155754a586
create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
20 <script src="s6/js/jquery.slideshow.controls.js"></script> |
19155754a586
create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
21 <script src="s6/js/jquery.slideshow.footer.js"></script> |
19155754a586
create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
22 <script src="s6/js/jquery.slideshow.autoplay.js"></script> |
19155754a586
create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
23 |
19155754a586
create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
24 <!-- prettify --> |
19155754a586
create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
25 <link rel="stylesheet" href="scripts/prettify.css"> |
19155754a586
create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
26 <script src="scripts/prettify.js"></script> |
19155754a586
create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
27 |
19155754a586
create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
28 <script> |
19155754a586
create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
29 $(document).ready( function() { |
19155754a586
create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
30 Slideshow.init(); |
19155754a586
create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
31 |
19155754a586
create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
32 $('code').each(function(_, el) { |
19155754a586
create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
33 if (!el.classList.contains('noprettyprint')) { |
19155754a586
create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
34 el.classList.add('prettyprint'); |
19155754a586
create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
35 } |
19155754a586
create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
36 }); |
19155754a586
create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
37 prettyPrint(); |
19155754a586
create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
38 } ); |
19155754a586
create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
39 |
1 | 40 |
0
19155754a586
create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
41 </script> |
19155754a586
create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
42 |
19155754a586
create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
43 <!-- Better Browser Banner for Microsoft Internet Explorer (IE) --> |
19155754a586
create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
44 <!--[if IE]> |
19155754a586
create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
45 <script src="s6/js/jquery.microsoft.js"></script> |
19155754a586
create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
46 <![endif]--> |
19155754a586
create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
47 |
1 | 48 |
0
19155754a586
create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
49 |
19155754a586
create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
50 </head> |
19155754a586
create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
51 <body> |
19155754a586
create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
52 |
19155754a586
create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
53 <div class="layout"> |
19155754a586
create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
54 <div id="header"></div> |
19155754a586
create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
55 <div id="footer"> |
19155754a586
create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
56 <div align="right"> |
19155754a586
create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
57 <img src="s6/images/logo.svg" width="200px"> |
19155754a586
create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
58 </div> |
19155754a586
create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
59 </div> |
19155754a586
create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
60 </div> |
19155754a586
create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
61 |
19155754a586
create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
62 <div class="presentation"> |
19155754a586
create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
63 |
19155754a586
create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
64 <div class='slide cover'> |
19155754a586
create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
65 <table width="90%" height="90%" border="0" align="center"> |
19155754a586
create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
66 <tr> |
19155754a586
create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
67 <td> |
19155754a586
create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
68 <div align="center"> |
1 | 69 <h1><font color="#808db5">Perl6の内部表現</font></h1> |
0
19155754a586
create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
70 </div> |
19155754a586
create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
71 </td> |
19155754a586
create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
72 </tr> |
19155754a586
create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
73 <tr> |
19155754a586
create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
74 <td> |
19155754a586
create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
75 <div align="left"> |
1 | 76 Takahiro Shimizu |
77 | |
0
19155754a586
create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
78 <hr style="color:#ffcc00;background-color:#ffcc00;text-align:left;border:none;width:100%;height:0.2em;"> |
19155754a586
create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
79 </div> |
19155754a586
create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
80 </td> |
19155754a586
create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
81 </tr> |
19155754a586
create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
82 </table> |
19155754a586
create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
83 </div> |
19155754a586
create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
84 |
1 | 85 <div class='slide '> |
86 <!-- === begin markdown block === | |
0
19155754a586
create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
87 |
1 | 88 generated by markdown/1.2.0 on Ruby 2.4.2 (2017-09-14) [x86_64-darwin16] |
5 | 89 on 2019-04-18 17:22:44 +0900 with Markdown engine kramdown (1.16.2) |
1 | 90 using options {} |
91 --> | |
92 <h2 id="section">このセッションの内容</h2> | |
93 | |
94 <ul> | |
95 <li>Perl6の主要な実装であるRakudoの内部構造を探ります</li> | |
96 <li>Rakudoの内部で利用されているVMや, Perl6のサブセットなどについて探索します</li> | |
3 | 97 <li>スクリプト言語で主に使われているバイトコードインタプリタの気持ちになります</li> |
1 | 98 </ul> |
0
19155754a586
create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
99 |
1 | 100 </div> |
101 <div class='slide '> | |
102 <!-- _S9SLIDE_ --> | |
103 | |
104 <h2 id="perl6">Perl6とは</h2> | |
105 <ul> | |
106 <li>当初Perl5の時期バージョンとして開発されていたプログラミング言語</li> | |
107 <li>仕様と実装が分離しており, 現在はテストが仕様となっている</li> | |
108 <li>実装は複数存在しているが,現在主流な実装はRakudoとなっている</li> | |
109 <li>言語的にはスクリプト言語であり, 漸進的型付き言語となっている</li> | |
2 | 110 <li>MoarVM, JVMで動作する</li> |
1 | 111 </ul> |
112 | |
2 | 113 <p><img src="2000px-Camelia.svg.png" alt="" style="width: 31%; height: auto;" /></p> |
114 | |
1 | 115 </div> |
116 <div class='slide '> | |
117 <!-- _S9SLIDE_ --> | |
118 | |
119 <h2 id="perl6-1">Perl6のソースコード概要</h2> | |
0
19155754a586
create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
120 |
19155754a586
create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
121 <ul> |
1 | 122 <li>Perl5の文法とは比較的変更が多い</li> |
123 <li>変数がオブジェクトと化した事により, 変数からsayメソッドを呼ぶことが可能</li> | |
124 </ul> | |
125 | |
126 <pre><code>my $str_value = 'hello world!'; | |
127 $str_value.say; # hello world! | |
128 </code></pre> | |
129 | |
130 <ul> | |
131 <li>Perl5と同様に,変数にはデフォルトでは型がないような振る舞いをする</li> | |
0
19155754a586
create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
132 </ul> |
19155754a586
create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
133 |
1 | 134 <pre><code>my $sample_value = 'hello world!'; |
135 $sample_value.say; # hello world! | |
0
19155754a586
create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
136 |
1 | 137 $sample_value = '31'; |
138 $sample_value.say; # 31 | |
139 | |
140 say($sample_value * 3); | |
141 </code></pre> | |
142 | |
143 </div> | |
144 <div class='slide '> | |
145 <!-- _S9SLIDE_ --> | |
146 | |
147 <h2 id="perl6-2">Perl6の言語的な特徴</h2> | |
148 | |
149 <ul> | |
150 <li>漸進的型付き言語である為, 型を強制することも可能となる</li> | |
151 </ul> | |
152 | |
153 <pre><code>my Int $int_value = 31; | |
154 $int_value = "hello"; # Compile error! | |
155 </code></pre> | |
2 | 156 |
157 </div> | |
158 <div class='slide '> | |
159 <!-- _S9SLIDE_ --> | |
160 | |
4 | 161 <h2 id="perl6-3">Perl6の言語的な特徴</h2> |
162 | |
163 <ul> | |
164 <li>型を独自に定義することも可能</li> | |
165 <li>入力の型によって実行する関数を変える事などができる</li> | |
166 </ul> | |
167 | |
168 <pre lang="perl6"><code>my subset Fizz of Int where * %% 3; | |
169 my subset Buzz of Int where * %% 5; | |
170 my subset FizzBuzz of Int where Fizz&Buzz; | |
171 my subset Number of Int where none Fizz|Buzz; | |
172 | |
173 proto sub fizzbuzz ($) { * } | |
174 multi sub fizzbuzz (FizzBuzz) { "FuzzBuzz" } | |
175 multi sub fizzbuzz (Fizz) { "Fizz" } | |
176 multi sub fizzbuzz (Buzz) { "Buzz" } | |
177 multi sub fizzbuzz (Number $number) { $number } | |
178 | |
179 fizzbuzz($_).say for 1..15; | |
180 </code></pre> | |
181 | |
182 </div> | |
183 <div class='slide '> | |
184 <!-- _S9SLIDE_ --> | |
185 | |
186 <h2 id="perl6-4">Perl6の処理系の構成</h2> | |
2 | 187 |
188 <ul> | |
189 <li>Perl6の処理系は現在はRakudoと呼ばれる(歴史上複数存在する)</li> | |
190 <li>Rakudoは3つのレイヤーから構成されている | |
191 <ul> | |
192 <li>Perl6インタプリタ</li> | |
193 <li>Perl6インタプリタを記述するPerl6のサブセットNQP</li> | |
194 <li>Perl6のバイトコードを解釈するMoarVM</li> | |
195 </ul> | |
196 </li> | |
197 <li>このうちPerl6インタプリタとNQPはNQP自身で記述されている</li> | |
198 <li>MoarVMはC言語で記述されている</li> | |
199 </ul> | |
200 | |
201 </div> | |
202 <div class='slide '> | |
203 <!-- _S9SLIDE_ --> | |
204 | |
205 <h2 id="perl6nqp">Perl6とNQP</h2> | |
206 | |
207 <ul> | |
208 <li>NQP(NotQuitPerl Perlっぽい別の言語)でRakudoを記述している</li> | |
209 <li>NQPもNQPで記述されている為、 セルフビルド(自分自身で自分自身をコンパイルする)を行う</li> | |
210 <li>NQPはPerl6の文法をベースにしているが、 制約がいくつか存在する</li> | |
211 </ul> | |
212 | |
4 | 213 <pre><code>#! nqp |
214 sub fib($n) { | |
215 $n < 2 ?? $n !! fib($n-1) + fib($n - 2); | |
216 } | |
217 | |
218 my $N := 29; | |
219 | |
220 my $t0 := nqp::time_n(); | |
221 my $z := fib($N); | |
222 my $t1 := nqp::time_n(); | |
223 | |
224 nqp::say("fib($N) = " ~ fib($N)); | |
225 nqp::say("time = " ~ ($t1-$t0)); | |
226 </code></pre> | |
227 | |
2 | 228 </div> |
229 <div class='slide '> | |
230 <!-- _S9SLIDE_ --> | |
231 | |
232 <h2 id="section-1">バイトコード</h2> | |
233 <ul> | |
3 | 234 <li>最近のスクリプト言語は、 ソースコードを直接解釈せず、バイトコードに変換する |
235 <ul> | |
5 | 236 <li>全体的な処理速度の向上の為</li> |
237 <li>実装を分離することでの見通しの良さ</li> | |
238 </ul> | |
239 </li> | |
240 <li>多言語の環境 | |
241 <ul> | |
242 <li>Ruby | |
243 <ul> | |
244 <li>YARV</li> | |
245 </ul> | |
246 </li> | |
247 <li>Python | |
248 <ul> | |
249 <li>PythonVM</li> | |
250 </ul> | |
251 </li> | |
252 <li>Elixir | |
253 <ul> | |
254 <li>BEAM</li> | |
255 </ul> | |
256 </li> | |
3 | 257 </ul> |
258 </li> | |
259 <li>Perl6も、Rakudo/NQPはバイトコードに変換され、 バイトコードをVMが実行する</li> | |
2 | 260 <li>バイトコード実行部分は、 命令に対応するバイト列を読み込み、 解釈し、 次の命令を読み取ることを繰り返す</li> |
261 </ul> | |
262 | |
1 | 263 <!-- === end markdown block === --> |
0
19155754a586
create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
264 </div> |
19155754a586
create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
265 |
19155754a586
create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
266 |
19155754a586
create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
267 </div><!-- presentation --> |
19155754a586
create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
268 </body> |
19155754a586
create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
269 </html> |