SlideShare a Scribd company logo
1 of 21
Download to read offline
.
 .
                              Perl6 で遊ぼう

                        青木大祐 / @VienosNotes
                                 情報科学類


                              Tsukuba.pm #2




青木大祐 / @VienosNotes (情報科学類)      Perl6 で遊ぼう   Tsukuba.pm #2   1 / 21
概要

        Perl6 とは?


                Perl5 との違い

                Perl6 のオモシロ機能



        今までの経緯とこれからの話




青木大祐 / @VienosNotes (情報科学類)   Perl6 で遊ぼう   Tsukuba.pm #2   2 / 21
Perl6 とは?

        Perl5 との後方互換性を切り捨てた新しい言語

        Perl5 を置き換えるものではない
                開発もコミュニティも別ライン

        モダンなプログラミング技法を取り入れる
                真っ当なクラスベースのオブジェクト指向
                充実したメタプログラミング
                その他の先進的 (?) な機能


        仕様ベースの開発

青木大祐 / @VienosNotes (情報科学類)     Perl6 で遊ぼう   Tsukuba.pm #2   3 / 21
要するに…




               Larry Wall の考えた
             最強のプログラミング言語




青木大祐 / @VienosNotes (情報科学類)    Perl6 で遊ぼう   Tsukuba.pm #2   4 / 21
Perl5 との違い


        コンテキストは無くなり、シジルは分かりやすく
                配列の要素にアクセスするときも@を使う
        メソッド呼び出しは − > ではなく. に
        みんなオブジェクトに
                リテラル
                クラスのインスタンス
                関数
        特殊変数も再編
        ある程度の標準ライブラリがある


青木大祐 / @VienosNotes (情報科学類)      Perl6 で遊ぼう   Tsukuba.pm #2   5 / 21
現状どうなってるか

        提唱されたのは 2000 年
        10 年以上経ったが、未だ完成していない
        完成してないので、当然普及もしてない
                Perl 歴が長い人は「そんなの言ってた時代もあったね」
                最近の人は「何それ?聞いたことも無い」


          世間様からは完全に             オワコン扱い

 →しかし、言語的に見ると結構面白い機能が多い
青木大祐 / @VienosNotes (情報科学類)   Perl6 で遊ぼう   Tsukuba.pm #2   6 / 21
オモシロ機能




        型制約
        関数リテラル
        Junction
        Grammer




青木大祐 / @VienosNotes (情報科学類)    Perl6 で遊ぼう   Tsukuba.pm #2   7 / 21
型制約


        変数や関数の引数にデータ型の制約を書くことが
        できる

        引数の型によって呼ぶディスパッチを決定できる
                実行時オーバーロード

        制約を満たさない型を検出すると、実行時例外を
        投げる
                静的型付け(コンパイル時検査)ではない



青木大祐 / @VienosNotes (情報科学類)   Perl6 で遊ぼう   Tsukuba.pm #2   8 / 21
型制約:変数




 1    my Int $i = 1;
 2    # ok
 3
 4    my Str $s = 1;
 5    # Type check failed in assignment to ’$s ’; expected ’Str ’ but
          got ’Int ’




青木大祐 / @VienosNotes (情報科学類)      Perl6 で遊ぼう                  Tsukuba.pm #2   9 / 21
型制約:関数

 1   sub f (Int $i) returns Int { return $i * 2; }
 2
 3   say f(1);
 4   #> 2
 5
 6   say f("piyo")
 7   #> CHECK FAILED :
 8   #> Calling ’f’ will never work with argument types (str)
 9   #>     Expected : :( Int $i)
10
11   multi sub g (Int $i) { return $i * 2; }
12   multi sub g (Str $s) { return $s x 2; }
13
14   say g(1);
15   #> 2
16   say g("s");
17   #> ss




青木大祐 / @VienosNotes (情報科学類)     Perl6 で遊ぼう                 Tsukuba.pm #2   10 / 21
関数リテラル




        map に渡すコールバック関数など、Perl 的記述に
        置いて関数リテラルを記述する機会は多い
        簡潔な記述を実現するため、複数の方法が用意さ
        れている




青木大祐 / @VienosNotes (情報科学類)    Perl6 で遊ぼう   Tsukuba.pm #2   11 / 21
Pointy Block




 1     (1..10) .map: -> Int $a { $a ** 2 };



        矢印に続けて引数リスト、その後に本体を書く
        見た目が格好良いので使う機会が多い




