(メモ)この HTML の生成にはクラリスワークス 4.0 v3 の HTML 出力機能を使用 しました。背景色と GIF ファイル名とこのメモ部分のみ手動で書き換えたが、それ 以外はクラリスワークスの出力そのままです。
ともあれかくあれ、もし下記レポートの記述内容に間違いがあったら ご指摘下さい。 ちなみに1時間くらいかけて作ったサンプルアプレットの実物は こちらから見れます。 (あひん、恥ずかしいわん。もっとまともに書けば良かった?)

Java に関するレポート

1997年 6月 3 日(火)提出
95T0413X 川崎 有亮 <u-suke [at] kawa.net>



・Java と Java 仮想マシン

Java は、C++ に似たプログラミング言語である。C++ と違って基本的に Java 仮想マシンのインタプリターで実行され、またネットワーク通信への対応が先進的である。

Java 仮想マシンは、既存のプラットフォームの上に存在し、バイトコードを実行する。開発者は Java 言語のソースファイル(.javaファイル)を書き、バイトコード(.classファイル)にコンパイルする。これらのバイトコードが Java 仮想マシンの命令語となり、Java プラットフォームの存在するマシンであれば、実際のオペレーティングシステムに関係なく同じバイトコードを実行することができる。

Java プログラムから参照する Java API では、プログラマがどのようにオブジェクトの機能にアクセスし、アプリケーションやアプレットを開発するかの規格を定めている。Java API は、JavaOS、Microsoft Windows、UNIX、MacOS などに実装されるすべての Java 実行環境で共通になっている。(そのためバイトコードも共通に利用できる)


・Java と Java プラットフォームの実現

既存のオペレーティングシステム上で Java プラットフォームを使用する場合、Java 仮想マシンと基本クラスは、オペレーティングシステムに組み込むことも、ウェブブラウザなどのアプリケーションに組み込むこともできる。Java プラットフォームを実現するためには、Java 実行環境に対するマルチスレッドのサポートやメモリ管理機構などの機能を提供しなければならない。

Java プログラミング言語では、全てのオブジェクトやクラスへのアクセスをカプセル化する事で、メモリの直接処理が取り除かれており、空きメモリは自動的に収集される。ポインタを取り除く事で、Java は C よりも頑丈なプログラミング言語になっており、アプリケーションのメモリ関連のバグが非常に少なくなる利点がある。


・JavaOS

Java プラットフォームのひとつ JavaOS は、Java 仮想マシン、標準のクラス・パッケージ、およびそれらをサポートするために必要な OS コードから構成されている。JavaOS には既存の OS とは違う、以下のような特徴がある。

・JavaOS を ROM に置くことで、簡単に素早くブートできる
・ファイル・システムを必要としない
・仮想メモリを必要としない
・複数のアドレス空間を必要としない
・1つのプログラミング言語しかサポートしない(Javaのみ)
・独自のシステム・コール・セットを持っていない(APIのみ)

JavaOS のデバイス・ドライバ、ネットワーク、ウィンドウ、およびグラフィック関連のコードは Java で書かれており、JavaOS 自体の移植性を向上させている。ただし、純粋な Java コードでは記述できない部分は、ハードウェアに依存しない C プログラムで、さらに残りのハードウェアに依存する部分は C やアセンブリ言語などが用いられている。



・Java と JavaScript

JavaScript は Netscape Communications 社が開発したインタプリタ型プログラム言語で、ウェブページの HTML にスクリプトを埋め込んでおくと、そのページをブラウザで表示する段にプログラムが実行される仕組みである。ソースの見た目は Java と少し似ているが、クラスの継承ができない、ネットワーク通信機能がない、など実際には大幅に異なっている。両者は全くの別物なので注意したい。

JavaScript は当初 LiveScript という名前で開発が進められていたが、途中から JavaScript と名称が改められ、Netscape Navigator 2.0 以降のブラウザに搭載されている。同 Navigator 3.0 では JavaScript1.1 にバージョンアップされ、機能が強化された。

Microsoft 社も同社のブラウザ Internet Explorer 3.0 で JavaScript の実行に対応したが、両ブラウザの実行結果に完全な互換性はなく、混乱を招いている。

Microsoft 社は JavaScript だけでなく Java でも独自拡張を進めようとしている。
この場合、統一プラットフォームという Java 環境の目的が果たせなくなる懸念がある。


・Java の問題

Java 言語は基本的にインタープリタ形式で実行するため、現状ではどうしてもその実環境のネイティブコードのアプリケーションよりも実行速度が遅くなってしまう。これに対し、実行時にバイトコードからネイティブコードへの変換を行う Just-In-Time コンパイラの開発などが行われており、また "重い" 現在の OS 自体の処理を回避するメモリ管理やスレッド管理機構などの搭載によって、既存 OS 上のネイティブコードよりも高速動作が行えるようになる、かもしれない(それを裏付けるデータも一部で提出されている)。

ところで Java は比較的新しいプログラミング言語であるため、たびたび Java 言語または現在の Java 実行環境が内包した(セキュリティー等)問題が露呈することがある。それの問題を解決していくことで Java 言語はより強固なものへと発達していく。

ただ、Sun Microsystems 社が現在認めていて、現在は修正する予定のない問題がひとつある。巷で話題の西暦2000年を境にした桁溢れの問題(いわゆる2000年問題)には既に Java 言語は対応している。しかし、西暦292271023年には Java にも問題が発生する。これについては別紙(同社ホームページより)の通りだが、3億年後までにはその問題に対応した別の新しい言語に置き換わっているのではないかと思われる。

最後に、過去の C 言語がテキストベースしか想定しておらず、統一されたグラフィック環境が実現できなかったように、Java も現在想定できるハードウェア環境から逸脱した新環境が現れた場合に対応できるのかどうかという懸念もある。しかし、Sun Microsystems 社、JavaSoft 社(あるいはその他)により、Java を新環境に *標準的に* 対応すべく、統一して拡張されるよう期待したい。


・参考 URL
http://www.sun.co.jp/ 日本 サンマイクロシステムズ社ホームページ
http://www.sun.com/ 米 Sun Microsystems 社ホームページ


・Java アプレットサンプル "buttontest.class"

数字を表示するラベルと、4つのボタンを表示し、クリックしたボタン(+1・-1・*2・/2の4種)に応じてラベルの数字に演算を行い、その結果で順次表示を変更していくプログラム。ボタンクリック判定部分で簡単なイベント処理を行っている。(.java ソースは別紙)


このアプレットは Solaris 用 JDK 内の javac 及び appletviewer を使って、開発(コンパイル・動作確認)を行ったが、そのバイトコード(.class ファイル)をそのまま Macintosh に転送し、Netscape Navigator 3.01 でも実行することができた。


ボタンの形状などに、X 版 appletviewer との違いが見られるが、単一の配布プログラムで複数のプラットフォームに対応できる点が確認できたことはとても興味深い。(当然だが)

Mac で実行したところのスクリーンショットを以下に掲載する。(画面左上に Apple マークの代わりに Be マークがあるが、それでもこれは Macintosh の画面である :-)




Javaに関するレポート 川崎 有亮(95T0413X)