- PR -

特集「私がJavaからC#に乗り換えた10の理由」について

投稿者投稿内容
お犬様
ベテラン
会議室デビュー日: 2003/01/26
投稿数: 67
投稿日時: 2003-07-09 08:22
引用:

さて、一つのプログラムに占めるメソッド呼び出しの割合はどれくらいでしょう。プログラム中でメソッドが10億回呼ばれたとしても4秒しか実行時間が変わらないのじゃなくて?


それ以前に、この4秒の差がインライン展開される/されない によるものだとすれば
インライン展開されない大きさのメソッドでは final をつけたとしても
たったの4秒すらも変わらない可能性すらありますし。

以下の記事にも書いてありますが、
一般的にマイクロベンチマークの計測結果はそれほど「現実的」ではありません。
http://www-6.ibm.com/jp/developerworks/java/030627/j_j-jtp04223.html
andy
会議室デビュー日: 2002/11/22
投稿数: 13
投稿日時: 2003-07-09 09:33
噛み付くようですが ^^;

英-Ranさん>
>私には「悪夢を統べるもの」さんの具体的な意見が批判され、
>シンタックスシュガーすら理解しておらず、
>感覚に頼った意見で議論をすすめるおじまさんの文章が持ち上げられる理由が
>よくわからないので、後方支援させていただきます。

まさに言語議論(趣向)って、理論と感覚、理想と現実が融合したところが
あると思うんです。(だから白熱しちゃう)

私自身は、ずっとLinuxとかでgccのC++仕様を使ってきて、
VS.NETが発売されても1ヶ月ぐらい完璧、無視こいていました。
そして、C++Builderがあまりにもタコなので、何かないかな?と思って
物色していたらC#と出会ったという経緯です。

基本的にはMSを信じてないし、C#に出会う前はWindowsアプリ作る仕事が
なければ別にVisualStudio使う気もしなかったです。

でも、C#(と窓使いの憂鬱)に出会った今となっては
Linux+Emacs+gccには戻れません。
(現在特に私が気に入っているのは、ヘッダ不必要という仕様
[Serializable]機能 foreach と、もちろんOOP部分)

Eclipse+Javaも結構よさそうなんですが、(一瞬触りました)
別にVisualStudio+C#で十分満足しているので移行する積極的な
動機がないのが実情です。
H2
ぬし
会議室デビュー日: 2001/09/06
投稿数: 586
お住まい・勤務地: 港
投稿日時: 2003-07-09 11:25
とっても白熱してますね!

私は基本的にJava大好き人間ですが、JavaかC#、所詮どちらも道具なのでケース・バイ・ケースだと思います。

C++は基本的に「プログラマーは自分が何をしているのか理解している」ことが前提なので、風変わりなコードを書いても許されてしまいます。確かに柔軟性は高くなるのですが、うっかりミスのためのバグの嵐に陥ることが多いですよね。

柔軟性がないといわれるJavaはのシンプルさはプログラマーを信用していないという点で他の言語を凌駕していると私は思っています。人間は間違いを起こします。だから余計なものは一切足さずに、人間が作りえるミスを極力減らしています。道具としてみるのであれば、Javaの信念の方が正しいと思います。

C#はどうかというと、JavaとC++の真中ぐらいでしょうか?Javaほどシンプルではないけれど、C++ほど複雑ではない。

どれにも長所があり、短所があるのでどれを使うかはやはりケース・バイ・ケースです。

因みに現在の仕事では機器の遠隔監視ツールを開発中です。デザインも実装も一手に引き受けているので個人的には全部Javaでやりたいと思うのですが、JavaとC#のミックスにする予定です。サーバ側はどんなプラットフォームで使われるか分からないのでJavaで、クライアント側はWindowsユーザーが多いのとGUIの体感的速度が気になるのでC#で実装します。

なお、処理効率(パフォーマンス)についてですが、遅いと文句を言われるのであれば半年待って新しいPCを買えば解決します。 今まだCPUの速度が2倍になる法則は健在なのですから。finalをつけるかつけないか、virtualをつけるかつけないか、言語でサポートされるようなキーワードを一つ付けただけで変わる速度なんてタカがしれています。それよりも、速いアルゴリズムを考える、20/80ルールによる局所的な効率化、スレッド対応の方が大事です。

開発工程における効率(コストパフォーマンス、品質などなど)ですが、これも判断が難しいですね。まずC++は除外しますが、JavaとC#。個人的には先行しているJavaの方が熟成している分良いのではないでしょうか?まだまだ分かりませんが・・・。

