TOPシステム開発> 【新・言語進化論】言語選択の分かれ道> 第2回:自然言語処理にC++を選んだワケ (3/3)

【新・言語進化論】言語選択の分かれ道

【新・言語進化論】言語選択の分かれ道

第2回:自然言語処理にC++を選んだワケ

著者:Jurabi 岡 俊行

公開日:2007/11/8(木)

C++、Java、Perl、Rubyの比較評価

最初のページのデモでお見せした形態素解析プログラムを筆者が作成したのは、約5年ほど前のことである。当時、実装用として検討した言語には、C++、Java、Perl、Rubyがあった。これらの言語を先ほどあげた5つの選択規準で比較すると、次のようになる(評価は筆者の独断であることをお断りしておく)。ただし、Rubyについてはこの5年間で長足の進歩を遂げており、参考までに現時点(2007年11月)での評価も入れておいた。

C++、Java、Perl、Rubyの評価
C++、Java、Perl、Rubyの評価

今回の場合は、優先される規準である「実行速度」「チューニング」「ライブラリ化」だけで評価してもC++を選択すべき理由となった。

もう1つ選択理由として、生産性もあげておきたい。実はC++はプログラマ次第で高い生産性をたたき出す可能性も秘めているのだ。C++にはテンプレートという強力なメカニズムが組み込まれている。テンプレート自体を一種の言語システムとみなすことも可能であり、関数型言語あるいは論理型言語に近い感覚でプログラミングを行うことができるのである。

また各種コンテナや文字列、あるいは動的なメモリ管理の必需品であるスマートポインタもテンプレートによって実装されている。要するに、標準ライブラリであるSTLや将来の標準と目されているboostライブラリも含めて、テンプレートを使いこなせるかどうかで5倍〜10倍くらい生産性が変わってくるのである。

C++を選択した際の問題点として普及度がある。これは自然言語処理という特殊な分野であり、コアな技術であるので誰にでも開発や保守ができるというものではなく、技術が属人的になることが認められる世界でもある。したがって、普及度についてはある程度目をつぶることができよう。

以上、ある意味優等生的な説明であったが、最後に筆者の個人的な選択規準として「自由度」あるいは「楽しさ」もあげておきたい。

時として、C++は言語仕様が複雑なせいで自由度の少ない言語と思われがちである。しかし実際のところは、#ifdefによる細かい調整とか、CPUやメモリに直結した低水準性とか、クラスによるオブジェクト指向とか、テンプレートによるジェネリックプログラミングとか、さまざまなパラダイムをあつかえる言語なのである。

問題のドメインにあわせて、どのパラダイムを使うかがまさにプログラマに任されているという点で、自由度の高い言語なのだ。逆にいえば、プログラマには複数のパラダイムを使いこなすことが求められているのである。そしてこの「使いこなし」が「楽しさ」に通じるのである。自由度や楽しさについては、このシリーズの最終回にもう一度触れることにしたい。

次回は、Webアプリケーションにおける負荷分散の要請から、「Java」を選択した理由を紹介する。あわせて、アノテーションなどのJavaの新しい機能がどのように活用されたかも紹介する予定だ。 タイトルへ戻る




株式会社Jurabi 岡 俊行
著者プロフィール
株式会社Jurabi 岡 俊行
CTO
コンシューマ系の機械翻訳ソフトの開発に10年ほど携わった後、活動の場を広げるべく、現Jurabiの設立に参加。自然言語処理やオープンソース開発などの技術指向をコアとしつつも、上流から下流までを見通せる高付加価値な技術者の育成を目指す。自身はC++の泥臭さとLispのシンプルな奥深さを愛する言語好き。
http://www.jurabi.jp/


INDEX
第2回:自然言語処理にC++を選んだワケ
  自然言語処理とは
  自然言語処理を実装するプログラミング言語に求められる特性
C++、Java、Perl、Rubyの比較評価