Perl XS を書くようになったきっかけ

THE INTERVIEWS がサービス終了ということで、一つだけ消えるには惜しいというか懐かしい記事があったので少し加筆修正して転載します。JHackers でも似たようなことを話してますね。

Perl XS を書くようになったきっかけ、また、どのようにして今のような XS マジシャンになったのか。そのあたりの事をお聞かせください

2000年頃の話です。ぼくはCGIスクリプトでちょっとしたゲームデータの集計サイトをやりたくてプログラミングを覚えたのでした。これがそこそこ重い処理で、次第にもっと高速にしたいと考えるようになりました。一方、当時ぼくはお金もなくVPSも一般的でなかったので、CGIスクリプトしか選択肢はありません。そこで初心者ながらいろいろ調べることにしました。

とりかかったのは行指向のテキストで保存していたデータをSQLiteにすることでした。しかし当時はWindows上で開発を行っていたので、XSモジュールひとつビルドするのにもだいぶ苦労したのでした。まずUNIX系のOSと異なり、Cコンパイラが普通には使えません。Visual C++は無料では使えなかったので2chで質問したりぐぐったりしながらConfig.pmを書き換えて、無料のWindows用CコンパイラであるBorland C compilerでビルドできるようにしました。またDBD::SQLiteはリリースされたばかりで、そのままではWindowsでビルドできなかったのをなんとかできるようにしました。JavaScriptPerlしか触ったことのない初心者プログラマにはコンパイラオプションひとつ書き換えるのも苦労したものです。

さてぼくのWebアプリは無事SQLiteへ移行が進みつつありましたが、またも困難がありました。ぼくは標準偏差をとる集約関数stddev()がほしかったのですが、SQLiteにそんな関数はなかったのです!苦労の挙句Cのsqliteにはどうやら関数を登録するAPIがあるらしいということを突き止めました。そこでぼくは『プログラミング言語C』を片手にCプログラミングをなんとか覚えて、Cでstddev()を追加したのでした。

ここで当初の目的であるWebアプリの高速化は達成できたのですが、CとPerlの間のやりとり、つまりXSが面白くなってきたのです。ぼくはこのsqliteにある関数登録APIPerlからも利用できるようにしたいと考え、コーディングを始めました…。XSを書くようになったきっかけはこんなところです。

その後はというと、出来上がったパッチをDBD::SQLiteの作者に送りつけてrejectされました。機能そのものはその後まもなく追加されたので、ぼくのパッチが刺激くらいにはなったのかもしれませんが、ぼくのコードは跡形もなく非常に残念な思いをしました。今思えばパッチは汚なかったしメールの本文はエキサイト翻訳で訳したもので読めたものじゃないだろうしrejectは当然ですが…。そしてこのことがきっかけで、英語ができなければプログラマとして活動するのは難しいと悟り、ぼくは一度プログラマとしての道を諦めることになります。実際にはすぐ諦めたわけではなく、C++STLPerlに移植したり(未公開)、RubyPerlから呼びだそうと頑張ってみたり(後にRuby.pmとして公開;しかしまともに動かず)いろいろ遊んではいたのですが、PAUSEアカウントも英語でのメール送信が必須なので取れず、githubもない時代でどれもこれも非公開のままお蔵入り。そしてぼくはプログラミングを捨ててレストランでバイトするようになりました。これが2002年頃です。

その後いろいろあって2008年にShibuya.pmと出会うまでの約5年ほど、ほとんどコードを書きませんでした。今思うとちょっともったいないですね。Shibuya.pm以降、tokuhirom & Yappoとの出会いを経てXSを極めようと邁進することになるのですがこれはまた別の話。

昔を思い出して書いていたら長くなりました!とりあえずこんな感じでいいですか。