スクリプト言語の息の根を止めるのは案外 SSD かもな
大変たいへん興味深い記事。全プログラマーにとって。
HDDの代わりにSSDを利用したら、リレーショナルデータベースの性能はどれだけ向上するのでしょうか? オラクルと富士通が共同検証を行い、その結果をホワイトペーパーとして先週発表しました
HDDをSSDにしたらデータベースはどれだけ速くなるか? オラクルと富士通が実験 - Publickey
...(snip)...
HDDは200スレッドで性能が頭打ちなのに対し、SSDは200スレッドから300スレッドになってもまだ性能は上昇。ただし、300スレッド時にはCPU利用率が100%に近づいており、先にCPU性能の方がボトルネックとなってしまったようです。
動的なスクリプト言語 (Ruby や Python など) と静的なコンパイル型言語 (C++ や Java など) では、だいたい 5 倍から 10 倍ぐらいの速度差がある。それでもスクリプト言語が実用的に使われたのは、言語の速度差がそのままアプリケーションの速度差にはならないから。つまりスクリプト言語で作られたアプリケーションが、必ずしも C++ や Java 製のアプリケーションより 5 倍も遅いというわけではない。
言語の速度差がそのままアプリケーションの速度差にならない理由は、CPU より I/O (ネットワークやディスクアクセス) がボトルネックになるから、というのはよく言われるし、実際そうである。少なくとも今までは。
しかし SSD が主流になり、ディスクアクセスや DB がボトルネックにならない (あるいはなったとしてもペナルティが少ない) ような時代になったら、言語の速度差がそのままアプリケーションの動作速度になる可能性がある*1。そうなると、プログラミング言語の速度が今よりずっと重要になるだろうし、動作速度の遅いスクリプト言語は人気が暴落するかもしれないね。まあ暴落まではいかなくとも、人気が下がることは大いにありうる。
スクリプト言語屋さんは今からそのときに備えるべきだろう (そのときが来てからじゃ手遅れ)。とりあえずできることは:
- スクリプト言語の実装を高速化する
- Python なら unladen-swallow とか、JIT を搭載して CPython より速い (こともある) PyPy とか
- PHP なら C++ に変換して実行するとか
- Ruby はささだ先生頼み? それとも LLVM 頼み?
- 並列化や非同期 I/O を拡充する
- Ruby なら EventMachine とか NeverBlock とか (1.9 に Fiber が搭載されててほんとうによかった)
- C 実装の関数やライブラリを増やす
- h() とか CGI.parse() とかはもう拡張モジュールにすべきだと思うんだ
つーかね、21 世紀も 10 年目に突入したんだし、もうそろそろ「スクリプト言語並みに使いやすい 静的な言語」が主流になって欲しいよね。もともと速度的に不利なスクリプト言語を一生懸命高速化するよりも、そっちのほうがあるべき姿だと思うんだけど、賛同者はおらず。なんで OCaml は今いち人気がでないんだろう。