読者です 読者をやめる 読者になる 読者になる

mixi engineer blog

ミクシィ・グループで、実際に開発に携わっているエンジニア達が執筆している公式ブログです。様々なサービスの開発や運用を行っていく際に得た技術情報から採用情報まで、有益な情報を幅広く取り扱っています。

YAPC::Asia Tokyo 2012で発表してきました

Perl

こんにちは。今年新卒で入社した五嶋@たんぽぽグループです。
先日行われたYAPC::Asia Tokyo 2012で自作Perl処理系について発表してきましたので、参加経緯や発表内容、感想などについて書きたいと思います。


YAPC::Asiaに参加するのは、実は今回が初めてでした。
というのも、今までPerlを触ったことがあまりなく、興味もありませんでした。
弊社の内定を頂いてから、勉強のために書き始めたくらいです。

ですので初めに、そんな自分がYAPC::Asiaに参加するに至った経緯について簡単に触れようと思います。

● 参加経緯

Perlは記述性に優れ、迅速な開発ができる一方、実行時の速度はそれほど速くありません。一般に、インタプリタで実行する多くのLL言語(Lightweight Language)には、JIT(Just in time)Compiler等で高速化した別実装が存在します(PythonだとPyPyであったり、LuaだとLuaJITだったり)。
しかし、ざっと調べてみたところPerl5には高速な別実装どころか実用的なレベルでの再実装例自体見つかりません。JITが載るのはPerl6からという話で、Perl5とは互換性がないという状況です。
この理由の一つとして、Only perl can parse Perlと言われるように、Perlの構文解析がとても難解で、再実装が難しいということが挙げられるかと思います。
今まで誰一人として、Perlの再実装に挑戦し、かつ成功している例がないのです。

深く理解したいのなら、作ってみるのが一番
いちエンジニアとして、この状況にとても興味を持ちました。今まで誰も成し遂げられなかったのはなぜなのか。どうして難解なのか。もしかしたら自分ならできるのではないか。みたいなことを、実際に作って肌で感じてみたかったのです。
処理系を作ることで、コードを書くときに処理系の気持ちになって書くことができるというメリットもあると思いました。
そこで、Perl5処理系をフルスクラッチで実装してみようと決心しました。
やっぱり、何事も深く理解したいのなら、実際に作ってみるのが一番です!

そしてYAPC::Asiaへ...
再実装する場合、出来上がったものがまるっきり同じではつまらないです。
何か新しい機能やコンセプトを持って作るのが常ですが、僕は「高速性」に着目しました。Perlがどんなインタプリタ言語よりも高速に動いたら、素敵な世界が待っていそうじゃないですか?
そこで、「最速のPerl処理系」を目指して作り始めました。

そうして作り始めた折に、技術支援の方からYAPC::Asiaのお話を頂きました。
そのときは、弊社にスポンサー枠として与えられている5分程度の発表枠で、何かお話をしてみてはどうでしょう?というものでした。
ですが、いろいろとお話を重ねていく中で、発表内容的にも一般スピーカー枠で応募して、もっと長く話した方が良いかもしれないという言葉を頂き、参加登録に至りました。

Perlを書いてこなかった自分が、いきなり日本のPerl界最大のイベントであるYAPC::Asiaで発表することはなかなかハードルが高かったですが、技術支援の方々に多くの応援を頂けたおかげで、無事に終えることが出来ました。ありがとうございました!

● 発表内容
次に発表内容について簡単に触れようと思います。
以下が当日発表したスライドと動画になります。

動画へのリンクはこちらです

発表内容を簡単に説明します。
最速のPerl処理系「gperl」(名称は変更になる可能性があります)というものをC++でフルスクラッチで実装しています。依存ライブラリは極力抜きにしたい方針なので、理想はRelease Buildをスタンダードライブラリだけで構築することです。
高速化のために、カリカリにチューニングしたVirtualMachine、JIT Compiler等を積んでいて、最新の高速化技術を多く盛り込んでいます。
その結果、一部のコードでNode.jsよりも高速なスコアが出ていたりします。

処理系的には、基礎になる部分が出来上がってきた段階でして、これからリッチな機能を追加していって、実用レベルまで持っていこうというところです。
高速化技術についていろいろと書きたいところなのですが、それは次の機会があったときにさせて頂ければと思います。

ソースコードは以下にアップされています。

https://github.com/goccy/gperl

現在、Parserまわりを大改修中でして、近々ガラッと変わる...予定です。

● 発表を終えて...
今回、YAPC::Asiaで発表したことで、とても多くの方に興味を持って頂くことが出来ました。今までこういった大きな場所で発表したことはなかったので、反響の大きさに驚くとともに、自分が作っているソフトウェアに対して様々な暖かいコメントを頂けたことがとても励みになりました。Perl界隈の方々はとても優しく面白い方々が多く、YAPC::Asiaでの他の発表者の方々のトークもとても参考になりました。

ぜひとも来年行われるYAPC::Asiaでは「mixiが動いた!」という動作実績を携えた上で、処理系の話などをできればいいなと思っています。
本当にとても良い経験ができました。ありがとうございました!!

● 最後に、これから弊社の選考に参加されようとしている方々へ
Perl処理系に限らず、既にあるソフトウェアに捉われずに、一緒に新しいものをガンガン生み出していきましょう!! 弊社には、創作意欲に燃えている方々を支援する風潮がきちんとあります。

よく、車輪の再発明という言葉を聞きますが、僕は少しでも再発明後の成果に価値があるのなら、実装する価値はあると思っています。何より、自分のためになるからです。