凪瀬 Blog
Programming SHOT BAR

目次

Blog 利用状況
  • 投稿数 - 260
  • 記事 - 0
  • コメント - 46946
  • トラックバック - 192
ニュース
広告
  • Java開発者募集中
  • 経歴不問
  • 腕に自信のある方
  • 富山市内
  • (株)凪瀬アーキテクツ
アクセサリ
  • あわせて読みたい
凪瀬悠輝(なぎせ ゆうき)
  • Java技術者
  • お茶好き。カクテル好き。
  • 所属は(株)凪瀬アーキテクツ
  • Twitter:@nagise

書庫

日記カテゴリ

 

アスペクト指向の概念のコメント欄より。

リスナーの所を読んでみました。C#から入った私から見るとjavaの考えるイベントの仕組みは確かに面倒そうに感じました。でもいまどきならIDEでイベントなんか組み立てるんでしょうからコードの冗長なんて些細な問題なのかなあとも思いました。
そういえばリンク先を読んでいて思い出したのですが何かの本でMicrosoftとSunでこのイベントモデルの共通化の協議が行われたと書いてあったんです。このときSunがどうしてもMicrosoftのdelegateによるイベントモデルを受け入れなかったとか。うちにある本のどれかに書いてあったんですが・・・どこに書いてあったか忘れてしまいました><
凪瀬さんご存知でしたらネタとかにして教えてくれるとうれしいです。

この話は私は聞いたことがないのですが、MicrosoftとSunでイベントモデルで対話をするとしたら、 Java1.1ぐらいの時代(1997年)なのではないでしょうか。

当時、Microsoftが出したVisual J++ (Java1.1のエディタ)は曰くつきの代物で、 Javaでコードを書いてWindowsのネイティブアプリケーションを生成できるというものでした。

この当時、要するにMicrosoftはWindows開発のための次世代開発言語としてJavaに狙いをつけていた。 だから、Windows開発のために都合のよいイベントモデルとなるような提案をしていたとしても不思議はありません。

Javaの仕様策定のプロセスは時代で変わっていますが、当時だとSunが主導で大手からの申し入れを協議していたのかな? このへんは調べてみないと分からないのですが、現在のJavaほどオープンなプロセスではなかったような。 MicrosoftがSunに対してJavaの仕様で提案するならこういうシチュエーションではないでしょうか。

結局、Visual J++ のWindowsネイティブアプリ作成の機能はSunの逆鱗に触れ、訴訟にまで発展し、 MicrosoftはJava互換を名乗れなくなりました。 Javaを名乗るツールで作ったものがJavaのVMで動かないというのはJavaの 「Write once, run anywhere」という精神に反するもので、Javaコミュニティには受け入れられなかったのですね。

結局、Javaが使えなくなったMicrosoftはC#を開発することになるわけですね。 C#はMicrosoftが独断で好き勝手に機能を盛り込めますから、C++にあった、 しかしJavaでは敢えて削られた機能もてんこ盛りになっている、という印象です。

Javaはその設計時に演算子オーバーロードは敢えて外しているわけです。 delegateを受け入れなかったのはその拡張による煩雑さを嫌ったからではないでしょうか。