青木大祐 / @VienosNotes (情報科学類)      Perl6 で遊ぼう   Tsukuba.pm #2   12 / 21
Whatever Star



 1     say (1..10) .map: * ** 2;



        *に Perl5 で言うところの$ が暗黙的に代入される
        記述量は非常に少ないが、見た目が悪魔的で少し
        戸惑う




青木大祐 / @VienosNotes (情報科学類)        Perl6 で遊ぼう   Tsukuba.pm #2   13 / 21
Placeholder Variables




 1    say (1..10) .map: { $ˆa ** 2 };



        $ˆで始まる変数に、引数が順に格納されて行く
        代入される変数は辞書順で決まる




青木大祐 / @VienosNotes (情報科学類)      Perl6 で遊ぼう    Tsukuba.pm #2   14 / 21
Junction


 変数 i が 0 か 1 であるという処理を、普通はこう書く
 1    if ($i == 0 | $i == 1) { ... }


 直感的にはこのように書きたい
 1    if ($i == 0 | 1) { ... }



        これを可能にするのが Junction
        「0 か 1 である」という状態をオブジェクトとし
        て保持する



青木大祐 / @VienosNotes (情報科学類)      Perl6 で遊ぼう   Tsukuba.pm #2   15 / 21
Junction の要素について、手続きを平行して適用した
 後で、(OR ジャンクションなら) 論理和を取る。

 1    if ($s ˜˜ / pattern1 / | / pattern2 /) { ... }
 2    # if $s matches pattern1 or pattern2



        バックトラックしないので高速(かもしれない)
        (処理系が対応していれば) 並列で実行される
                順番に依存する処理は出来ない




青木大祐 / @VienosNotes (情報科学類)        Perl6 で遊ぼう          Tsukuba.pm #2   16 / 21
Grammar




        PEG(解析表現文法) をベースとした文字列パース
        機能
        ふつうの正規表現よりも柔軟な記述が可能




青木大祐 / @VienosNotes (情報科学類)    Perl6 で遊ぼう   Tsukuba.pm #2   17 / 21
以前書いた Lisp の (不完全な) パーザ
 1       grammar Lisp {
 2         token left { ’(’ };
 3         token right { ’)’ };
 4         token num { d+ }
 5         token str { ’" ’w+’"’ }
 6         token literal { <num >|| <str > }
 7         token nil { ’nil ’|’(’ <.ws > ’)’ }
 8         rule ne_sexpr { <atom > || <.left > [<ne_sexpr >+? % <.ws >] [<
               dot > <.ws > <ne_sexpr >]? <.right > }
 9         token spform { ’cond ’ | ’if ’ | ’define ’ | ’quote ’ }
10         rule sp_sexpr { <.left > <spform > [<ne_sexpr >+? % <.ws>] <.
               right > }
11
12         token symbol { w+ }
13         token atom { <literal >|| <nil >|| <spform >|| <symbol > }
14
15         token dot { ’.’ }
16         rule sexpr { <atom > || <sp_sexpr > || <.left > [<sexpr >+? % <
               .ws >] [<dot > <.ws > <sexpr >]? <.right > }
17         rule TOP { ˆˆ [<sexpr > || <ne_sexpr >] $$ }
18   }

青木大祐 / @VienosNotes (情報科学類)           Perl6 で遊ぼう                   Tsukuba.pm #2   18 / 21
Grammar



        要するに構造を持った名前付き正規表現
        部分文字列を取り出すのも簡単
        バックトラックの枝刈りも効率が良い (らしい)
        明確な構造を持った文字列 (JSON, csv, etc...) の
        パーザが簡潔に書ける




青木大祐 / @VienosNotes (情報科学類)    Perl6 で遊ぼう   Tsukuba.pm #2   19 / 21
オモシロ機能を見てきた訳ですが

 なぜオワコンと呼ばれるに至ったのか?
        開発が遅い
                皆に飽きられてる
        動作が遅い
                製品としては実用にならないレベル
        仕様が固まっていない
                いつまで経っても 1.0 がリリースされない



           そもそもコミュニティが無い

