Friday 18 May 2007

Java



というわけで、プログラミング言語シリーズ。

James Gosling と言えば、実は、Gosling Emacs という、Stallman のではないEmacs で有名な人だった。で、「C++ の騒ぎが収まった後に、いまさら、オブジェクト指向言語?」というのが最初の印象です。最初は組込みとかの用途だったらしいのだが、売り込みに失敗して汎用言語/WWW用の言語として売り出したらしい。

最初の印象は極めて悪いです。配列にはキャストして入れるのかよ? で、配列に入っているオブジェクトのクラスがわからなくなるから、new Interger(n) とかするの? 正気ですか? 自分の言語のターゲットして、Java VMが使えるかと思って調べてみたら、Block begin, Block end っていうコードがある。そういうものは仮想マシンコードとは言いません。そういうのは、構文木を表すコードっていうの。処理系も遅かったしね。AWT も出来悪かったし。しかも、ソースコード出さないわけ? おかげで、Kaffe とかいう実装にはまったりしましたが。

IOが使いにくい。Byteとchar/string の扱いが面倒。Multi Thread が、良く考えられてなくって、synchronized ばかりになってしまう。そんなこんなで、一太郎ARKが、Pure Java で出たときは、ちょっと驚きました。「そんなものが書ける言語だったのか?」みたいな感じ。Cで書いたUser level transport layer をJavaで書くってのをやって、すごく苦労したし(学生が...)。その時点で、オブジェクトのリンクを工夫してnew をけちって再利用したりすると、GCの関係で遅くなるなんて話も聞きました。「それじゃReal-timeに使えないだろ」と思った。結局、GCされないメモリ領域とかがReal-time Java では用意されたらしい...

もっとも、JITと、Interface は、良いアイデアだったと思う。どっちも借り物だけどね。Applet が流行らなかったのは残念だったが。流行らなかった理由は、Applet で使えるJavaのエンジンのversionが、ちっとも新しくならなかったから。例のMicrosoft の問題もあったし。

なんだけど、1.5 になってから、ぐっと良くなった。Java のGeneric は、配列のキャストのsyntax suger であって、型にしか付かないので理解しやすい。Iterator もまとも。nio は、ぐっとUnix寄りになっていて使いやすい。Thread と Lock も整理されたし。

Java の仕事をちょっとしたこともあって、OSの課題の大半をJavaでも書きました。Eclipse との相性はいいしね。Eclipse のdebugerは、ちょっと使いにくいけど。Perl/Tk で書いた自分用のソリテアをJavaに書きなおすってのをやりたいのだが、微妙に暇が見付けられず。なんでだろ。もっとも、Java で、それほど大きなアプリケーションを書いたことはありません。

No comments: