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