青木大祐 / @VienosNotes (情報科学類)   Perl6 で遊ぼう   Tsukuba.pm #2   20 / 21
じゃあコミュニティ作りましょう



        実は Perl6 勉強会を去年やりました
        今年もやりたい
                参加者募集中です
                今年はドキュメント (入門書、仕様書の翻訳) 書きたい

        →二学期からは月1くらいでゆるゆるやります




青木大祐 / @VienosNotes (情報科学類)   Perl6 で遊ぼう   Tsukuba.pm #2   21 / 21

More Related Content

What's hot

Computation Expressions for Haxe
Computation Expressions for HaxeComputation Expressions for Haxe
Computation Expressions for Haxeterurou
 
Functional Pearl + Brainfuck
Functional Pearl + BrainfuckFunctional Pearl + Brainfuck
Functional Pearl + BrainfuckEita Sugimoto
 
F#入門 ~関数プログラミングとは何か~
F#入門 ~関数プログラミングとは何か~F#入門 ~関数プログラミングとは何か~
F#入門 ~関数プログラミングとは何か~Nobuhisa Koizumi
 
Lisp tutorial for Pythonista : Day 2
Lisp tutorial for Pythonista : Day 2Lisp tutorial for Pythonista : Day 2
Lisp tutorial for Pythonista : Day 2Ransui Iso
 
Lisp Tutorial for Pythonista : Day 3
Lisp Tutorial for Pythonista : Day 3Lisp Tutorial for Pythonista : Day 3
Lisp Tutorial for Pythonista : Day 3Ransui Iso
 
これからの「言語」の話をしよう ―― 未来を生きるためのツール
これからの「言語」の話をしよう ―― 未来を生きるためのツールこれからの「言語」の話をしよう ―― 未来を生きるためのツール
これからの「言語」の話をしよう ―― 未来を生きるためのツールNobuhisa Koizumi
 
Unity2015_No10_~UGUI&Audio~
Unity2015_No10_~UGUI&Audio~Unity2015_No10_~UGUI&Audio~
Unity2015_No10_~UGUI&Audio~CHY72
 
Parsing Left Recursive PEG
Parsing Left Recursive PEGParsing Left Recursive PEG
Parsing Left Recursive PEGTakayuki Goto
 
Ruby 3 の型解析に向けた計画
Ruby 3 の型解析に向けた計画Ruby 3 の型解析に向けた計画
Ruby 3 の型解析に向けた計画mametter
 
Ruby講座第二回
Ruby講座第二回Ruby講座第二回
Ruby講座第二回mitsunaga
 
きつねさんでもわかるLLVM読書会amagasaki.rb第5章
きつねさんでもわかるLLVM読書会amagasaki.rb第5章きつねさんでもわかるLLVM読書会amagasaki.rb第5章
きつねさんでもわかるLLVM読書会amagasaki.rb第5章Takayuki Kurosawa
 
姫路IT系勉強会 Vol.11 第0回L-1グランプリ bash
姫路IT系勉強会 Vol.11 第0回L-1グランプリ bash姫路IT系勉強会 Vol.11 第0回L-1グランプリ bash
姫路IT系勉強会 Vol.11 第0回L-1グランプリ bashJun Nogata
 
textsearch_jaで全文検索
textsearch_jaで全文検索textsearch_jaで全文検索
textsearch_jaで全文検索Akio Ishida
 
第36回NDS 発表資料 ちょこっとpython
第36回NDS 発表資料 ちょこっとpython第36回NDS 発表資料 ちょこっとpython
第36回NDS 発表資料 ちょこっとpythoncivic Sasaki
 

What's hot (19)

Computation Expressions for Haxe
Computation Expressions for HaxeComputation Expressions for Haxe
Computation Expressions for Haxe
 
Functional Pearl + Brainfuck
Functional Pearl + BrainfuckFunctional Pearl + Brainfuck
Functional Pearl + Brainfuck
 
F#入門 ~関数プログラミングとは何か~
F#入門 ~関数プログラミングとは何か~F#入門 ~関数プログラミングとは何か~
F#入門 ~関数プログラミングとは何か~
 
Lisp tutorial for Pythonista : Day 2
Lisp tutorial for Pythonista : Day 2Lisp tutorial for Pythonista : Day 2
Lisp tutorial for Pythonista : Day 2
 
Lisp Tutorial for Pythonista : Day 3
Lisp Tutorial for Pythonista : Day 3Lisp Tutorial for Pythonista : Day 3
Lisp Tutorial for Pythonista : Day 3
 
