|
1995年5月の発表以来、Javaはブームとも呼べる注目を浴び主要なベンダの多くがJava関連の製品を市場に送り出してきています。またその可能性についても熱狂的な支持から懐疑的な意見までさまざまな観測がなされています。どちらかというと地味な性格の「言語」がこれほどいっきに注目を集めることは従来無かったのではないかと思います。
その理由のひとつはJavaが単なる言語にとどまらす、パソコン特にWindows95及びNTを採用した豊かなクライアントを主体としたシステム構築方法への対抗案として、Thin Client或いはNC(Network Computer)と呼ばれるコンピューテングスタイルの中心的な道具として喧伝されたことによります。さらにJavaを次世代システムの方向といわれるマルチティアや分散オブジェクト型のシステム開発、さらにモバイルや組込み型ソフトのプラットフォームとして利用しようとする動きも盛んです。このようにJavaに関連する分野はひろく、さらに仕様そのものも変化していく中で次々と製品が登場してくるため、Javaの全容の把握が難しく実システムへの応用にも不安が残るというのが現時点の状況だと考えられます。 ここでは、原点に戻り言語としてのJavaの特性について説明します。 JavaはC++の親戚? Javaはプログラム人口の多いCやC++の仕様のうち、プログラムを複雑にする要素や誤りの発生し易い仕様を除外、修正することにより、よりシンプルで習得し易い言語にすることをねらっています。見た目の仕様で荒っぽくいえば、JavaはC++のサブセットともいえます。C++を知っているエンジニアなら、容易にJavaによるプログラミングを始めることができます。また、Javaはプログラムの堅牢性を高める意図で、Cでは多用するポインタをなくし、メモリ管理を処理系自身で行うことにしています。 一部ではJavaは易しい言語であるという意見がありますが、これはC++よりも習得が容易という意味で、オブジェクト指向言語としてのC++を駆使できるエンジニアが少ないのと同じように、Javaで本格的なアプリケーションを作るのは、相当の技術力が必要と考えられます。特に現時点ではJavaおよびそのサポート環境の実装レベルでの問題が多いために、この問題を解析したり解決するための手間とスキルが要求されます。 JavaとC++の具体的な比較および簡単な例については、下記のページを参照ください。 VMとバイトコード Javaでいうコンパイルは、ソースプログラムを、1バイト長の命令で構成される中間コードを(Javaバイトコード)生成すること言います。Javaプログラムの実行はVM(Virtual Machine)という処理系がこのバイトコードを実際のシステムの命令(ネイティブコード)を逐次置き換えることで実現されます。この点が、Java処理系の最大の特長であり、ここから有名な「Program once, Run Anywhere(TM)」の主張が生まれています。つまり特定のプラットフォームに依存した処理はVMが処理してくれるので、プラットフォームに対応するVMを用意すれば、同じJavaプログラム(Javaバイトコード)がどんなプラットフォーム上でも動くという訳です。 同時にこれは、Javaの弱点にもなります。中間コードから(特定マシンの命令である)ネーティブコードに変換するオーバーヘッドのため、最初からネーティブコードになっているプログラムより実行速度は遅くなります。またプラットフォームに独自の機能を十分に或いは効率よく活用できない可能性がります。またネットワークコンピュータでは、このバイトコードをネットワークでサーバからクライアントに転送するオーバーヘッドが問題になります。この点がJavaを疑問視するサイドからよく批判される問題です。 分散オブジェクトとネットワーク Javaは、ネットワーク化された分散環境を強く意識した言語であり、TCP/IP、HTTP、FTPなどのInternetプロトコルをサポートしており、ネットワーク関連の処理が極めて容易に行える仕様になっています。また洗練されたオブジェクト指向言語であり、リモートオブジェクトも含めた分散オブジェクトの連携処理をエレガントに行うことができます。 堅牢性とセキュリティ Javaはネットワーク環境を前提としているため特にシステムの安全性に配慮した設計になっています。ネットワーク上でダウンロードされるJavaアプレットについては、その動作についてSecurity上の観点から厳しい制限を課しています。またセキュリティと密接に関連する堅牢性についても、コンパイル時及び実行時のチェックを厳しく行うこと、問題の発生しやすいポインタを仕様からなくすことなどにより配慮しています。しかし、ブラウザーなどの実装方法により、セキュリティホールが発生する可能性もあり、特にInternetにオープンな環境では個別に十分に配慮する必要があります。 コンパクトな仕様と処理系 Javaはその処理系がコンパクトに実装できるためにモバイルコンピュータ、情報家電、セットトップボックス、スマートフォンなどモバイル及び組込み型システムへの応用も期待されています。このためのAPIとして、PERSONALJAVA、EMBEDDEDJAVAなどのAPIが提案されています。 (Dec 10, 1997 -) (注)本稿は、1997年10月掲載の「Javaの概要」を再掲したものです。その後Java自身もJava2がリリースされた他、関連仕様が大きく変わり、Javaベースの製品が数多く出てきましたが、基本的な状況はあまり変わっていないように思われます。 |
|
|


