annotate slide.md @ 3:e43f47edd11a

update
author Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
date Tue, 16 Apr 2019 19:04:05 +0900
parents 41f44d102cf9
children 8f21c0f19c09
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
19155754a586 create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1 title: Perl6の内部表現
19155754a586 create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2 author: Takahiro Shimizu
19155754a586 create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
3 profile:
19155754a586 create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
4 lang: Japanese
19155754a586 create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
5
19155754a586 create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
6 ## このセッションの内容
19155754a586 create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
7
1
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
8 - Perl6の主要な実装であるRakudoの内部構造を探ります
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
9 - Rakudoの内部で利用されているVMや, Perl6のサブセットなどについて探索します
3
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
10 - スクリプト言語で主に使われているバイトコードインタプリタの気持ちになります
1
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
11
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
12 !SLIDE
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
13 ## Perl6とは
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
14 - 当初Perl5の時期バージョンとして開発されていたプログラミング言語
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
15 - 仕様と実装が分離しており, 現在はテストが仕様となっている
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
16 - 実装は複数存在しているが,現在主流な実装はRakudoとなっている
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
17 - 言語的にはスクリプト言語であり, 漸進的型付き言語となっている
2
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
18 - MoarVM, JVMで動作する
1
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
19
2
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
20 <img src="2000px-Camelia.svg.png" alt="" style="width: 31%; height: auto;">
1
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
21
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
22 !SLIDE
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
23 ## Perl6のソースコード概要
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
24
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
25 - Perl5の文法とは比較的変更が多い
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
26 - 変数がオブジェクトと化した事により, 変数からsayメソッドを呼ぶことが可能
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
27
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
28 ```
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
29 my $str_value = 'hello world!';
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
30 $str_value.say; # hello world!
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
31 ```
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
32
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
33 - Perl5と同様に,変数にはデフォルトでは型がないような振る舞いをする
0
19155754a586 create OSC2019 slide template
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
34
1
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
35 ```
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
36 my $sample_value = 'hello world!';
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
37 $sample_value.say; # hello world!
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
38
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
39 $sample_value = '31';
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
40 $sample_value.say; # 31
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
41
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
42 say($sample_value * 3);
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
43 ```
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
44
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
45 !SLIDE
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
46 ## Perl6の言語的な特徴
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
47
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
48 - 漸進的型付き言語である為, 型を強制することも可能となる
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
49
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
50 ```
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
51 my Int $int_value = 31;
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
52 $int_value = "hello"; # Compile error!
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
53 ```
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
54
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
55 !SLIDE
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
56 ## Perl6の処理系の構成
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
57
2
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
58 - Perl6の処理系は現在はRakudoと呼ばれる(歴史上複数存在する)
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
59 - Rakudoは3つのレイヤーから構成されている
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
60 - Perl6インタプリタ
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
61 - Perl6インタプリタを記述するPerl6のサブセットNQP
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
62 - Perl6のバイトコードを解釈するMoarVM
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
63 - このうちPerl6インタプリタとNQPはNQP自身で記述されている
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
64 - MoarVMはC言語で記述されている
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
65
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
66 !SLIDE
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
67 ## Perl6とNQP
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
68
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
69 - NQP(NotQuitPerl Perlっぽい別の言語)でRakudoを記述している
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
70 - NQPもNQPで記述されている為、 セルフビルド(自分自身で自分自身をコンパイルする)を行う
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
71 - NQPはPerl6の文法をベースにしているが、 制約がいくつか存在する
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
72
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
73 !SLIDE
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
74 ## バイトコード
3
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
75 - 最近のスクリプト言語は、 ソースコードを直接解釈せず、バイトコードに変換する
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
76 - 主に速度改善が目的となっている
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
77 - Perl6も、Rakudo/NQPはバイトコードに変換され、 バイトコードをVMが実行する
2
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
78 - バイトコード実行部分は、 命令に対応するバイト列を読み込み、 解釈し、 次の命令を読み取ることを繰り返す
Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
79