- - PR -
型の矛盾
投稿者 | 投稿内容 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2007-04-28 08:06
VB.Net は互換性をある程度持った VB6 の上位バージョン。
コンパイラには .Net に完璧に変換するアップグレードエンジン内臓。 てな解釈もありじゃないかな。 VB.Net では Char と String の関係は DBMS での Char(1) と Varchar の関係だと割り切るのはダメ? | ||||||||||||
|
投稿日時: 2007-04-28 08:25
ただ、objectさんの誤解は、a=bとしか書いていないところにあります。 a=bで、=が代入ではなく「等しい」の意味で使われているなら、…その意図で使っていると思いますが、なんせa=b=c=0で、代入ではなく等しいとされた方なので不安。「等号」なら左辺と右辺を入れ替えることができます。 しかし、等しいと判断された根拠は、実は代入式なのです。 あ、ここだ。=を「等号」と解釈しているからこんな誤解をされているのですね!! CharをStringに代入することはできますが、StringをCharに代入することはできませんよ。 よって、String=Charでは有りません。 以上 補足。 ケータイからだったので "a=b" と書いていますが、これは "Char = String" のことです。 あ・・・あかんやん。"String = Char" の順では書けるけど、"Char = String" の順には書けへんで。 [ メッセージ編集済み 編集者: Jitta 編集日時 2007-04-30 21:16 ] | ||||||||||||
|
投稿日時: 2007-04-28 09:16
私もそのスレッドを振り返ってみたので DBMS の例をあげてみました。 VB.Net のそこを問題視するなら VB の下位互換 DLL の存在も問題視される可能性がありますが、あれを無くしたら VB.Net で作られて稼動しているシステムの大半は動かなくなるかも。そもそも VB の下位互換 DLL を極力使わないように工夫できる人は C#.Net でプログラムが組めると思いますので、こだわるなら C#.Net で組めば解決だと思います。 | ||||||||||||
|
投稿日時: 2007-05-07 12:33
objectです。
「.NET」に於ける、言語の「相互運用性」は、 「CTSとその一貫性」 によって初めて支えられる。 ※「により支えられています。」から上記表現に変項 言葉をかえれば、 「CTSの一貫性により、型の全称性が保障されている」 と言っても良いと思います。 #今回取り上げた「相等性」は、言語に依存している概念でしょうか? #型自身が持つ属性は、言語に依存してはいけない訳です。 #特に、その相等性はとても重要なものです。 VBは、以前から自分自身が持つ矛盾性が問題視されて来た様ですが、 VB自身がスタンドアローンだった為に、問題が大きく影響する事はありませんでした。 しかし、 「.NET」の世界に於いては、「.NET」全体に影響を及ぼしてしまうと思います。 私は、前のレスで >このスレ自体は、 >この問題を一度、皆さんそれぞれに考えて欲しいという意味で起こしました。 >ここで種々の発言をして来ました。 と書きました。 そして、この一文が意味する問題とは 「論理の問題」 です。 「論理」というと、拒否反応を示す人が多いと思いますが、 簡単に言うと、 「正しいか、そうでないか」 という問題です。 #そして今回取り上げた「矛盾」は、論理を議論する前提である、 #「対象を区別し、表現する事」 #を可能とする根源的な概念でもあります。 #勿論、内容が初歩的かどうかにも全く関係ありません。 以前、「件名:C# 自作関数の例外処理について」 http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?mode=viewtopic&topic=18251&forum=7&start=0 でもテーマになってた 「戻り値と例外処理」 も、実際は 「プログラム自体が持つ論理性」 であると言っても良いと思います。 #現在のプログラム言語は、「対象自体の論理性」を表現する事は出来ますが、 #プログラムの記述自体の論理性をサポートする機能がありません。 また、「件名:VBのAnd演算子とOr演算子の存在意義」 http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=34066&forum=7 は、 「論理に対する意識が如何に重要か」 を示すものだと私は思っています。 [ メッセージ編集済み 編集者: object 編集日時 2007-05-09 12:33 ] | ||||||||||||
|
投稿日時: 2007-05-07 16:17
> object さん
素人目線でコメントします。 C# でも int を long に代入できますが、これはOKなんですか? 数値のみ拡大変換を許す C# の方が矛盾あり、とも考えられますよね? 拡大変換が「矛盾」ならそもそも char とか int とかの存在自体がよくないのかも。 | ||||||||||||
|
投稿日時: 2007-05-07 16:54
この業界にいる異常論理が嫌いな人間はそうそういないと思う。 おそらくみんなが嫌いなのはムジュンだらけのオレオレ理論。 ムジュンしていなければ誰も突っ込みようがない。 それを突っ込まれると一方的に議論を打ち切り逃げ出す人が嫌い。 | ||||||||||||
|
投稿日時: 2007-05-07 17:59
とあるスペオペに登場するマッド・サイエンティスト台詞に、
「人間の科学技術など、自然現象のご都合主義化に過ぎん」ってのがありまして、 こいつが私のお気に入りなんですけどね。 数学や論理とて、例外ではありません。 数学だったら、証明も否定もできない命題が構築できたりするし。 コンピューター言語の場合は、「仕様書策定」という ご都合主義の過程を経ているわけです。 ですので、object氏のおっしゃる、
は、「仕様書において、正しいか、そうでないか」でなければなりません。
それを否定しているコンピューター言語は存在しないと思いますが。 ただ、いろんな言語は、明示しなくても、「相等性」を無視する仕様を持ってますよね。 となれば、「相等性」とは仕様次第、言語次第、と言って差し支えないと思います。 ちょっと横道にそれますが、ここで思い出すのは、 エスキモーには、雪の状態を表現する形容詞が、 60以上もある、という話です。 この場合、どうやって「相等性」を保証するのでしょうね。 言語というものは、文化を表現する1手段です。 文化と仕様書を結びつけるのは、さほど飛躍した連想ではないと思いますが、 いかがでしょうか。
多くの人が拒否反応を示すのは、「数学」や「論理」ではありません。 「object氏がそのように考える」という前提を見透かしているからです。 [ メッセージ編集済み 編集者: Edosson 編集日時 2007-05-07 18:08 ] | ||||||||||||
|
投稿日時: 2007-05-07 22:07
えっと、すみません。これは、どの意見に対してのご意見でしょうか? objectさんへの意見は、概ね「あなたが誤解している」で一致していると思います。 誤解されている点は、Tdnr_Symさんがコードで示し、ラフィンさんと私が過去の objectさんの発言を参考にしているように、
というところです。代入を等しいと同等に扱っていらっしゃるために発生する「勘違い」です。 System.Char を System.String に変換することはできますが、System.String を System.Char に変換することはできません(System.Char 配列にはできますが)。単に System.Char を System.String に変換できたからといって、同じものとするのが、そもそも間違っています。 仮に、 System.Char EQUAL System.String だとします。すると、この仮定が成り立つためには、相互に型変換できなければなりません。
ところがこのように、Char を String に変換することはできますが、String を Char に変換することはできません。つまり、一方向にしか変換できません。よって、 System.Char EQUAL System.String とは言えません。 そんなわけで、「.NET 上で (System.Char ≠ System.String) and (System.Char = System.String) という事態が生じている」というのは、objectさんが思われているだけで、そんな事態は発生していません。誤解していると指摘されていることに対して、どのように返答されているのか、わかりませんでした。(オレは間違ってない、と書いてあるように思える) もちろん、「暗黙変換できる/できないことが問題だ」と言われるなら、それはひとつの問題でしょう。しかし、そもそも VB は使用者が型を意識しなくていいように設計されているので、言語仕様上の問題ではないと考えます。設計上の問題とすることもできますが、元々開発者をターゲットとした言語ではないので、そのことを理解されているようなのに、設計に問題を感じることこそ、問題かと思います。 もっとも、「当初の販売ターゲットから、現在の利用者層がずれている」というのはその通りだと思います。しかし、これは利用者側の問題であり、言語設計者、ツール販売者がどうこうする問題ではないと思います。 言語仕様を現在の利用者層にあわせ、開発者向きにするというのは、ご意見のひとつとしてあり得ると思います。しかし、現在の利用者が開発者だからといって、開発者よりの言語仕様にしてしまうと、元々の販売ターゲットだった「サンデー プログラマ」向けの言語がなくなってしまいます。 では、開発者が VB.NET の使用をやめる(C# など、他の言語に移行する)ように働きかけるべきだというご意見について。それも、ご意見のひとつとして有りだと思います。しかし、VB を利用している開発者向け、VB と C++ の中間として C# が作成されており(私はそう理解しています)、マイクロソフトは移行について、十分苦心および努力していると思います。その苦心および努力をどう思うか、それは個人個人の感じ方なので、ご自身の意見に周りを誘導するのは、どうかと思います。 なお、MVP 表彰を受けている人はそのアワードの期間中、マイクロソフトの企業活動とは関係のない立場から、マイクロソフトに対して強く発言することができますので、MVP に代わりにもの申してもらうこともできます。「そういうことに使ってください」という意図で MVP であることを宣言していますので、どうぞご利用ください。しかし、そのためにはまず、MVP を説得しなければなりません。少なくとも私は、上記のような理由で、問題であるとは思いません。 _________________ |