アカウント名:
パスワード:
C++ はいろんなもの(OSからアプリケーションまで)が書ける点はいいのですが、どうしても C の影響を受けて、純粋なオブジェクト指向で記述ができなかったり、演算子やテンプレート(Generic)など複雑な仕様がわかりにくかったりしますよね。
その点 Java は、C++ から複雑な仕様を取り除いて簡単にしたため、理解しやすい言語になっていると思います。ここまではよく言われることなのですが、Java は様々な嫌な面も持っていて
これらをうまく改善できればすばらしい言語になるかなと思っています。個人的には Generic は欲しいですが、これから勉強する人には毒になる仕様(つまり間違った使用方法に使われる)ですし、演算子もオーバーライドしたときの挙動がわかりにくく、むしろ長所よりも短所のほうが目立ちます。
だから、大学などの学習用言語としては妥当な言語じゃないでしょうか?ちゃんとしたアプリケーションも記述できますしね。
余談ですが、
やっぱりVMが立ち上がるまでの時間が長いのがちょっと許せないです。
いつも気になるのは C, C++, Java など一般的な言語はなぜ Method は複数の値を返せないんでしょうか?いや返値専用のクラスを作ってそれを生成させて返せば解決するんですけどわざわざそうしなくてもいいような気がします。(そんなに不便でもないんですけど(^^;)
まぁいろいろ不満はあるにしろだいぶ現実的に使える言語にはなってきました。Java 2 SDK 1.4 以降ではほぼ必要な API は用意されました。セキュリティやマルチメディア、グラフィック周りでこれほど充実した環境は多分ないと思います。あるとしたら Squeak あたりかな。
それから、
でも、一社が仕様策定を独占しているという状況はよくないと思う。
最近は JCK など仕様に関してオープンになっていますから、そう気にする必要もないでしょう。
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
あつくて寝られない時はhackしろ! 386BSD(98)はそうやってつくられましたよ? -- あるハッカー
C++, Java の長所短所 (スコア:1)
C++ はいろんなもの(OSからアプリケーションまで)が書ける点はいいのですが、どうしても C の影響を受けて、純粋なオブジェクト指向で記述ができなかったり、演算子やテンプレート(Generic)など複雑な仕様がわかりにくかったりしますよね。
その点 Java は、C++ から複雑な仕様を取り除いて簡単にしたため、理解しやすい言語になっていると思います。ここまではよく言われることなのですが、Java は様々な嫌な面も持っていて
- null はどの型にもキャストできてしまう
- null はオブジェクトではない
- 数値(Primitive)はオブジェクトではない
- Method は複数の値を返せない
- Package のアクセススコープは複雑
書いていて多少ストレスも感じられます。Java は遅いと言われたりしますが、HotSpot VM などの速い VM が出来て来たのでもう問題ではありません。Swing は確かに遅いですけどね:-P(でも最近は改善されつつある)。これらをうまく改善できればすばらしい言語になるかなと思っています。個人的には Generic は欲しいですが、これから勉強する人には毒になる仕様(つまり間違った使用方法に使われる)ですし、演算子もオーバーライドしたときの挙動がわかりにくく、むしろ長所よりも短所のほうが目立ちます。
だから、大学などの学習用言語としては妥当な言語じゃないでしょうか?ちゃんとしたアプリケーションも記述できますしね。
余談ですが、
- 強い型チェック
- クラスの単一継承
- 境界の多重継承
は欠点とも言われますが、むしろエンタープライズ分野では長所とも考えられます。Re:C++, Java の長所短所 (スコア:1)
やっぱり、僕がJavaを使ってみて一番ストレスに感じたのは、処理系と実行環境の遅さでした。非GUIアプリケーションでは一回VMが立ち上がってしまえば速度的にはあまり問題がないんですが、やっぱりVMが立ち上がるまでの時間が長いのがちょっと許せないです。
あと、最後に挙げられた短所ですが、僕も全部長所だと思っています。
Re:C++, Java の長所短所 (スコア:1)
ははは、確かに。でも JIT や HotSpot VM がない状態だと結構早いんですよ。たとえば J2ME CDC, CLDC な環境だと、CPU やリソースがかなり貧弱でもまぁまぁ起動も速いし、スピードもまぁまぁです。たぶん VM だけの問題ではなくて、膨大な API 郡をメモリに展開するのに時間がかかってるんだと思いますが(笑)。いつも気になるのは C, C++, Java など一般的な言語はなぜ Method は複数の値を返せないんでしょうか?いや返値専用のクラスを作ってそれを生成させて返せば解決するんですけどわざわざそうしなくてもいいような気がします。(そんなに不便でもないんですけど(^^;)
まぁいろいろ不満はあるにしろだいぶ現実的に使える言語にはなってきました。Java 2 SDK 1.4 以降ではほぼ必要な API は用意されました。セキュリティやマルチメディア、グラフィック周りでこれほど充実した環境は多分ないと思います。あるとしたら Squeak あたりかな。
それから、
これは確かに気になるでしょうね。でも Sun が一時期独占したからこそ現在の地位があるとも言えます。最近は JCK など仕様に関してオープンになっていますから、そう気にする必要もないでしょう。Sun は Java そのものでは儲かっていないようですが、J2EE などもう標準になっていますし、それを動かす標準的な Solaris 8 の地位は上がっていると言えますし、別のところで利潤を感じているので Java を独占することはもうないでしょう。Re:C++, Java の長所短所 (スコア:1)
返り値の話については、C, C++の場合、「関数」という概念から考えるとしょうがないのかなぁという気もします。
今のJavaはAPIが充実してますねぇ。僕はJava2が出たころくらいまでしか分からないですが、コンテナクラスが充実していて非常に便利でした。Swingも、速度を除けば(ここが結構重用だったり...)非常に扱いやすいですし。ただ、僕の場合は研究上3Dグラフィックスをよく使うので、Javaの3Dグラフィックス周り(Java3D)の仕様およびパフォーマンスには不満ありです。Javaを使う上では、ポータビリティがパフォーマンスより優先すると思うので仕方ないかもしれませんが、特定のハードウェアの拡張機能が使えなかったりするのが致命的です。ということから、C++をメインに使っています。
これ、知りませんでした。最近はオープンになっているんですねぇ。数年前、Java2APIのバグに悩まされた経験があって、開発がオープンでないことが非常に恨めしかったです。BugParadeのTop10に入っていたバグなのに、修正が採り入れられたのはJDK 1.4で、約二年もかかりました。さすがにこれには懲りてしまいました。