Project coin
Project coinProject coin
Project coin
 
これからの「言語」の話をしよう ―― 未来を生きるためのツール
これからの「言語」の話をしよう ―― 未来を生きるためのツールこれからの「言語」の話をしよう ―― 未来を生きるためのツール
これからの「言語」の話をしよう ―― 未来を生きるためのツール
 
Unity2015_No10_~UGUI&Audio~
Unity2015_No10_~UGUI&Audio~Unity2015_No10_~UGUI&Audio~
Unity2015_No10_~UGUI&Audio~
 
Parsing Left Recursive PEG
Parsing Left Recursive PEGParsing Left Recursive PEG
Parsing Left Recursive PEG
 
Ruby 3 の型解析に向けた計画
Ruby 3 の型解析に向けた計画Ruby 3 の型解析に向けた計画
Ruby 3 の型解析に向けた計画
 
C-langage
C-langageC-langage
C-langage
 
Ruby講座第二回
Ruby講座第二回Ruby講座第二回
Ruby講座第二回
 
きつねさんでもわかるLLVM読書会amagasaki.rb第5章
きつねさんでもわかるLLVM読書会amagasaki.rb第5章きつねさんでもわかるLLVM読書会amagasaki.rb第5章
きつねさんでもわかるLLVM読書会amagasaki.rb第5章
 
姫路IT系勉強会 Vol.11 第0回L-1グランプリ bash
姫路IT系勉強会 Vol.11 第0回L-1グランプリ bash姫路IT系勉強会 Vol.11 第0回L-1グランプリ bash
姫路IT系勉強会 Vol.11 第0回L-1グランプリ bash
 
textsearch_jaで全文検索
textsearch_jaで全文検索textsearch_jaで全文検索
textsearch_jaで全文検索
 
Ruby講座一回目
Ruby講座一回目Ruby講座一回目
Ruby講座一回目
 
Ruby講座一回目
Ruby講座一回目Ruby講座一回目
Ruby講座一回目
 
第36回NDS 発表資料 ちょこっとpython
第36回NDS 発表資料 ちょこっとpython第36回NDS 発表資料 ちょこっとpython
第36回NDS 発表資料 ちょこっとpython
 
R spec勉強会
R spec勉強会R spec勉強会
R spec勉強会
 

Similar to Perl6で遊ぼう

普通のプログラミング言語R
普通のプログラミング言語R普通のプログラミング言語R
普通のプログラミング言語RShuyo Nakatani
 
20年越しで Perl 4 to 5 した話
20年越しで Perl 4 to 5 した話20年越しで Perl 4 to 5 した話
20年越しで Perl 4 to 5 した話outerinside
 
Lisp tutorial for Pythonista : Day 1
Lisp tutorial for Pythonista : Day 1Lisp tutorial for Pythonista : Day 1
Lisp tutorial for Pythonista : Day 1Ransui Iso
 
2017年夏のPerl
2017年夏のPerl2017年夏のPerl
2017年夏のPerlcharsbar
 
F#の基礎(?)
F#の基礎(?)F#の基礎(?)
F#の基礎(?)bleis tift
 
Goで言語処理系(の途中まで)を作ろう
Goで言語処理系(の途中まで)を作ろうGoで言語処理系(の途中まで)を作ろう
Goで言語処理系(の途中まで)を作ろうEsehara Shigeo
 
再帰、漸化式、差分方程式とアルゴリズム Gx#20
再帰、漸化式、差分方程式とアルゴリズム   Gx#20再帰、漸化式、差分方程式とアルゴリズム   Gx#20
再帰、漸化式、差分方程式とアルゴリズム Gx#20鉄次 尾形
 
Scalaで萌える関数型プログラミング[1.1.RC1]
Scalaで萌える関数型プログラミング[1.1.RC1]Scalaで萌える関数型プログラミング[1.1.RC1]
Scalaで萌える関数型プログラミング[1.1.RC1]Ra Zon
 
Clojure programming-chapter-2
Clojure programming-chapter-2Clojure programming-chapter-2
Clojure programming-chapter-2Masao Kato
 
つくっておぼえる!仮想マシン〜直前で実装編〜
つくっておぼえる!仮想マシン〜直前で実装編〜つくっておぼえる!仮想マシン〜直前で実装編〜
つくっておぼえる!仮想マシン〜直前で実装編〜Eric Sartre
 
