nomuran's diary

野村直之のはてな日記(後継ブログ)です

[ruby] 馬鹿っ速のテキスト処理

内容を詳しく書けなくて恐縮ですが、C言語で書かれた文字列処理のエンジンを、社内で100% ruby で書き換えたところ、20数倍高速になった、という予想以上の効果がありました。他のエンジンより多く時間をくっていた処理なので、アプリ全体としても実測で、どんな場合でも旧版の10倍を超える処理速度となりました。

巷では、軽量言語ブームの説明として「ハードが高速化したので遅いのが気にならなくなった」という言い方がよくなされますが、私はそれは違うと思っています。このあたり、全部書いたら大論文になってしまうので控えますが、、要は、ハイレベルで記述した処理内容が、舞台裏で、時間複雑度O (log N)とか、O(N*logN)とか 以下の最適なアルゴリズムに変換されるため、ナイーブなアルゴリズム手続き型言語で記述したプログラムよりも高性能になってしまう、ということがあるのです。それも非常に頻繁に。

今回の事例では、JIT を備えたruby 1.9も使っていません。Ruby 1.8.* です。

3、4年位前、そう、笹田耕一さんと出会った頃、さらに、1年前、松江でまつもとゆきひろさんと歓談した際には、Ruby 1.8.*がここまでの能力をもっているとは知りませんでした。

プログラム言語は、人間とコンピュータの間の通訳をしてくれる道具です。そして、Rubyは、従来の言語と違って、機械寄りではなく、徹頭徹尾人間寄り、というところに優位性があり、性能は2の次、という巷間の理解を共有していたわけです。

しかし、よく考えてみれば、2分探索から分割統治、オンメモリのハッシュなど、物理的なデータ構造を自動で最適化できる余地は、ハイレベルのインタプリタ言語でこそ、大きかったわけです。たった1行の記述が最適な構造体とメソッドを備えたオブジェクトの生成に、1対1対応できるわけですから。

ということで、ここ数日、私もコンピュータサイエンティストの端くれとして、まつもとさんへの尊敬の念が高まっています。
最高の開発効率、そして最高に近い性能を、コンピュータサイエンティストでない開発者が実装しても叩き出してくれるRubyを産み出してくれて、本当にありがとう!