C++、Java、Perl、Rubyの比較評価
最初のページのデモでお見せした形態素解析プログラムを筆者が作成したのは、約5年ほど前のことである。当時、実装用として検討した言語には、C++、Java、Perl、Rubyがあった。これらの言語を先ほどあげた5つの選択規準で比較すると、次のようになる(評価は筆者の独断であることをお断りしておく)。ただし、Rubyについてはこの5年間で長足の進歩を遂げており、参考までに現時点(2007年11月)での評価も入れておいた。
C++、Java、Perl、Rubyの評価
今回の場合は、優先される規準である「実行速度」「チューニング」「ライブラリ化」だけで評価してもC++を選択すべき理由となった。
もう1つ選択理由として、生産性もあげておきたい。実はC++はプログラマ次第で高い生産性をたたき出す可能性も秘めているのだ。C++にはテンプレートという強力なメカニズムが組み込まれている。テンプレート自体を一種の言語システムとみなすことも可能であり、関数型言語あるいは論理型言語に近い感覚でプログラミングを行うことができるのである。
また各種コンテナや文字列、あるいは動的なメモリ管理の必需品であるスマートポインタもテンプレートによって実装されている。要するに、標準ライブラリであるSTLや将来の標準と目されているboostライブラリも含めて、テンプレートを使いこなせるかどうかで5倍〜10倍くらい生産性が変わってくるのである。
C++を選択した際の問題点として普及度がある。これは自然言語処理という特殊な分野であり、コアな技術であるので誰にでも開発や保守ができるというものではなく、技術が属人的になることが認められる世界でもある。したがって、普及度についてはある程度目をつぶることができよう。
以上、ある意味優等生的な説明であったが、最後に筆者の個人的な選択規準として「自由度」あるいは「楽しさ」もあげておきたい。
時として、C++は言語仕様が複雑なせいで自由度の少ない言語と思われがちである。しかし実際のところは、#ifdefによる細かい調整とか、CPUやメモリに直結した低水準性とか、クラスによるオブジェクト指向とか、テンプレートによるジェネリックプログラミングとか、さまざまなパラダイムをあつかえる言語なのである。
問題のドメインにあわせて、どのパラダイムを使うかがまさにプログラマに任されているという点で、自由度の高い言語なのだ。逆にいえば、プログラマには複数のパラダイムを使いこなすことが求められているのである。そしてこの「使いこなし」が「楽しさ」に通じるのである。自由度や楽しさについては、このシリーズの最終回にもう一度触れることにしたい。
次回は、Webアプリケーションにおける負荷分散の要請から、「Java」を選択した理由を紹介する。あわせて、アノテーションなどのJavaの新しい機能がどのように活用されたかも紹介する予定だ。 タイトルへ戻る