JSX / Haxe / TypeScript
JSX / Haxe / TypeScriptJSX / Haxe / TypeScript
JSX / Haxe / TypeScriptbleis tift
 
PHP AST 徹底解説
PHP AST 徹底解説PHP AST 徹底解説
PHP AST 徹底解説do_aki
 
本当は怖いPHP
本当は怖いPHP本当は怖いPHP
本当は怖いPHPTakuya Sato
 
Usp友の会勉強会、ジャクソン構造図の巻(前編)
Usp友の会勉強会、ジャクソン構造図の巻(前編)Usp友の会勉強会、ジャクソン構造図の巻(前編)
Usp友の会勉強会、ジャクソン構造図の巻(前編)umidori
 
Scalaで萌える関数型プログラミング[完全版]
Scalaで萌える関数型プログラミング[完全版]Scalaで萌える関数型プログラミング[完全版]
Scalaで萌える関数型プログラミング[完全版]Ra Zon
 
Material
MaterialMaterial
Material_TUNE_
 

Similar to Perl6で遊ぼう (20)

普通のプログラミング言語R
普通のプログラミング言語R普通のプログラミング言語R
普通のプログラミング言語R
 
Perl勉強会#2資料
Perl勉強会#2資料Perl勉強会#2資料
Perl勉強会#2資料
 
20年越しで Perl 4 to 5 した話
20年越しで Perl 4 to 5 した話20年越しで Perl 4 to 5 した話
20年越しで Perl 4 to 5 した話
 
Lisp tutorial for Pythonista : Day 1
Lisp tutorial for Pythonista : Day 1Lisp tutorial for Pythonista : Day 1
Lisp tutorial for Pythonista : Day 1
 
2017年夏のPerl
2017年夏のPerl2017年夏のPerl
2017年夏のPerl
 
F#の基礎(?)
F#の基礎(?)F#の基礎(?)
F#の基礎(?)
 
Goで言語処理系(の途中まで)を作ろう
Goで言語処理系(の途中まで)を作ろうGoで言語処理系(の途中まで)を作ろう
Goで言語処理系(の途中まで)を作ろう
 
再帰、漸化式、差分方程式とアルゴリズム Gx#20
再帰、漸化式、差分方程式とアルゴリズム   Gx#20再帰、漸化式、差分方程式とアルゴリズム   Gx#20
再帰、漸化式、差分方程式とアルゴリズム Gx#20
 
Scalaで萌える関数型プログラミング[1.1.RC1]
Scalaで萌える関数型プログラミング[1.1.RC1]Scalaで萌える関数型プログラミング[1.1.RC1]
Scalaで萌える関数型プログラミング[1.1.RC1]
 
Clojure programming-chapter-2
Clojure programming-chapter-2Clojure programming-chapter-2
Clojure programming-chapter-2
 
つくっておぼえる!仮想マシン〜直前で実装編〜
つくっておぼえる!仮想マシン〜直前で実装編〜つくっておぼえる!仮想マシン〜直前で実装編〜
つくっておぼえる!仮想マシン〜直前で実装編〜
 
JSX / Haxe / TypeScript
JSX / Haxe / TypeScriptJSX / Haxe / TypeScript
JSX / Haxe / TypeScript
 
What is Metasepi?
What is Metasepi?What is Metasepi?
What is Metasepi?
 
Gorinphp0729
Gorinphp0729Gorinphp0729
Gorinphp0729
 
Gorinphp0729
Gorinphp0729Gorinphp0729
Gorinphp0729
 
PHP AST 徹底解説
PHP AST 徹底解説PHP AST 徹底解説
PHP AST 徹底解説
 
本当は怖いPHP
本当は怖いPHP本当は怖いPHP
本当は怖いPHP
 
Usp友の会勉強会、ジャクソン構造図の巻(前編)
Usp友の会勉強会、ジャクソン構造図の巻(前編)Usp友の会勉強会、ジャクソン構造図の巻(前編)
Usp友の会勉強会、ジャクソン構造図の巻(前編)
 
Scalaで萌える関数型プログラミング[完全版]
Scalaで萌える関数型プログラミング[完全版]Scalaで萌える関数型プログラミング[完全版]
Scalaで萌える関数型プログラミング[完全版]
 
Material
MaterialMaterial
Material
 

