見た目が良くなるようにタイトルを去年と統一しました。どうもマコピーです。
今年もYAPC::Asia 2013にいってきました。ちょっとぼっち気味だった去年とは違って、Hachioji.pmの人たちとかとワイワイやってました。ワイワイ
ちょっと長くなってしまったので、めんどくさい方はブクマだけぽちっと押していただけると幸いです。
で、お仕事の関係で前夜祭は途中からで、1日目は昼から潜入したのでLT以外のトークは以下のものしか聞いておりません。
Perlの過去と未来 @tokuhirom
この前のPyConでも「Perl使いで〜す」って言ってたら「Perl6いつ出るの?」って言われるんですよね。かつて出ないものと言われていたRuby2.0であったり、Python3であったり、LL界隈では彼らは華々しくデビューしているわけですが、Perl6だけは出てこない。
で、僕はPerl書き始めてPerl6に関する話を聞いて、彼らにこう返していたんですね、
「Perl6とPerl5は別物」
これは正解で、全く別の言語ともいうべき変化を遂げているしまさに別言語って言い張ってるし。
それでも彼らはしつこく聞いてくるので「Perl6永遠に出ないから忘れてくれ」って言ってたんですけれど、このトーク聞いたらもうなんかそう言ってられない感じがしました。
何故Perl6じゃなくてこのトークのタイトルが Future Perl なのかというと、Perl6って仕様はちゃんとしたっぽいのがひとつあるけれど、その実装を目指す処理系はいっぱいあって、まあ玉石混交なわけで、このトークでもありましたけれど、
$sum = [+] 1..100;
みたいなpythonとかhaskellで言うreduceみたいなことをやって、これだと結果が5050って出るんですけれど、RakudoStarっていう処理系とParrotっていうVM使うと今だと1秒弱かかるっぽいです。
[- o -] $ time perl6 -e 'say [+] 1..100' 5050 perl6 -e 'say [+] 1..100' 0.61s user 0.14s system 99% cpu 0.750 total [- o -] $ time perl -E '$a += $_ for 1..100; say $a' 5050 perl -E '$a += $_ for 1..100; say $a' 0.02s user 0.03s system 51% cpu 0.111 total
参考: Perl6 の速度にかんするメモ - 20130404 - blog.64p.org
でも最近はRakudoとかParrot以外にも「未来のPerl」的なプロダクトの開発がいろいろ興ってきてそれを総称して「Future Perl」って言ってるっぽいです。もちろんPerl5の未来に関してもそれに含まれる。
っていう歴史的な話をした後に今のFuture Perlについていろいろ。
個人的にめっちゃ気になってるのはMOP::Redux。Perlでclassっていう構文が使える。しかもコア! でも5.20では入らない模様。ああ、待ち遠しい。
でも、同じことはMouseやMooでできるけれど、他の言語のようなくせのないOOPができそう。さらにコアモジュール目指してるのは、意味合いとしてヤバイ。
あとAcme::InOperatorっていうin演算子を作る(中身はScalar ~~ ArrayRefのスマートマッチをしているだけw)モジュールを作ろうと思って挫折した身としてはinfix operatorの実装が出来る用な感じでPerlをやっていただくの、非常に切望しております。。。Acmeのためですがw。infix operatorはPerl6では簡単にできるし、こういうのいいと思う。よい、最高。
まあそんな感じで最近のPerl5も内部APIがいじりやすく拡張しやすくしているっぽいです。CPANのモジュール使えばPerl6みたいになっちゃったけれど、みたいなのもPerlでは許されるしすごい。
あとPVIPとかSeisとかtokuhiromさんのモジュールのデモもあってめっちゃ勉強になりました……。plenvにseisとか入っていたの、ちょっと面白かった。解説して欲しいです。
これからのPerlプロダクトのかたち @goccy54
こっちもFuture Perlの話題です。
goccyさんはperl5の処理系の一つ、gperlっていうのを作っているんですが、最近更新ないやんか!っていうセルフツッコミから入り、gperlのコンポーネントを切り出してComipler::LexerとかCompiler::ParserとかCompiler::CodeGenerator::LLVMとか作ってるらしくて、最後にCompiler::CodeGenerator::LLVMを使ったPerlMotionのデモもありました。
で、何故切り出したか。
もともとPerlにはPPIっていうPerlでPerlの静的解析をするみたいなモジュールがあって、コレを使って何が出来るかって言うと、@moznion氏が作ったTest::LocalFunctionsっていうモジュールがあって、コレを使うとモジュール内で使われていない関数とかを検出してテストがコケる、便利。みたいなやつです。最高。
でもPPIは遅い。なんでかっていうとPurePerlなので……。
なので、Compiler::Lexer、つまりスクラッチで書いたXSのモジュールを使う、@__papix__氏が書いたTest::Local::Functions::Fastっていうのもあって、こっちは速い。すごい。
抗争を続けた二人は手打ちをして一つのモジュールに統合されていますが、この二人が仲たがいをするほど、Compiler::LexerやCompiler::Parserは未来を感じさせるモジュールです。
で、LLVMですわ。
LLVMってMac OS XとかiOSとかでは結構普通に使われている仕組みで、フロントエンドっていうやつが従来のコンパイラで、そいつが他の言語からLLVMに直して、バックエンドってやつがLLVMコードを実行するんですけれど、Compiler::CodeGenerator::LLVMが意味するには、LLVMの上にPerlが乗っかれるってことですね!!!
なにそれすごい!!!
だからPerlMotionみたいな「ファッ!?」みたいなものが出てくるわけで。僕だいぶついていけてないです。LLVM勉強しないと……。やりたいことがあるんだ……。
YAPCで得られるモノ
簡単にまとめると
でも
おじいちゃんに「Perlコミュニティは怠慢してる」とか言われたし、Twitterでも「Perlに足りないのはマーケティング」とかも書かれていたので、そのあたりなのかな〜〜〜と思ったし、でもおじいちゃんがPerl入学式に来たのは、少しだけその成果が出たのかな〜とも思いました。あとおじいちゃんと僕とは議論の前提が崩れていたので、そこちょっと今度訂正したいけれど難しいかな〜〜〜。
YAPCは今回で一つ区切りを迎えたっぽいので、今後の展開気になりますね!!!
最後に
まあ、次は、なんか話したいですね。散々行ってますけれど、ハードウェア的な話、したい。ガチじゃなくホビートーク寄りですけれど、僕はそれを仕事で使っていきます。
かなりモヒカンなのに、なんかどっかでトークしているの聞いたことがないと@hirobanexさんに言われてしまったので、モヒカンではないですが、喋りたい感ある。
そんな感じで、長文書いてしまうほど楽しかったので、こういうイベント事には参加していきたい。というかPyCon参加してたの忘れてた。次は東京Node学園祭かな〜〜〜〜〜〜〜。