投稿日時 : 2008年3月25日 17:21
コメント
  • # re: Javaとdelegateのおはなし
    アキラ
    Posted @ 2008/03/25 18:19
    エントリ内容とは直接的には関係ない話ですが

    >いまどきならIDEでイベントなんか組み立てるんでしょうからコードの冗長なんて些細な問題なのかなあ
    こういうIDEに頼り切ったプログラミングは個人的に気に入らないです
  • # re: Javaとdelegateのおはなし
    凪瀬
    Posted @ 2008/03/25 18:42
    個人的に気に入らない、と言われてしまうと「そうですか」以上のことは言いにくいのですが…。

    IDEなしで作業する前提があるならそれも考慮事項でしょうけども、IDEなしで作業することがない前提の開発環境において、
    IDEの機能を利用しない積極的なメリットがあるのでしょうか?
    IDEが使えなくない状況で作業をしないといけない確率が無視できるほど小さいなら、IDEの機能を使って作業効率を上げればいいんじゃないでしょうか。

    IDEでのコード生成が使えないときに、目の前の作業に時間がかかる程度のリスクのために、
    IDEを活用しないのは本末転倒に思えます。
    いや、「頼り切る」ってそこまでの意味で言っていないのかもしれませんけども。
  • # re: Javaとdelegateのおはなし
    NyaRuRu
    Posted @ 2008/03/25 19:51
    この辺読んでみると面白いかも。
    http://java-house.jp/ml/archive/j-h-b/001862.html
  • # re: Javaとdelegateのおはなし
    アキラ
    Posted @ 2008/03/25 20:19
    今回の場合の「頼り切る」の話は
    IDEの機能を使ってコードを簡単に組む、というだけではなく
    コードを読む・解析する・レビューする、ということも考えたほうがいいのではないか、ということです
    そういったときに、「IDEが生成したコードだから冗長でも気にならないでしょ」って言えるのかなーと
  • # re: Javaとdelegateのおはなし
    myugaru
    Posted @ 2008/03/25 20:22
    ぼ、ぼくだってコマンドラインでC#コンパイルくらいできるやいヽ(*`Д´)ノプンプン
  • # re: Javaとdelegateのおはなし
    凪瀬
    Posted @ 2008/03/25 22:28
    Java-houseが健在のころの…というか96年だと本当にJavaの出始めの頃の議論ですね。
    12年前の議論ですが、自分は今だとやっと議論の内容がわかる…。

    > 「IDEが生成したコードだから冗長でも気にならないでしょ」って言えるのかなーと

    Javaだと機械生成されたgetter、setterは邪魔に思いますけどね。
    でも、それはJava6.0までの言語仕様ですからIDEを恨むのは筋違いですし。

    そういえば話題にしている「コードの冗長」ってなんだろう?
    Javaの場合は面倒はあるけど冗長になるわけじゃないしなぁ…。
  • # re: Javaとdelegateのおはなし
    NyaRuRu
    Posted @ 2008/03/26 0:04
    んで,例の Sun と Microsoft の delegate に関する対立がこの辺りですね.98 年ごろ?
    とりあえず一読おすすめです.
    http://java-house.jp/ml/archive/j-h-b/020252.html
    http://java-house.jp/ml/archive/j-h-b/threads-019700.html

    議論中何度も出てくる Anders Hejilsberg は,現在 C# の父として知られるあの Anders です.

    ちなみに C# 1.0 での delegate はそれ程「すごいもの」とは思われていなかったように思います.
    流石に今から「いらないよね」言われるとみんな暴れますけど.今では以下のように大活躍ですしね.
    ・C# 2.0/3.0 でクロージャやラムダ式を実装するときに都合が良かった
     → LINQ に繋がった
    ・Lightweight Code Gen (GC 可能な実行時生成メソッド) の受け皿として都合が良かった
     → DLR に繋がった

    まあ先を見通すのは難しいということなのでしょう.
    先日のデブサミで「言語設計は機能の導入時に将来のことが完全に見通せるわけではないのが難しい」と波村さんが仰っていましたが,実際 Anders 自身,ここまで読んで当時 delegate を提案していたかというと結構怪しいんじゃないかと思います.

    それはそれとして,上の Java-House での議論は当時の常識を知る上で貴重な資料という気がしますね.
  • # re: Javaとdelegateのおはなし
    siokoshou
    Posted @ 2008/03/26 0:48
    http://java.sun.com/docs/white/delegates.html

    これのことかも。MS提案じゃなければ議論の方向はどうなっていたかなぁなどと考えてしまったり。でも、これがなければもしかして C# はなかったかもしれないなぁとも思ったりw

    デリゲートはあんまりオブジェクト指向じゃないのかもしれないけど、実際とても便利だし、コードが短くなることは(少なくとも私にとっては)重要なことなので、とてもありがたい存在です。

    NyaRuRu さんのコメントともちょっとかぶりますが、デリゲートまわりは C# 改版のたびに改良・拡張されて、今ではとても自然に簡単に書けるようになっています。これも、Java で拒否されたから意地になってる面があるのかなぁと勝手に邪推してたりしますw
  • # re: Javaとdelegateのおはなし
    NyaRuRu
    Posted @ 2008/03/26 1:41
    .NET delegate が「化けた」のは generic delegate が使えるようになってからですし,generics 導入前の Java には荷が重かったというのはあるかもしれません.

    ちなみに,今から .NET が再設計されるなら,generic delegate が first class object になって,あと Void が Unit に置き換えられるんじゃないかと妄想.
    その意味では .NET もだいぶ失敗はあるんですよね.
  • # re: Javaとdelegateのおはなし
    凪瀬
    Posted @ 2008/03/26 22:18
    非常に興味深い情報をありがとうございます。
    たかだか10年前の情報といえども歴史を調べるってのは大変ですね…。
    ちょっと消化が追い付きません。

    これは、何かまとめないと勿体ないな…
  • # re: * Microsoft J#に代わる新しいJava互換言語
    凪瀬 Blog
    Posted @ 2008/04/01 12:08
    re: * Microsoft J#に代わる新しいJava互換言語
タイトル
名前
Url
コメント