私があげるJavaの良いところ
1.シンプルであること
2.シンプルであること
3.シンプルであること
4.シンプルであること(しつこいですか? 苦笑)
5.ドキュメント類の見易さ (MSDNは見にくくないですか?)
6.特定のプラットフォーム・企業・組織に依存しないこと
7.オープンなコミュニティが多いこと
8.Sunが中心になって言語の一貫性や整合性が高いこと(6と7のポイントは、逆を言うと様々なエセ仕様準拠製品がでる可能性があるということですが、それが他の言語と比べると少ない)

引用:

Kuolemaさんの書き込み (2003-07-08 15:28) より:
Javaの教理は、他の言語を認めない一神教のようなものに感じてしまいますが、
Javaとは、神が人類のためにお与えになった唯一の救世主なのでしょうか?(あるいは、MSに属するものはすべてサタンに属するものなのでしょうか?)・・・違いますよね。


もともとJavaは100%ピュアを目指してましたからね 笑 確かに多言語との協調が悪いですね。JavaコミュニティーでもアンチMSも多いですし。ちなみに「一神教のようなものに」見えてしまうのは仕方がありません。他の言語との融合を認めてしまうとJVMによるマネジメントができなくなり、Javaのシンプルさが損なわれます。ただその代わりにJava同士の親和性は高いと思いますよ。

[ メッセージ編集済み 編集者: H2 編集日時 2003-07-09 11:49 ]
object
ぬし
会議室デビュー日: 2002/03/20
投稿数: 338
お住まい・勤務地: 香川県高松市
投稿日時: 2003-07-09 12:51
objectです。

引用:

英-Ranさんの書き込み (2003-07-08 21:48) より:
「delegate」がコンポーネント指向を目指す上でどのような必然があるのかをきちんと論理的に説明してください。私が挙げた「ABOUT MICROSOFT'S "DELEGATES"」を読んでいただければ「delegateも無名Inner Classも機能は同じ」、「delegateは記述が短いがクラスの構造を壊す」、「無名Inner Classは冗長ではあるがクラスの構造を壊さないし、新しい概念を加える必要がない」ということが説明されているはずです。Microsoftがコンポーネント指向というからにはグラフィカルな開発を念頭においているのでしょうが、グラフィカルに開発するのであればdelegateだろうが無名Inner Classだろうが記述量は変わらないのではないですか。


一応、前のレスで書いている積もりだったんですが、書き直します。

コンポーネント指向のC#が、重要視しているのは、イベントです。
※イベントドリブンですから、まあ当然と言えば当然ですが…。
※コンポーネント指向の説明にはコンポーネントの説明が必要ですが、ここでは省略します。

そのイベントを実装する手段として、「delegate」は導入されたと思います。
下に、イベントの記述例を示します
コード:
記述例)
public delegate void EventHandler(object sender, EventArgs e);
public event EventHandler Notify;



コンポーネントが最初に意識された状況は、設計時にそのオブジェクト自身に設計を支援させる、という状況だと思います。
この状況で重要なのは、所謂イベントを「単一のメソッド」にバインド出来る安全な実体としての「イベント」です。

私が言いたかったのは、「delegate」と「無名Inner Class」が同じかどうかとか、記述量の事ではなく、
下の様に、C#では「delegate」で実装される「event」(イベント)が基本要素であるという事です。

コード:
interface {
  メソッド;
  プロパティ;
  イベント;
  インデクサ;
}

class {
  フィールド;
  メソッド;
  プロパティ;
  イベント;
  インデクサ;
}


「delegate」は、C#では「イベント」という、言語としての実体、基本要素を定義しているんです!
Javaの場合、「無名Inner Class」は言語に対してどんな位置付けになるのでしょうか?
言語に於いては、一部だけを取り出して比較しても、殆ど意味が無い場合があると思います。
Wata
ぬし
会議室デビュー日: 2003/05/17
投稿数: 279
投稿日時: 2003-07-09 13:22
引用:

H2さんの書き込み (2003-07-09 11:25) より:
どれにも長所があり、短所があるのでどれを使うかはやはりケース・バイ・ケースです。


やはり、これが真理ですよね。
それに対して、尾島氏の記事にはC#のjavaに対してのおじま氏の考える長所しか
述べられていないような気がします。

