# HG changeset patch # User Takahiro SHIMIZU # Date 1555495398 -32400 # Node ID 8f21c0f19c099b23b5881f3d05ce11ad929fe9e4 # Parent e43f47edd11ac47f358d5e6775b7c8d5ec8ba378 update diff -r e43f47edd11a -r 8f21c0f19c09 slide.html --- a/slide.html Tue Apr 16 19:04:05 2019 +0900 +++ b/slide.html Wed Apr 17 19:03:18 2019 +0900 @@ -86,7 +86,7 @@

このセッションの内容

@@ -158,7 +158,32 @@
-

Perl6の処理系の構成

+

Perl6の言語的な特徴

+ + + +
my subset Fizz of Int where * %% 3;
+my subset Buzz of Int where * %% 5;
+my subset FizzBuzz of Int where Fizz&Buzz;
+my subset Number of Int where none Fizz|Buzz;
+
+proto sub fizzbuzz ($) { * }
+multi sub fizzbuzz (FizzBuzz) { "FuzzBuzz" }
+multi sub fizzbuzz (Fizz) { "Fizz" }
+multi sub fizzbuzz (Buzz) { "Buzz" }
+multi sub fizzbuzz (Number $number) { $number }
+
+fizzbuzz($_).say for 1..15;
+
+ +
+
+ + +

Perl6の処理系の構成

+
#! nqp
+sub fib($n) {
+    $n < 2 ?? $n !! fib($n-1) + fib($n - 2);
+}
+
+my $N := 29;
+
+my $t0 := nqp::time_n();
+my $z  := fib($N);
+my $t1 := nqp::time_n();
+
+nqp::say("fib($N) = " ~ fib($N));
+nqp::say("time    = " ~ ($t1-$t0));
+
+
diff -r e43f47edd11a -r 8f21c0f19c09 slide.md --- a/slide.md Tue Apr 16 19:04:05 2019 +0900 +++ b/slide.md Wed Apr 17 19:03:18 2019 +0900 @@ -53,6 +53,27 @@ ``` !SLIDE +## Perl6の言語的な特徴 + +- 型を独自に定義することも可能 +- 入力の型によって実行する関数を変える事などができる + +```perl6 +my subset Fizz of Int where * %% 3; +my subset Buzz of Int where * %% 5; +my subset FizzBuzz of Int where Fizz&Buzz; +my subset Number of Int where none Fizz|Buzz; + +proto sub fizzbuzz ($) { * } +multi sub fizzbuzz (FizzBuzz) { "FuzzBuzz" } +multi sub fizzbuzz (Fizz) { "Fizz" } +multi sub fizzbuzz (Buzz) { "Buzz" } +multi sub fizzbuzz (Number $number) { $number } + +fizzbuzz($_).say for 1..15; +``` + +!SLIDE ## Perl6の処理系の構成 - Perl6の処理系は現在はRakudoと呼ばれる(歴史上複数存在する) @@ -70,6 +91,22 @@ - NQPもNQPで記述されている為、 セルフビルド(自分自身で自分自身をコンパイルする)を行う - NQPはPerl6の文法をベースにしているが、 制約がいくつか存在する +``` +#! nqp +sub fib($n) { + $n < 2 ?? $n !! fib($n-1) + fib($n - 2); +} + +my $N := 29; + +my $t0 := nqp::time_n(); +my $z := fib($N); +my $t1 := nqp::time_n(); + +nqp::say("fib($N) = " ~ fib($N)); +nqp::say("time = " ~ ($t1-$t0)); +``` + !SLIDE ## バイトコード - 最近のスクリプト言語は、 ソースコードを直接解釈せず、バイトコードに変換する diff -r e43f47edd11a -r 8f21c0f19c09 slide.pdf.html --- a/slide.pdf.html Tue Apr 16 19:04:05 2019 +0900 +++ b/slide.pdf.html Wed Apr 17 19:03:18 2019 +0900 @@ -70,7 +70,7 @@

このセッションの内容

@@ -142,7 +142,32 @@
-

Perl6の処理系の構成

+

Perl6の言語的な特徴

+ +
    +
  • 型を独自に定義することも可能
  • +
  • 入力の型によって実行する関数を変える事などができる
  • +
+ +
my subset Fizz of Int where * %% 3;
+my subset Buzz of Int where * %% 5;
+my subset FizzBuzz of Int where Fizz&Buzz;
+my subset Number of Int where none Fizz|Buzz;
+
+proto sub fizzbuzz ($) { * }
+multi sub fizzbuzz (FizzBuzz) { "FuzzBuzz" }
+multi sub fizzbuzz (Fizz) { "Fizz" }
+multi sub fizzbuzz (Buzz) { "Buzz" }
+multi sub fizzbuzz (Number $number) { $number }
+
+fizzbuzz($_).say for 1..15;
+
+ +
+
+ + +

Perl6の処理系の構成

  • Perl6の処理系は現在はRakudoと呼ばれる(歴史上複数存在する)
  • @@ -169,6 +194,21 @@
  • NQPはPerl6の文法をベースにしているが、 制約がいくつか存在する
+
#! nqp
+sub fib($n) {
+    $n < 2 ?? $n !! fib($n-1) + fib($n - 2);
+}
+
+my $N := 29;
+
+my $t0 := nqp::time_n();
+my $z  := fib($N);
+my $t1 := nqp::time_n();
+
+nqp::say("fib($N) = " ~ fib($N));
+nqp::say("time    = " ~ ($t1-$t0));
+
+