アカウント名:
パスワード:
なんか気づいたらいろんなところで動いてた。知らん間にWrite Once, Run Anywhere
もともとjavaをかなり意識して作られたものだし、CLIって規格上は最初から特定プラットフォーム依存じゃなかったからね。当のMicrosoftがWindows以外の実装を長いこと作らなかっただけで。
言語仕様についてはおっしゃるとおりですが、マルチプラットホームを本気で考えていたかどうかは疑問ですね。
ただし、初期の仕様においても、Javaの丸パクリではなく、デリゲート(関数参照)とか、プロパティとかあって、なんでもかんでもオブジェクト指向で面倒臭いJavaの弱点を改良しようとする野心がうかがえました。
オブジェクト指向原理主義のJavaに対し省力化原理主義のC#という感じ。#短いは正義
Java が何でもかんでもオブジェクト指向ってのは無理があるな。オブジェクト指向をかいつまんでるけど、シンプルな面だけでやろうとして、破綻したところの辻褄を合わせた言語であって、オブジェクト指向的ではないってところが目立つ言語だろう。# 辻褄合わせのバランスは90年代当時の類似言語の中ではかなり良く出来てた。
オートボクシングのないJava1.4以前を見たとき、その不完全なオブジェクト指向に酷く失望しました。
ボクシングが無い方がオブジェクト指向的には美しいように思いますが。面倒ですけど。もっとも、そのボクシングもジェネリックでスカッと過去の遺物になりましたが。
プリミティブラッパークラスなんてものがある時点でどうやっても美しくないんだよ。C#はプリミティブ型と上手く整合させた上に、シンタックスシュガーを積極的に追加したので(好みの問題はともかく)今がある。あとJavaのジェネリクスは相変わらずプリミティブ型取れんだろ。
メソッドをオブジェクトとして扱えなかったJavaがなんでもかんでもオブジェクト指向とはどういう意味か
もちろんそういう話じゃなくて、Javaのオブジェクトはかならずnewされてヒープに配置されるって話だろう。C#のValueTypeやボクシングのような、ざっくりいうと劣化オブジェクトのようなものがないという意味で、Javaは純粋だ。
元コメは、いわゆるオブジェクト指向の話としてはたしかに不正確だったが、趣旨はふつうにわかったな。
ボクシングのような、ざっくりいうと劣化オブジェクトのようなものがないという意味で、Javaは純粋だ。
Java使ったことありますか?別コメントでボクシングの話が出ているのに。
IA32/Intel64/ARMと、Windows/WinRT/XBOXのサポートは自前でやってなかったっけ。そういうのサポートする気がないならハナからMSILでバイナリ吐いたりはしないと思う。
それは後になっての話ですね。当初は、Javaがマルチプラットフォームだから、うちもマルチプラットフォームという対抗心でしか無かったかのように思います。
Microsoft製のCLI実装として、2001年に公開されたShared Source CLIというものがあり、FreeBSD版とMac OS Xが動いています。オブジェクトレイアウトなどが現行の.NET実装とほぼ一緒なので、現在のMicrosoft実装の原型と考えられるものです。2001年にオープンソースとして公開されました。MicrosoftのOSSへの歩み寄りの先駆けといえるソフトウェアです。
https://en.wikipedia.org/wiki/Shared_Source_Common_Language_Infrastructure [wikipedia.org]
2001年にはすでにマルチプラットフォームを検討していたということです。
すみませんオープンソース警察です。(コメACは分かっているのかもしれませんが)
シェアードソースCLI (コードネームRotor) はソースコードを公開しましたが、そのライセンスは利用目的を「個人的および学術的な目的」に限定していたので、オープンソース・イニシアティブが定義したオープンソースの定義 [wikipedia.org]には合致してないんですね。当然、コミュニティと共に実装を発展させていくという動きもありませんでした。Monoプロジェクトの創設者であるMiguelは「Rotorが(真の)OSSだったなら、Monoを作るかわりにそっちを使えていただろうに」 [hatena.ne.jp]と言ってます。
Rotorは言ってみればリサーチプロジェクトでしかなく、「マルチプラットフォームを検討」というのはあくまでリサーチの範囲での検討、ということでした。なので#3510350の「マルチプラットホームを本気で考えていたかどうかは疑問」は同感です。とはいえ、Rotorで実験的に実装されたプラットフォーム抽象化レイヤーが、その後Silverlightの実装にも生かされ、最終的に.NET Coreにも知見が反映されてはいるので、MS的には無駄ではなかったのでしょう。(Monoチームがどう思っているかは別として)
オープンソースとマルチプラットフォームは、理屈の上ではあくまで独立した話のはずだけど?
WindowsNTは、Microsoft単独で複数種のCPUに対応していたんだし、頭のどこかにマルチプラットフォームのことがあって不思議じゃない。
> #3510553「本気で考えていた」をどう受け取ったのかに差異があるんだと思います。リサーチは重要ですし、Rotorの時点で将来的なマルチプラットフォーム展開の可能性を切り捨てたわけではないと思いますし、前コメにも書いたようにRotorの知見が.NET Coreに反映されていると考えています。それでも個人的には、最低でも製品戦略に組み込んでロードマップ発表する、もっと言えば実プロダクトをリリースしたうえでバージョン3まで続ける、というあたりがMSの本気かなあと思うのです。マルチプラットフォーム展開に関するそういう意味での本気は、レガシー.NET Frameworkについてはゼロ、Silverlightでそこそこコミット、.NET Coreでフルコミットかなあと思います。私の感覚ですが。
> #3510719オープンソースとマルチプラットフォームが別の話なのはその通りですね。前コメは話題をちょっと混ぜてしまいましたが、別に「OSSにしなきゃマルチプラットフォームとは言えない」なんてことはさすがに思っていません。あと、「頭のどこかにマルチプラットフォームのことがある」レベルの話はたぶん誰も否定していません。上で書いたように「本気だったかどうか」については見解が分かれたみたいです。
「マルチプラットフォームを検討」=「マルチプラットフォーム化する際に障害になりうる要素を洗い出し排除する」というのが普通の開発だし、MSは本気でそれをやったことはいま大きなトラブルが起きてないことからわかるこういう人は「マルチプラットフォームを検討」=「いきなり実装」と考えているのかな?OSS界隈には頭より先に手が動く人が多いんだろうかそれはそれで結構なことだが、自分が先を見据えた設計ができないから他人もそうだとは思わないでほしいところ
知りませんでした。早期からマルチプラットフォームの取り組みはあったのですね。ただし、会社としてどの程度本気だったかはどうでしょうか。
もちろん分かっている。だけど、Exception.HResultとか、そもそも文字列がUTF-16であることとか、ときおりWindows由来っぽさを感じることは自分もあるよ。なので、元のコメント#3510350の気持ちも理解できなくはない。
Exception.HResultはともかくUTF-16なのは時代的な面もあるのでは?JavaだってUTF-16だったし、Unicodeの追加面が実際に定義されたのはC#の誕生より後。
そしてC#が生まれたころLinuxはEUCが当然だった。1990年代後半から2000年代前半にかけて16bitでは足りないと見切った人々の選択はUTF-32だった。UTF-8がローカルでここまで使われるようになると、どれだけの人が予想できただろうか。
いや、UTF-8 は交換用が主用途だろ…Linux/UNIX や Windows のいずれも UTF-8 を内部コードとしては使ってないよ。
それは詭弁というか、UTF-16がWindows由来っぽいって話とは別の次元では?
Javaを例に出して、グローバル文字列といえばUTF-16だったって言ってるじゃないですか。JavaScriptだって内部的にはUTF-16ですよ。文字コードを取得する古い関数なんかではそちらのコードが取得できます。
>> UTF-8がローカルでここまで使われるようになると、どれだけの人が予想できただろうか。> いや、UTF-8 は交換用が主用途だろ…UTF-8 がローカルで広く使われているという説を否定しています。
まずは一例としてlocaleコマンドの結果ゲロってみろよ
'locale' は、内部コマンドまたは外部コマンド、操作可能なプログラムまたはバッチ ファイルとして認識されていません。
Microsoft本体は今でもWindows以外の実装は作ってないでしょう。Monoを作った連中を買収しただけ。
Monoとは別に、MSが作っているランタイムが.NET Core [microsoft.com]。LinuxおよびmacOSをサポートしている。主としてサーバーサイド向けで、GUIフレームワークは今のところ含まれていない。
GUI部分はMS内の抵抗勢力によってOSS実装から外されたらしい
仮に作るよ言うてもWPFましてやWinFormsなんていくらMSでもどうにもならんだろうな。MonoのWinFormsもバグだらけだがあの程度でも動いてるのは凄いもんだ。
Xamarin・・・・
買収されてMicrosoftの身内になったってことだから、ことさらそこで切り分ける意味はないと思いますが。当面はある程度距離を置くつもりらしいGitHubと違って、.NETという共通の基盤を開発していくために密接に関わることのメリットは大きいと思うし。
なんとかディスりたい気持ちはわかるが、.NET CoreがMicrosoft本体でないというのは無理がありすぎる。
しかも今後はWindowsネイティブの.NETよりも.NET Coreの方に力を入れていくって言ってるしな
MSの本業は言語屋だったのだから、本来の仕事に戻るだけだな。
当初はJavaのパクリって認識だったけど、年数を経て今では言語環境的にはJavaが3周くらい周回遅れでリタイア寸前な感がある
言語についてはコメントしないが、ランタイムやエコシステムの成熟度についてはやはりJVMはかなり優れていると思う。
MONOはよくわかりませんが、ランタイムとしては.NETの方がはるかにこなれてる気がします。JVMの存在を意識することはあっても、.NETを意識することはあまりないので。
JavaはSunが買収された後生かさず殺さずをされているから仕方がない。
JAVAという言語自体がOracleの影響度で危なっかしいので近寄りたくないかな……
# Oracleリスクとでも言うか。
C#が出てきた頃は、JavaよりC#の方が法務的な面でヤバくないと真顔で言える時代が来るなんて想像出来なかったよ・・・。
ISOに登録されてもそういう見方してたのであれば、自分を見直した方がいいよ。
意識したもなにももともとはJ#として売り出したらSunに訴えられて敗訴して、C#って改称しただけですし
何か猛烈に勘違いしてないですか?J#はC#と同時期にリリースされた別物で、Sunに訴えられたりもせず単に不人気でフェードアウトしましたよ。
.NET言い出したころ出た最初のVisual Studio .NETがべらぼうにIDEとして出来が悪くてこんなものほんとうに担いでいくのかまた捨てるつもりだろと思ったのを思い出した。いつのまにか.NETがMSの大きな財産になってたな
Write Once, Run Anywhereなんて言っちゃうとDebug Evrywhereという呪いにかかってしまいます
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
アレゲはアレゲを呼ぶ -- ある傍観者
今更盛り上がってきてるよねC#ってか.NET (スコア:0)
なんか気づいたらいろんなところで動いてた。
知らん間にWrite Once, Run Anywhere
Re:今更盛り上がってきてるよねC#ってか.NET (スコア:1)
もともとjavaをかなり意識して作られたものだし、CLIって規格上は最初から特定プラットフォーム依存じゃなかったからね。
当のMicrosoftがWindows以外の実装を長いこと作らなかっただけで。
うじゃうじゃ
Re:今更盛り上がってきてるよねC#ってか.NET (スコア:1)
言語仕様についてはおっしゃるとおりですが、マルチプラットホームを本気で考えていたかどうかは疑問ですね。
Re:今更盛り上がってきてるよねC#ってか.NET (スコア:1)
ただし、初期の仕様においても、Javaの丸パクリではなく、デリゲート(関数参照)とか、プロパティとかあって、なんでもかんでもオブジェクト指向で面倒臭いJavaの弱点を改良しようとする野心がうかがえました。
Re:今更盛り上がってきてるよねC#ってか.NET (スコア:2)
使われてる範囲の割には言語自体は嫌われてるよね。
Re: (スコア:0)
オブジェクト指向原理主義のJavaに対し
省力化原理主義のC#という感じ。
#短いは正義
Re: (スコア:0)
Java が何でもかんでもオブジェクト指向ってのは無理があるな。
オブジェクト指向をかいつまんでるけど、シンプルな面だけでやろうとして、破綻したところの辻褄を合わせた言語であって、オブジェクト指向的ではないってところが目立つ言語だろう。
# 辻褄合わせのバランスは90年代当時の類似言語の中ではかなり良く出来てた。
Re: (スコア:0)
オートボクシングのないJava1.4以前を見たとき、その不完全なオブジェクト指向に酷く失望しました。
Re:今更盛り上がってきてるよねC#ってか.NET (スコア:1)
ボクシングが無い方がオブジェクト指向的には美しいように思いますが。面倒ですけど。
もっとも、そのボクシングもジェネリックでスカッと過去の遺物になりましたが。
Re: (スコア:0)
プリミティブラッパークラスなんてものがある時点でどうやっても美しくないんだよ。
C#はプリミティブ型と上手く整合させた上に、シンタックスシュガーを積極的に追加したので(好みの問題はともかく)今がある。
あとJavaのジェネリクスは相変わらずプリミティブ型取れんだろ。
Re: (スコア:0)
メソッドをオブジェクトとして扱えなかったJavaがなんでもかんでもオブジェクト指向とはどういう意味か
Re:今更盛り上がってきてるよねC#ってか.NET (スコア:2)
もちろんそういう話じゃなくて、Javaのオブジェクトはかならずnewされてヒープに配置されるって話だろう。
C#のValueTypeやボクシングのような、ざっくりいうと劣化オブジェクトのようなものがないという意味で、Javaは純粋だ。
元コメは、いわゆるオブジェクト指向の話としてはたしかに不正確だったが、趣旨はふつうにわかったな。
Re: (スコア:0)
ボクシングのような、ざっくりいうと劣化オブジェクトのようなものがないという意味で、Javaは純粋だ。
Java使ったことありますか?
別コメントでボクシングの話が出ているのに。
Re: (スコア:0)
オブジェクトになりきれない劣化オブジェクトの多さではJavaはトップクラスなんだから、Javaは純粋でも何でもなくオブジェクト指向の理想からは遥かに遠いところにいるのは確かだろう
Re: (スコア:0)
IA32/Intel64/ARMと、Windows/WinRT/XBOXのサポートは自前でやってなかったっけ。
そういうのサポートする気がないならハナからMSILでバイナリ吐いたりはしないと思う。
Re:今更盛り上がってきてるよねC#ってか.NET (スコア:1)
それは後になっての話ですね。
当初は、Javaがマルチプラットフォームだから、うちもマルチプラットフォームという対抗心でしか無かったかのように思います。
Re: (スコア:0)
Microsoft製のCLI実装として、2001年に公開されたShared Source CLIというものがあり、FreeBSD版とMac OS Xが動いています。
オブジェクトレイアウトなどが現行の.NET実装とほぼ一緒なので、現在のMicrosoft実装の原型と考えられるものです。
2001年にオープンソースとして公開されました。MicrosoftのOSSへの歩み寄りの先駆けといえるソフトウェアです。
https://en.wikipedia.org/wiki/Shared_Source_Common_Language_Infrastructure [wikipedia.org]
2001年にはすでにマルチプラットフォームを検討していたということです。
Re:今更盛り上がってきてるよねC#ってか.NET (スコア:4, 興味深い)
すみませんオープンソース警察です。(コメACは分かっているのかもしれませんが)
シェアードソースCLI (コードネームRotor) はソースコードを公開しましたが、そのライセンスは利用目的を「個人的および学術的な目的」に限定していたので、オープンソース・イニシアティブが定義したオープンソースの定義 [wikipedia.org]には合致してないんですね。当然、コミュニティと共に実装を発展させていくという動きもありませんでした。Monoプロジェクトの創設者であるMiguelは「Rotorが(真の)OSSだったなら、Monoを作るかわりにそっちを使えていただろうに」 [hatena.ne.jp]と言ってます。
Rotorは言ってみればリサーチプロジェクトでしかなく、「マルチプラットフォームを検討」というのはあくまでリサーチの範囲での検討、ということでした。なので#3510350の「マルチプラットホームを本気で考えていたかどうかは疑問」は同感です。とはいえ、Rotorで実験的に実装されたプラットフォーム抽象化レイヤーが、その後Silverlightの実装にも生かされ、最終的に.NET Coreにも知見が反映されてはいるので、MS的には無駄ではなかったのでしょう。(Monoチームがどう思っているかは別として)
Re:今更盛り上がってきてるよねC#ってか.NET (スコア:2)
オープンソースとマルチプラットフォームは、理屈の上ではあくまで独立した話のはずだけど?
WindowsNTは、Microsoft単独で複数種のCPUに対応していたんだし、頭のどこかにマルチプラットフォームのことがあって不思議じゃない。
Re:今更盛り上がってきてるよねC#ってか.NET (スコア:2)
> #3510553
「本気で考えていた」をどう受け取ったのかに差異があるんだと思います。
リサーチは重要ですし、Rotorの時点で将来的なマルチプラットフォーム展開の可能性を切り捨てたわけではないと思いますし、前コメにも書いたようにRotorの知見が.NET Coreに反映されていると考えています。
それでも個人的には、最低でも製品戦略に組み込んでロードマップ発表する、もっと言えば実プロダクトをリリースしたうえでバージョン3まで続ける、というあたりがMSの本気かなあと思うのです。マルチプラットフォーム展開に関するそういう意味での本気は、レガシー.NET Frameworkについてはゼロ、Silverlightでそこそこコミット、.NET Coreでフルコミットかなあと思います。私の感覚ですが。
> #3510719
オープンソースとマルチプラットフォームが別の話なのはその通りですね。前コメは話題をちょっと混ぜてしまいましたが、別に「OSSにしなきゃマルチプラットフォームとは言えない」なんてことはさすがに思っていません。
あと、「頭のどこかにマルチプラットフォームのことがある」レベルの話はたぶん誰も否定していません。上で書いたように「本気だったかどうか」については見解が分かれたみたいです。
Re: (スコア:0)
「マルチプラットフォームを検討」=「マルチプラットフォーム化する際に障害になりうる要素を洗い出し排除する」というのが普通の開発だし、MSは本気でそれをやったことはいま大きなトラブルが起きてないことからわかる
こういう人は「マルチプラットフォームを検討」=「いきなり実装」と考えているのかな?
OSS界隈には頭より先に手が動く人が多いんだろうか
それはそれで結構なことだが、自分が先を見据えた設計ができないから他人もそうだとは思わないでほしいところ
Re:今更盛り上がってきてるよねC#ってか.NET (スコア:1)
知りませんでした。早期からマルチプラットフォームの取り組みはあったのですね。
ただし、会社としてどの程度本気だったかはどうでしょうか。
Re: (スコア:0)
もちろん分かっている。だけど、Exception.HResultとか、そもそも文字列がUTF-16であることとか、ときおりWindows由来っぽさを感じることは自分もあるよ。なので、元のコメント#3510350の気持ちも理解できなくはない。
Re: (スコア:0)
Exception.HResultはともかくUTF-16なのは時代的な面もあるのでは?
JavaだってUTF-16だったし、Unicodeの追加面が実際に定義されたのはC#の誕生より後。
そしてC#が生まれたころLinuxはEUCが当然だった。
1990年代後半から2000年代前半にかけて16bitでは足りないと見切った人々の選択はUTF-32だった。
UTF-8がローカルでここまで使われるようになると、どれだけの人が予想できただろうか。
Re: (スコア:0)
いや、UTF-8 は交換用が主用途だろ…
Linux/UNIX や Windows のいずれも UTF-8 を内部コードとしては使ってないよ。
Re: (スコア:0)
それは詭弁というか、UTF-16がWindows由来っぽいって話とは別の次元では?
Re: (スコア:0)
Javaを例に出して、グローバル文字列といえばUTF-16だったって言ってるじゃないですか。
JavaScriptだって内部的にはUTF-16ですよ。文字コードを取得する古い関数なんかではそちらのコードが取得できます。
Re: (スコア:0)
>> UTF-8がローカルでここまで使われるようになると、どれだけの人が予想できただろうか。
> いや、UTF-8 は交換用が主用途だろ…
UTF-8 がローカルで広く使われているという説を否定しています。
Re: (スコア:0)
まずは一例としてlocaleコマンドの結果ゲロってみろよ
Re: (スコア:0)
'locale' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。
Re: (スコア:0)
Microsoft本体は今でもWindows以外の実装は作ってないでしょう。
Monoを作った連中を買収しただけ。
Re:今更盛り上がってきてるよねC#ってか.NET (スコア:2)
Monoとは別に、MSが作っているランタイムが.NET Core [microsoft.com]。LinuxおよびmacOSをサポートしている。主としてサーバーサイド向けで、GUIフレームワークは今のところ含まれていない。
Re: (スコア:0)
GUI部分はMS内の抵抗勢力によってOSS実装から外されたらしい
Re: (スコア:0)
仮に作るよ言うてもWPFましてやWinFormsなんていくらMSでもどうにもならんだろうな。
MonoのWinFormsもバグだらけだがあの程度でも動いてるのは凄いもんだ。
Re: (スコア:0)
Xamarin・・・・
Re:今更盛り上がってきてるよねC#ってか.NET (スコア:1)
買収されてMicrosoftの身内になったってことだから、ことさらそこで切り分ける意味はないと思いますが。
当面はある程度距離を置くつもりらしいGitHubと違って、.NETという共通の基盤を開発していくために密接に関わることのメリットは大きいと思うし。
うじゃうじゃ
Re: (スコア:0)
なんとかディスりたい気持ちはわかるが、.NET CoreがMicrosoft本体でないというのは無理がありすぎる。
Re: (スコア:0)
しかも今後はWindowsネイティブの.NETよりも.NET Coreの方に力を入れていくって言ってるしな
Re: (スコア:0)
MSの本業は言語屋だったのだから、本来の仕事に戻るだけだな。
Re: (スコア:0)
当初はJavaのパクリって認識だったけど、年数を経て今では言語環境的にはJavaが3周くらい周回遅れでリタイア寸前な感がある
Re:今更盛り上がってきてるよねC#ってか.NET (スコア:2)
言語についてはコメントしないが、ランタイムやエコシステムの成熟度についてはやはりJVMはかなり優れていると思う。
Re:今更盛り上がってきてるよねC#ってか.NET (スコア:1)
MONOはよくわかりませんが、ランタイムとしては.NETの方がはるかにこなれてる気がします。
JVMの存在を意識することはあっても、.NETを意識することはあまりないので。
Re: (スコア:0)
JavaはSunが買収された後生かさず殺さずをされているから仕方がない。
Re: (スコア:0)
JAVAという言語自体がOracleの影響度で危なっかしいので近寄りたくないかな……
# Oracleリスクとでも言うか。
Re:今更盛り上がってきてるよねC#ってか.NET (スコア:1)
C#が出てきた頃は、JavaよりC#の方が法務的な面でヤバくないと真顔で言える時代が来るなんて想像出来なかったよ・・・。
Re: (スコア:0)
ISOに登録されてもそういう見方してたのであれば、自分を見直した方がいいよ。
Re: (スコア:0)
意識したもなにももともとはJ#として売り出したら
Sunに訴えられて敗訴して、C#って改称しただけですし
Re:今更盛り上がってきてるよねC#ってか.NET (スコア:1)
何か猛烈に勘違いしてないですか?
J#はC#と同時期にリリースされた別物で、Sunに訴えられたりもせず単に不人気でフェードアウトしましたよ。
うじゃうじゃ
Re: (スコア:0)
.NET言い出したころ出た最初のVisual Studio .NETがべらぼうにIDEとして出来が悪くて
こんなものほんとうに担いでいくのかまた捨てるつもりだろと思ったのを思い出した。
いつのまにか.NETがMSの大きな財産になってたな
Re: (スコア:0)
Write Once, Run Anywhereなんて言っちゃうとDebug Evrywhereという呪いにかかってしまいます