尾島氏ならC#のjavaに対する短所についてもよくご存知のことと思いますが、
それを棚に上げてしまっては、やはりプロパガンダと言われても仕方ないと思います。
次は、両言語について徹底的に客観的な視点から双方のメリット、デメリットを
比較した記事が読みたいです。

ところで、ここの『改訂版 C#入門』の記事には検査例外(javaでいうところのRuntimeExceptionのサブクラスでない例外)についての記述がありませんでしたが、C#には検査例外はないのですか?
ないとしたら相当なデメリットになると思うのですが…。
andy
会議室デビュー日: 2002/11/22
投稿数: 13
投稿日時: 2003-07-09 14:10
ちゃちゃを入れるような投稿になってしまいますが...

JavaとC#(C#とJava)の論争って、カトリックとプロテスタント、
大乗仏教と小乗仏教、イスラム原理主義と穏健派の論争と似ているように
(外からは)見えてしまいます。
(兄弟みたいなものだから、もっと仲良くやればいいじゃん!と言ってしまうと
「世界はそれで戦争してんだ!」って突っ込みが返ってくるかもしれませんが..)

それよりもMS的には
「私がBasicからC#に乗り換えた10の理由」っていう記事が
きっとほしいはず!

だれか書かないかな...
Kuolema
会議室デビュー日: 2002/05/03
投稿数: 12
投稿日時: 2003-07-09 14:36
引用:

andyさんの書き込み (2003-07-09 14:10) より:
ちゃちゃを入れるような投稿になってしまいますが...

JavaとC#(C#とJava)の論争って、カトリックとプロテスタント、
大乗仏教と小乗仏教、イスラム原理主義と穏健派の論争と似ているように
(外からは)見えてしまいます。
(兄弟みたいなものだから、もっと仲良くやればいいじゃん!と言ってしまうと
「世界はそれで戦争してんだ!」って突っ込みが返ってくるかもしれませんが..)

それよりもMS的には
「私がBasicからC#に乗り換えた10の理由」っていう記事が
きっとほしいはず!

だれか書かないかな...



輪をかけてくだらない突っ込み(andyさん、皆さん怒らないでー)。
外(ソフトの中身を知らない一般ユーザ)から見ると.NET Frameworkは多言語をサポートするので、大乗仏教、JavaVMは小乗仏教でしょうか(笑)?または、同じ民族同士の民族紛争のように見える?
でも、中からみると例えていうなら、キリスト教とイスラム教、もしくは、多神教徒(もしくは無神論者)と一神教徒の違いぐらいはあるように感じるのではないでしょうか?特に、Java(教)原理主義者にとってみれば、ECMA,(まもなく)ISO標準となってもC#は邪教にしか見えないのでは・・・。.NET Frameworkは、言語として(J#の形で)、Javaの価値を認めても、逆はありえないのでは。


[ メッセージ編集済み 編集者: Kuolema 編集日時 2003-07-09 14:39 ]
autumn
大ベテラン
会議室デビュー日: 2001/07/27
投稿数: 215
投稿日時: 2003-07-09 14:59
引用:

Wataさんの書き込み (2003-07-09 13:22) より:
ところで、ここの『改訂版 C#入門』の記事には検査例外(javaでいうところのRuntimeExceptionのサブクラスでない例外)についての記述がありませんでしたが、C#には検査例外はないのですか?
ないとしたら相当なデメリットになると思うのですが…。


 これは私の記事についての質問でしょうか?
 まず、例外クラスは.NET Frameworkクラスライブラリに含まれるものであって、C#に含まれるものではありません。ご注意下さい。
 私自身は、.NET Frameworkクラスライブラリのプロフェッショナルというわけではないので、確実な断言はできませんが。(かといってC#のプロフェッショナルでもないですが)
 JavaのRuntimeExceptionに対応する概念は.NET Frameworkクラスライブラリには存在しないと思います。私自身、Javaは詳しくありませんが、もし、RuntimeExceptionがthrows節に記述する必要があるかどうか判断する機能を持っているとするなら、throws節に該当する機能の無いC#では構文上意味を持たない概念かもしれません。
 .NET Frameworkクラスライブラリの例外の詳細については、「プログラミング .NET Framework」(Jeffrey Richter著 日経BPソフトプレス)の18章のあたりが詳しく説明しています。

(なお、私自身は、JavaとC#の議論の関わるつもりは全くありません。念のため。自分の記事についての質問は受け付けますが、この会議室も常時見ているわけではありませんので、見落としがあるかも知れません。ご了承下さい。)

スキルアップ/キャリアアップ(JOB@IT)