hogehoge

Javaの多言語化

コラム, 記事 コメントは受け付けていません。
5月 122008
hugahuga
代表取締役 牧野 隆志

makino.JPG



Javaの多言語化が進んでいます(多言語と言ってもmultilingualizationの話
じゃありません)。




元々(と言うか今も)Javaは、”Write once, run anywhere”(一度(プログラム
を)書けば、どこでも実行できる)をコンセプトにしています。




Javaが出てきた当時(1990年代前半)のソフトウェアの世界はクライアント/
サーバが全盛。オープンシステムはC言語やC++で書くのが一般的でした(ちな
みにメインフレームの世界は今も昔もCOBOL)。C言語は非常に言語仕様が単純
でありながらOS(UNIX)も書く事ができるほど強力でプリミティブな言語です。
多くのプログラマに受け入れられた一方でオブジェクト指向という新しい潮流
のなかでC++言語を生みました。C++はCをも上回る強力な言語なのですが、残念
ながらその強力さ故の複雑さというか拡張性に富んだ言語仕様により、ごく一
般的なプログラマが使いこなすことは難しかったように思います。




CやC++は基本的な言語仕様は標準化されていましたが、OSの機能を呼び出す
システムコールなどのライブラリはプラットフォーム毎に少しずつ違っていま
した。ある環境(OS)で動いてたCのプログラムを別のOSに持ってきてコンパイル
しても動かない、コンパイルすら通らないのが当たり前です。アプリケーショ
ンプログラムの場合、別のOSに移す事はそう頻繁にあったわけではありませんが。
オープンといいながらある意味そうオープンでもなかったわけです。




さて話をJavaに戻しましょう。




Javaを作ったサンは”Network is computer”を標榜し、いわゆるコンピュータ(パソコンとかサーバ)に限らずネットワーク上の様々なデバイスが協調して動くことを目指していたと思われます(逆に言うといろんなデバイスがネットワークに繋がると)。C言語だとUNIX間ですら互換性がないのに、全てのデバイスで互換性なんて期待できない。ましてやデバイス毎に違う言語で書くなんてとんでもない!




“Write once, run anywhere”というコンセプトが生まれたのは必然だったのでしょう。全てのプログラマはJavaさえ書ければいいんだ、とは何とも独裁者的発想です。ともかく、Javaは広く受け入れられました。C/C++に似せた構文にすることで多くのC/C++プログラマがJavaにやってきました。徹底的にC++の複雑さを排除したシンプルな言語仕様によって、Cプログラマにもオブジェクト指向の世界が広がったのです。一通り標準的なクラスライブラリが提供されたことも大きな
意味がありました。新しく言語を学ぶ人にとっても敷居は決して高くはなかったでしょう。(なかなか多言語に行き着かない・・・)




さて、ソフトウェア界の巨人マイクロソフトはJavaの成功に指をくわえて眺めていたわけでも、Javaの波に乗るわけでもなく、.NETという新しい世界を作りました。面白いことに彼らも.NETさえ動けばいいと同じ独裁者的発想でありながら、Javaとは全く別のアプローチをとっています。マイクロソフトにはWindowsという既に世の中を制したプラットフォームがあり、どんな言語で書いたプログラムも.NETで動くようにしました。つまり、(Javaのように)新しい言語を学ばなくてもあなたの知ってる言語で今すぐ.NETできますよ、と。Javaにもろに影響を受けた新しい言語C#に限らず、VBだろうと、C++だろうと、Javaですら。.NETは多言語であることが特徴の一つだったわけです。




実は(というほどでもありませんが)Javaは三つの構成要素からなります。一つ目はJava VM(仮想マシン)、二つ目は標準クラスライブラリ、そして三つ目がJava言語。そう、Java VMの上で標準クラスライブラリを使って動くのはJava言語で書かれたプログラムじゃなくてもいいですが、ほんの少し前までJavaの一部としても、サン以外からも提供されていませんでした。私の知る限り昔からあったのはBeanShellとPnutsくらい。いずれも当初はJavaアプリケーション(クラス)を手軽に動かす、テストすることを目的にしていたように思います。




Pnutsはその後Webアプリケーションを書く言語として強化されていきます。PHPなどでWebアプリケーションを書いている、Java言語を使いこなせない人にもJavaプラットホームを活用できるようなスクリプト環境を実現することを目指しているそうです。
Webは登場から一気に広まり、サンが想像していた全てのプログラマがJavaを書ければよいというのとは違った世界を作りました。PHPのような簡易でWebに特化した言語しか書けないプログラマ(PHPが書ければ困らない)やWeb2.0というWebの先にいる普通の人がプログラミングする環境。




一方でシンプルな言語であるが故に、より高度なプログラミングを目指すプログラマにとってJavaはつまらない言語にみえま
す(あるいはあきちゃった)。Rubyの洗練された言語仕様やお手軽さ、関数型言語の柔軟さ、C#の何でもあり。
隣の芝生は青く見えるじゃないけど、何でもかんでもJavaというわけにはいきません。特にスクリプト言語のお手軽さや動的型付けは、多様化するJavaの利用形態のなかでJava言語ではまかなえない魅力を持ちます。




Ruby(JRuby)やPython(Jython)など既存の言語のJavaへのポーティング、GroovyやScala
など最初からJavaで動かすことを前提に設計された言語。JavaFX scriptもありますね。




いずれもそれだけで書かれたアプリケーションとして動かすことが可能で、特にJRuby
のようにRuby on Railsで構築したWebアプリケーションをJavaという堅牢なプラットフォ
ームの上で動かすことができるようになったものもあり、今後ますます利用が拡大するものと思われます。




逆にシステムの多くの部分をJavaで書きながら、Javaじゃ効率よく書けないところ、
例えばメタプログラミングが必須となるフレームワークなどではScalaのような言語が
使われていくと想像します。ScalaはコンパイルしてJava同様クラスファイルを生成する
こともできますから、スクリプト言語で不利な性能が問題になることもなく、有望だと思います。




いずれにしても、Java言語だけで全てを解決できなかったように、今後は構築するシス
テムやプログラムを書く人(プロジェクト)によって適材適所で言語を使い分ける必要が
あると考えています。





今年のJavaOneのテーマは”JAVA+YOU”でした。Javaが様々なところで動きかつ様々な
人がJavaで動くソフトウェアを書く。真の”Write once, run anywhere”な世界が広がり
つつあります。

当社サイトのご利用について  |  Image: scottchan / FreeDigitalPhotos.net
© 2012 アジャイル開発 | Enterprise Java | 株式会社アットウェア Suffusion theme by Sayontan Sinha