Perl6で遊ぼう

  • 1. . . Perl6 で遊ぼう 青木大祐 / @VienosNotes 情報科学類 Tsukuba.pm #2 青木大祐 / @VienosNotes (情報科学類) Perl6 で遊ぼう Tsukuba.pm #2 1 / 21
  • 2. 概要 Perl6 とは? Perl5 との違い Perl6 のオモシロ機能 今までの経緯とこれからの話 青木大祐 / @VienosNotes (情報科学類) Perl6 で遊ぼう Tsukuba.pm #2 2 / 21
  • 3. Perl6 とは? Perl5 との後方互換性を切り捨てた新しい言語 Perl5 を置き換えるものではない 開発もコミュニティも別ライン モダンなプログラミング技法を取り入れる 真っ当なクラスベースのオブジェクト指向 充実したメタプログラミング その他の先進的 (?) な機能 仕様ベースの開発 青木大祐 / @VienosNotes (情報科学類) Perl6 で遊ぼう Tsukuba.pm #2 3 / 21
  • 4. 要するに… Larry Wall の考えた 最強のプログラミング言語 青木大祐 / @VienosNotes (情報科学類) Perl6 で遊ぼう Tsukuba.pm #2 4 / 21
  • 5. Perl5 との違い コンテキストは無くなり、シジルは分かりやすく 配列の要素にアクセスするときも@を使う メソッド呼び出しは − > ではなく. に みんなオブジェクトに リテラル クラスのインスタンス 関数 特殊変数も再編 ある程度の標準ライブラリがある 青木大祐 / @VienosNotes (情報科学類) Perl6 で遊ぼう Tsukuba.pm #2 5 / 21
  • 6. 現状どうなってるか 提唱されたのは 2000 年 10 年以上経ったが、未だ完成していない 完成してないので、当然普及もしてない Perl 歴が長い人は「そんなの言ってた時代もあったね」 最近の人は「何それ?聞いたことも無い」 世間様からは完全に オワコン扱い →しかし、言語的に見ると結構面白い機能が多い 青木大祐 / @VienosNotes (情報科学類) Perl6 で遊ぼう Tsukuba.pm #2 6 / 21
  • 7. オモシロ機能 型制約 関数リテラル Junction Grammer 青木大祐 / @VienosNotes (情報科学類) Perl6 で遊ぼう Tsukuba.pm #2 7 / 21
  • 8. 型制約 変数や関数の引数にデータ型の制約を書くことが できる 引数の型によって呼ぶディスパッチを決定できる 実行時オーバーロード 制約を満たさない型を検出すると、実行時例外を 投げる 静的型付け(コンパイル時検査)ではない 青木大祐 / @VienosNotes (情報科学類) Perl6 で遊ぼう Tsukuba.pm #2 8 / 21
  • 9. 型制約:変数 1 my Int $i = 1; 2 # ok 3 4 my Str $s = 1; 5 # Type check failed in assignment to ’$s ’; expected ’Str ’ but got ’Int ’ 青木大祐 / @VienosNotes (情報科学類) Perl6 で遊ぼう Tsukuba.pm #2 9 / 21
  • 10. 型制約:関数 1 sub f (Int $i) returns Int { return $i * 2; } 2 3 say f(1); 4 #> 2 5 6 say f("piyo") 7 #> CHECK FAILED : 8 #> Calling ’f’ will never work with argument types (str) 9 #> Expected : :( Int $i) 10 11 multi sub g (Int $i) { return $i * 2; } 12 multi sub g (Str $s) { return $s x 2; } 13 14 say g(1); 15 #> 2 16 say g("s"); 17 #> ss 青木大祐 / @VienosNotes (情報科学類) Perl6 で遊ぼう Tsukuba.pm #2 10 / 21
  • 11. 関数リテラル map に渡すコールバック関数など、Perl 的記述に 置いて関数リテラルを記述する機会は多い 簡潔な記述を実現するため、複数の方法が用意さ れている 青木大祐 / @VienosNotes (情報科学類) Perl6 で遊ぼう Tsukuba.pm #2 11 / 21
  • 12. Pointy Block 1 (1..10) .map: -> Int $a { $a ** 2 }; 矢印に続けて引数リスト、その後に本体を書く 見た目が格好良いので使う機会が多い 青木大祐 / @VienosNotes (情報科学類) Perl6 で遊ぼう Tsukuba.pm #2 12 / 21
  • 13. Whatever Star 1 say (1..10) .map: * ** 2; *に Perl5 で言うところの$ が暗黙的に代入される 記述量は非常に少ないが、見た目が悪魔的で少し 戸惑う 青木大祐 / @VienosNotes (情報科学類) Perl6 で遊ぼう Tsukuba.pm #2 13 / 21
  • 14. Placeholder Variables 1 say (1..10) .map: { $ˆa ** 2 }; $ˆで始まる変数に、引数が順に格納されて行く 代入される変数は辞書順で決まる 青木大祐 / @VienosNotes (情報科学類) Perl6 で遊ぼう Tsukuba.pm #2 14 / 21
  • 15. Junction 変数 i が 0 か 1 であるという処理を、普通はこう書く 1 if ($i == 0 | $i == 1) { ... } 直感的にはこのように書きたい 1 if ($i == 0 | 1) { ... } これを可能にするのが Junction 「0 か 1 である」という状態をオブジェクトとし て保持する 青木大祐 / @VienosNotes (情報科学類) Perl6 で遊ぼう Tsukuba.pm #2 15 / 21
  • 16. Junction の要素について、手続きを平行して適用した 後で、(OR ジャンクションなら) 論理和を取る。 1 if ($s ˜˜ / pattern1 / | / pattern2 /) { ... } 2 # if $s matches pattern1 or pattern2 バックトラックしないので高速(かもしれない) (処理系が対応していれば) 並列で実行される 順番に依存する処理は出来ない 青木大祐 / @VienosNotes (情報科学類) Perl6 で遊ぼう Tsukuba.pm #2 16 / 21
  • 17. Grammar PEG(解析表現文法) をベースとした文字列パース 機能 ふつうの正規表現よりも柔軟な記述が可能 青木大祐 / @VienosNotes (情報科学類) Perl6 で遊ぼう Tsukuba.pm #2 17 / 21
  • 18. 以前書いた Lisp の (不完全な) パーザ 1 grammar Lisp { 2 token left { ’(’ }; 3 token right { ’)’ }; 4 token num { d+ } 5 token str { ’" ’w+’"’ } 6 token literal { <num >|| <str > } 7 token nil { ’nil ’|’(’ <.ws > ’)’ } 8 rule ne_sexpr { <atom > || <.left > [<ne_sexpr >+? % <.ws >] [< dot > <.ws > <ne_sexpr >]? <.right > } 9 token spform { ’cond ’ | ’if ’ | ’define ’ | ’quote ’ } 10 rule sp_sexpr { <.left > <spform > [<ne_sexpr >+? % <.ws>] <. right > } 11 12 token symbol { w+ } 13 token atom { <literal >|| <nil >|| <spform >|| <symbol > } 14 15 token dot { ’.’ } 16 rule sexpr { <atom > || <sp_sexpr > || <.left > [<sexpr >+? % < .ws >] [<dot > <.ws > <sexpr >]? <.right > } 17 rule TOP { ˆˆ [<sexpr > || <ne_sexpr >] $$ } 18 } 青木大祐 / @VienosNotes (情報科学類) Perl6 で遊ぼう Tsukuba.pm #2 18 / 21
  • 19. Grammar 要するに構造を持った名前付き正規表現 部分文字列を取り出すのも簡単 バックトラックの枝刈りも効率が良い (らしい) 明確な構造を持った文字列 (JSON, csv, etc...) の パーザが簡潔に書ける 青木大祐 / @VienosNotes (情報科学類) Perl6 で遊ぼう Tsukuba.pm #2 19 / 21
  • 20. オモシロ機能を見てきた訳ですが なぜオワコンと呼ばれるに至ったのか? 開発が遅い 皆に飽きられてる 動作が遅い 製品としては実用にならないレベル 仕様が固まっていない いつまで経っても 1.0 がリリースされない そもそもコミュニティが無い 青木大祐 / @VienosNotes (情報科学類) Perl6 で遊ぼう Tsukuba.pm #2 20 / 21
  • 21. じゃあコミュニティ作りましょう 実は Perl6 勉強会を去年やりました 今年もやりたい 参加者募集中です 今年はドキュメント (入門書、仕様書の翻訳) 書きたい →二学期からは月1くらいでゆるゆるやります 青木大祐 / @VienosNotes (情報科学類) Perl6 で遊ぼう Tsukuba.pm #2 21 / 21