Perl6 - サイボウズ・ラボ

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