ホームページ目次前の話次の話

JAVAの古いバージョンへの対応に四苦八苦

1999年1月31日

久々にJAVAについてでも書こうかな。それより、そろそろ原稿締め切り が近いとの声もあったが、その前に急にしなくてはならない事が発生してしまっ たのである。原稿の締め切りに合わせたように事件は起こるものらしい。ネタを 提供してくれるので、有難いと思うのが正しい解釈なのだろうか。

自分のマシンはLinuxで、誰でも使える、貧乏人でも使えるJDKを使って 暇潰し用Javaパズルプログラムの開発を行ってきた。もちろん、私は全部ネッ トワークからダウンロードして使っているやつばかりである。

長い間JDK1.0、あるいはベータ版で開発を行ってきたのであるが、これは要 するにJava1.0にしか対応していないので、Java1.1の本とかのJavaソースを入 力してコンパイルすると、「そんなもん知らん!」というエラーメッセージの 山になる。どうやってもJava1.1をコンパイルできないので、昨年末に自分の LinuxマシンにはJDK1.1のLinux版を入れて、遅まきながら息子に遅れを取って はならじと勉強を始めていた。

さて、少し前から、僅かながらでもホームページへのアクセスを増やす努力 でもしてみようということで、 『JAVAパズルコンテスト』 なるものをでっち上げ、とりあえず開始しようとしている。それで、開始する にあたり、自分のJAVAページをいつまでも放置していては悪いだろうという ことで、年末あたりから色々調整をしていた。

そして、Netscape4.5なるものも出てきた。このブラウザでJAVAパズル を実行すると、実は一部あるいはほぼ全部表示されなかったりする不具合がで ていた。それ以前のブラウザでは問題になっていなかったし、自分のマシン上 のNetscapeは4.0.4で、Java1.0対応なので脳天気に構えていた。しかし、 Netscape4.5を利用している人々から、「遊べないよう〜」という叫びが届く ようになった。国内の日本語のは無視していたのだが、そのうち海外からも頻 繁に届くようになったのである。

Linux用のNetscape4.5が出たらちゃんと調整しようと思っていたら、ちゃん と出てしまったので、インストールして動かしてみると、ちゃんと動かない。 自分の開発環境でJAVAパズルが動かないとなると、これは仕事どころでは ないということで、今までのJavaパズルのプログラムをコンパイルし直してみ た。今まで隠れていたバグが発覚してしまったものもあった。まあ、こういう 時に発見されることは多いものである。

そうして、一通りコンパイルし直して、いい加減にLinux上のNetscape4.5で テストをして、「まあ動いているか」ということで、一気に変更を加えてしまっ た。この変更が1週間前である。

そうしたら、今度は、それ以前のNetscapeで動作しないというメールが届く ようになった。これも、最初は国内だけであったが、海外からもじゃんじゃん メールが来るととても返事を書くわけにはいかないので、対処することにした。 つまり、Java1.0以降のどのJavaでもちゃんと動くようにしなくっちゃいけな い。間違っても、新しい機能を使っちゃいけない。プラグインを使って、新し いJavaの機能を吸収するという手はあるのだが、そもそも古いNetscapeなどを 利用しているユーザというのは、できるだけ小さな軽いブラウザを使おうとし ているわけで、そういう人々にメモリやハードディスクの負担をかけるわけに はいかない。

それで、結論は、バックワードコンパチビリティを取るということにした。 要するに、古い昔のJavaでも動くようにすることにした。せっかくJava1.1に 書き直した部分は元に戻した。Javaの古いコンパイラは、もう不要だろうと思っ て消去してしまったのであるが、メーリングリストで世界の果てにはまだある という情報を得て、東ヨーロッパから取り寄せた。

この古いJAVAコンパイラ(javac)でコンパイルすると、ちゃんと古代Java言 語仕様でチェックしてくれる。進みすぎたコーディング部分はエラーになり、 古いコンパイラは大変役に立った。そうして正しく古いタイプのJavaソースプ ログラムになったものを、新しいコンパイラでコンパイルしたのを今日から公 開である。しかし、コンパイル時に、-deprecation なるオプションを付けろ といわれる。deprecationとは、「非難、反対、抗議」と いうようなろくでもない意味である。このオプションは、非難、反対、抗議す べきような箇所がいっぱいあるどうしようもないプログラムのときは、「非難、 反対、抗議」の対象となるような場所をどんどん指摘してくれる。そのうち サポートされなくなるかも知れない箇所を親切に教えてくれるのだが、ちゃんと 直して警告が出なくすると古いJAVAでは動かない。困ったものだ。

昔のブラウザでも動くようにしようとすると、どうしてもこういう後ろ向き の作業が多くなる。過去をバッサリ切り捨て、過去のバージョンとは相性の極 めて悪いシステムを有料販売しているところもあるが、それに比べればJAVAな ぞとても良心的なものである。ちゃんと過去への互換性もとりあえずは何とか なるのだから。


ホームページ目次前の話次の話