comparison slide.md @ 4:8f21c0f19c09

update
author Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
date Wed, 17 Apr 2019 19:03:18 +0900
parents e43f47edd11a
children e87cc0746622
comparison
equal deleted inserted replaced
3:e43f47edd11a 4:8f21c0f19c09
51 my Int $int_value = 31; 51 my Int $int_value = 31;
52 $int_value = "hello"; # Compile error! 52 $int_value = "hello"; # Compile error!
53 ``` 53 ```
54 54
55 !SLIDE 55 !SLIDE
56 ## Perl6の言語的な特徴
57
58 - 型を独自に定義することも可能
59 - 入力の型によって実行する関数を変える事などができる
60
61 ```perl6
62 my subset Fizz of Int where * %% 3;
63 my subset Buzz of Int where * %% 5;
64 my subset FizzBuzz of Int where Fizz&Buzz;
65 my subset Number of Int where none Fizz|Buzz;
66
67 proto sub fizzbuzz ($) { * }
68 multi sub fizzbuzz (FizzBuzz) { "FuzzBuzz" }
69 multi sub fizzbuzz (Fizz) { "Fizz" }
70 multi sub fizzbuzz (Buzz) { "Buzz" }
71 multi sub fizzbuzz (Number $number) { $number }
72
73 fizzbuzz($_).say for 1..15;
74 ```
75
76 !SLIDE
56 ## Perl6の処理系の構成 77 ## Perl6の処理系の構成
57 78
58 - Perl6の処理系は現在はRakudoと呼ばれる(歴史上複数存在する) 79 - Perl6の処理系は現在はRakudoと呼ばれる(歴史上複数存在する)
59 - Rakudoは3つのレイヤーから構成されている 80 - Rakudoは3つのレイヤーから構成されている
60 - Perl6インタプリタ 81 - Perl6インタプリタ
68 89
69 - NQP(NotQuitPerl Perlっぽい別の言語)でRakudoを記述している 90 - NQP(NotQuitPerl Perlっぽい別の言語)でRakudoを記述している
70 - NQPもNQPで記述されている為、 セルフビルド(自分自身で自分自身をコンパイルする)を行う 91 - NQPもNQPで記述されている為、 セルフビルド(自分自身で自分自身をコンパイルする)を行う
71 - NQPはPerl6の文法をベースにしているが、 制約がいくつか存在する 92 - NQPはPerl6の文法をベースにしているが、 制約がいくつか存在する
72 93
94 ```
95 #! nqp
96 sub fib($n) {
97 $n < 2 ?? $n !! fib($n-1) + fib($n - 2);
98 }
99
100 my $N := 29;
101
102 my $t0 := nqp::time_n();
103 my $z := fib($N);
104 my $t1 := nqp::time_n();
105
106 nqp::say("fib($N) = " ~ fib($N));
107 nqp::say("time = " ~ ($t1-$t0));
108 ```
109
73 !SLIDE 110 !SLIDE
74 ## バイトコード 111 ## バイトコード
75 - 最近のスクリプト言語は、 ソースコードを直接解釈せず、バイトコードに変換する 112 - 最近のスクリプト言語は、 ソースコードを直接解釈せず、バイトコードに変換する
76 - 主に速度改善が目的となっている 113 - 主に速度改善が目的となっている
77 - Perl6も、Rakudo/NQPはバイトコードに変換され、 バイトコードをVMが実行する 114 - Perl6も、Rakudo/NQPはバイトコードに変換され、 バイトコードをVMが実行する