Pugs でお手軽 Perl6 入門 Shibuya Perl Mongers テクニカルトーク#6 竹迫 良範 [email protected] アンケート Pugs 使ったことある人? Parrot アセンブラ使ったことある人? Perl6 の言語仕様を知っている人? 難しい話は一切いたしません(ご安心ください) 2005/11/02 Shibuya Perl Mongers テクニカルトーク#6 「Pugs でお手軽 Perl6 入門」 2 5秒でわかる Perl6 メソッドを -> ではなく . で書けるようになった Perl5 Perl6 $obj->method(); $obj.method(); → これで Perl も立派なOO言語の仲間入り! 2005/11/02 Shibuya Perl Mongers テクニカルトーク#6 「Pugs でお手軽 Perl6 入門」 3 Perl6 の言語仕様について もうちょっと詳しく・・・ Perl6で失ったもの ~後方互換性~ 文字列の連結は .(ドット)→ ~(チルダ)に Perl5 Perl6 # メソッド呼び出し $obj->method(); # メソッド呼び出し $obj.method(); my $a = “A"; sub func { return "x"; } my $a = “A"; sub func { return "x"; } # 文字列の連結 my $b = $a.func(); # 文字列の連結 my $b = $a~func(); 一時期 ” _ ” という案もあったが…スペース入れるのが面倒 2005/11/02 Shibuya Perl Mongers テクニカルトーク#6 「Pugs でお手軽 Perl6 入門」 5 配列とハッシュのアクセス方法が変更 はじめての人にもわかりやすく 変数のプレフィクス $@% ルールが変更 Perl5 Perl6 my @array = (1, 2, 3); my %hash = ('a'=> 1); my @array = (1, 2, 3); my %hash = ('a'=> 1); # 配列のメンバにアクセス my $x = $array[0]; # 配列のメンバにアクセス my $x = @array[0]; # ハッシュのメンバにアクセス my $y = $hash{'a'} # ハッシュのメンバにアクセス my $y = %hash{'a'} 2005/11/02 Shibuya Perl Mongers テクニカルトーク#6 「Pugs でお手軽 Perl6 入門」 6 // 演算子 (err演算子) 左辺が undef のときのみ右辺を評価 Perl5 でありがちなバグを回避 0(ゼロ) や ”” (空文字列)の扱い それぞれ || → or, // → err に対応 Perl5 Perl6 $num = shift @ARGV || 1; $num = shift @ARGS // 1; $bar = func() or die; $bar = func() err die; 2005/11/02 Shibuya Perl Mongers テクニカルトーク#6 「Pugs でお手軽 Perl6 入門」 7 便利な zip 2つの配列を同時にループ 順番を保存した重複する key と value の表現 Perl5 Perl6 my @key = ("x", "y", "x"); my @value = (1, 2, 3); my @key = ("x", "y", "x"); my @value = (1, 2, 3); for (my my $a my $b print } for zip(@key,@value) -> $a,$b { print "key:$a; value:$b\n"; } 2005/11/02 $i=0; $i<@key; $i++) { = $key[$i]; = $value[$i]; "key:$a; value:$b\n"; Shibuya Perl Mongers テクニカルトーク#6 「Pugs でお手軽 Perl6 入門」 8 Piping operators(<==, ==>) Perl6 @result = map { floor($^x / 2) } grep { /^ \d+ $/ } @data; @result <== map { floor($^x / 2) } <== grep { /^ \d+ $/ } <== @data; @data ==> grep { /^ \d+ $/ } ==> map { floor($^x / 2) } ==> @result; 2005/11/02 Shibuya Perl Mongers テクニカルトーク#6 「Pugs でお手軽 Perl6 入門」 9 括弧省略 if, for, while, do ブロックでの(括弧省略) キータイプの量が少なくなった Perl5 Perl6 if ($a eq $b) { print "a=b\n"; } if $a eq $b { say "a=b"; } while ($i > 0) { $i--; } while $i > 0 { $i--; } 2005/11/02 Shibuya Perl Mongers テクニカルトーク#6 「Pugs でお手軽 Perl6 入門」 10 Lazy evaluation(遅延評価) 無限リストを表現できるように 実行時に評価される Perl5 for my $i (1..100000) { last if ($i > 100); print "$i\n"; } 2005/11/02 Perl6 for my $i (1...) { last if ($i > 100); print "$i\n"; } Shibuya Perl Mongers テクニカルトーク#6 「Pugs でお手軽 Perl6 入門」 11 Neko operator(範囲演算子) Damian Conway氏が OSCON2005 で発音 http://www.rubyist.net/~matz/20050803.html 末尾を含まない「..^」 先頭を含まない「^..」 先頭と末尾を含まない「^..^」 Perl6 my @a = (1..^5); # (1,2,3,4) my @b = (1^..5); # (2,3,4,5) my @c = (1^..^5); # (2,3,4) 2005/11/02 Shibuya Perl Mongers テクニカルトーク#6 「Pugs でお手軽 Perl6 入門」 12 Perl6 の言語仕様 1. Apocalypse(黙示録) Larry Wall が Perl6 のデザインについて語る Perl6 の歴史的な文書(Perl6 RFC がベース) 2. Exegesis(注釈) Perl6 を用いたサンプルコードや Perl5 との比較 黙示録を Damian Conway が詳細に解説 3. Synopsis(概要) Perl6 の最新の言語仕様が書かれている 黙示録のダイジェスト版 2005/11/02 Shibuya Perl Mongers テクニカルトーク#6 「Pugs でお手軽 Perl6 入門」 13 Why Perl6? (モチベーション) Perl5 は・・・ 場当たり的な拡張を繰り返し 既に Perl5 のコードは理解不能な領域に C でゴリゴリ 職人技 Perl6 の目指す方向 せめて OO らしく 後方互換性は無視 Perl6 のプログラムには v6; とか use v6.0; # 省略可 ただし use perl5:LWP; などで Perl5 のモジュールは使えるようにしたい コンパイラと実行環境の分離(VM化) 2005/11/02 Shibuya Perl Mongers テクニカルトーク#6 「Pugs でお手軽 Perl6 入門」 14 Perl6 の実装方針(最初の戦略) Parrot がメイン Perl6 を Parrot で書く Perl5 を Parrot で動くようにする (Ponie Project) 2005/11/02 Shibuya Perl Mongers テクニカルトーク#6 「Pugs でお手軽 Perl6 入門」 15 Parrot アセンブリ言語 Parrot Assembler (PASM) PASM set I1, 33 set I2, 5 mod I3, I1, I2 if I3, REMA print "5 is an integer divisor of 33" branch DONE REMA: print "5 divides 33 with remainder " print I3 DONE: print "\n" end 「33 割る 5」の計算結果を求めるプログラム 2005/11/02 Shibuya Perl Mongers テクニカルトーク#6 「Pugs でお手軽 Perl6 入門」 16 VM としての Parrot 2005/11/02 Shibuya Perl Mongers テクニカルトーク#6 「Pugs でお手軽 Perl6 入門」 17 セカンドシステム症候群 2度目にデザインするシステム は失敗作になりやすい説 1度目のデザインは自分の能力を 把握していないので慎重になる。 3度目のデザインは何が普遍的 で何が特殊なものか分かるので 正確に作ることができる。 しかし、2度目のデザインでは、最 初のデザインで抑えたアイデア・ 装飾を思い切り詰め込んでしまう ので、失敗作になりやすい。 → Perl6 は構想5年! 2005/11/02 人月の神話―狼人間を撃つ銀の弾はない ISBN: 4894716658 Shibuya Perl Mongers テクニカルトーク#6 「Pugs でお手軽 Perl6 入門」 18 救世主 Pugs の登場 Pugs = Perl6 User’s Golfing System Yet another Perl6 implementation → Perl6 が動いた! 2005/11/02 2005/02/06 (1|2)+(3|4)→(4|5|6) Shibuya Perl Mongers テクニカルトーク#6 「Pugs でお手軽 Perl6 入門」 19 Autrijus Tang (唐宗漢) CPAN界隈で有名 PARの作者 1981年生まれ(若い!) 国籍:台湾 Perl6 を2ヶ月で実装した天才プログラマー (しかも最初の1ヶ月はHaskellの学習) 高橋メソッドを世界に輸出した人 http://en.wikipedia.org/wiki/Autrijus_Tang 2005/11/02 Shibuya Perl Mongers テクニカルトーク#6 「Pugs でお手軽 Perl6 入門」 20 Pugs の拡張性 Haskellという 言語で記述 2005/11/02 Shibuya Perl Mongers テクニカルトーク#6 「Pugs でお手軽 Perl6 入門」 21 Haskell とは? 非正格純粋関数型言語 関数型プログラミング どうするか(how)ではなく、 何をするか(what)を純粋に書く 大きな処理は小さな処理の組み合わせ 強い型付け 型推論機構(型を宣言しなくても自動判別) コンパイルチェックに通ればコアダンプしない保証 モナドの概念(Haskellがpureたる所以) 計算の抽象化、合成、IOモナド 非決定性計算が得意 2005/11/02 Shibuya Perl Mongers テクニカルトーク#6 「Pugs でお手軽 Perl6 入門」 22 モナディウス Haskellで書かれたシューティングゲーム グラディウス20周年記念にインスパイア Haskell の学習のために作ったプログラム http://www.geocities.jp/takascience/windows/monadius.html 90秒間のデモをどうぞ 2005/11/02 Shibuya Perl Mongers テクニカルトーク#6 「Pugs でお手軽 Perl6 入門」 23 いま Haskell がアツイ! Haskellの特徴 わかりやすい構文 関数型のくせに(括弧)が少ない 無駄な機能を徹底的に排除 代入がない、ループがない、その他いろいろ・・・ intを扱うのと同じように関数も命令文も扱うことができる 直感的に書ける、コード量が少ない → バグが少ない BNFに近い形でプログラムをそのまま書ける Lazy evaluation(遅延評価)→ 特定の条件で高速 けど遅い 2005/11/02 Shibuya Perl Mongers テクニカルトーク#6 「Pugs でお手軽 Perl6 入門」 24 実際に Pugs を使ってみよう Perl6 の世界を体験 Pugs のバージョンは 6.x.y 6.x はメジャーバージョン →2πに収束 6.0: Initial release. 6.2: Basic IO and control flow elements; mutable variables; assignment. 6.28: Classes and traits. 6.283: Rules and Grammars. 6.2831: Type system and linking. 6.28318: Macros. 6.283185: Port Pugs to Perl 6, if needed. y はリリース番号 (6.2.10 @ 2005/10/8) 2005/11/02 Shibuya Perl Mongers テクニカルトーク#6 「Pugs でお手軽 Perl6 入門」 26 Pugs をお手軽に試せる「PxPerl」 pixigreg.com によるPerlディストリビューション 動作環境:Windows2000/XP exe一発でインストール完了 Perl 5.8.7 (compiled with Intel C++ Compiler) Pugs 6.2.9 (compiled with GHC) Parrot 0.2.3 CPAN modules がたくさん GraphicsMagick 1.1.6 GD 2.0.33 とかも SciTE 1.65(エディタ付) ActivePerlを超えた注目ディストリビューション 2005/11/02 http://www.pxperl.com/?pxperl Shibuya Perl Mongers テクニカルトーク#6 「Pugs でお手軽 Perl6 入門」 27 もしも Perl6 の設計本が出版されたら・・・ パロディ画像 2005/11/02 Shibuya Perl Mongers テクニカルトーク#6 「Pugs でお手軽 Perl6 入門」 28 (例)Pugsを動かしてみよう スペースのあり/なしで実行結果が違う Perl5 # スペースなし print(1+2)*3; Perl6 # スペースなし print(1+2)*3; → 実行結果: 3 # スペースあり print (1+2)*3; → 実行結果: 3 2005/11/02 → 実行結果: 3 # スペースあり print (1+2)*3; Shibuya Perl Mongers テクニカルトーク#6 「Pugs でお手軽 Perl6 入門」 → 実行結果: 9 29 まとめ Perl6の言語仕様は複雑 構想5年 VM としての Parrot Pugs の登場(2005年) Perl6 のプログラムを動かしながら 言語仕様を議論できるようになった いま Haskell がアツイ!(ICFP連続優勝) 手軽に試せる PxPerl を使ってみよう まだ遅い(実用に耐えない) 2005/11/02 Shibuya Perl Mongers テクニカルトーク#6 「Pugs でお手軽 Perl6 入門」 30 Pugs-on-Javascript CPANではなくJSANのモジュールが使えるように 2005/08/18 use jsan:Number.Roman <to_roman>; say to_roman(42); # XLII http://use.perl.org/~autrijus/journal/26358 Pugs の今後が楽しみ! 2005/11/02 Shibuya Perl Mongers テクニカルトーク#6 「Pugs でお手軽 Perl6 入門」 31 ご清聴ありがとうございました http://namazu.org/~takesako/ 参考URL より詳しく知りたい方のために 1. Perl Development: Perl 6 http://dev.perl.org/perl6/ 2. perl.perl6.language http://www.nntp.perl.org/group/perl.perl6.language 3. PxPerl http://www.pxperl.com/?pxperl 4. Haskell http://www.haskell.org/ 2005/11/02 Shibuya Perl Mongers テクニカルトーク#6 「Pugs でお手軽 Perl6 入門」 33 おまけ: できるエンジニアを募集中 ブログに「サイボウズ・ラボ入りたい!」と書くと、 スタッフが巡回して (ry 研究開発テーマ 情報共有。グループウェア、Ajax、 ポータル、ブログ、Wiki など。 何か一つ作って世界へ普及させる。 まったく新しい概念でもよし。 オープンソースOK IPA未踏ソフト歓迎 50%ルール 常駐メンバーはまだ4人です! http://labs.cybozu.co.jp/ 2005/11/02 Shibuya Perl Mongers テクニカルトーク#6 「Pugs でお手軽 Perl6 入門」 34
© Copyright 2024 ExpyDoc