- - PR -
型の矛盾
1|2|3|4
次のページへ»
投稿者 | 投稿内容 | ||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2007-04-27 16:44
objectです。
「件名:VB2005の言語仕様の落とし穴について(ソース付き)」 http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=38029&forum=7&26 で既に問題として浮上しているのですが、 「問題のレベルが、かなり深刻」 だと、私は考え、別スレッドにしました。 「.NET」上のCTSに於いて、
つまり、「.NET」上で
という事態が生じていると思います。 これは、許される事項なのでしょうか? 皆さんは、どう思われますか? | ||||||||||||||||
|
投稿日時: 2007-04-27 17:22
こんにちは。
ちょっと実験してみました。 元ソース
コンパイル後、逆アセンブルしたソース
VB.NETの文法上、区別されていないように見えるだけで コンパイラはちゃんとSystem.CharとSystem.Stringの型の違いを区別していると思いますけれども…? ※ソースを修正 [ メッセージ編集済み 編集者: Tdnr_Sym 編集日時 2007-04-27 17:29 ] | ||||||||||||||||
|
投稿日時: 2007-04-27 17:31
元スレも読んだ上で。
Tdnr_Symさんも書かれていますが、 結局の所最終的には.NET Frameworkを使ってる訳ですから コンパイラはきちんと解釈しますよ。 要するに何を問題にしたいんですか? (1)VB.Netで書いた時にコンパイラがエラーを出さないのは問題だ (2)こんな書き方を許してしまうVB.Netが問題だ (3)書き方を意識しないで書く人間が問題だ (4)暗黙の型変換をしてしまう言語仕様が問題だ((2)と似てる話ですが) この中のどれを問題として提起したいんですか? 私から言わせてもらえれば。 そういった事を意識しないで 頭の中でロジックやメモリを意識せずに インテリセンスに任せている人間が悪い の一言で終わる話なんですが。 [ メッセージ編集済み 編集者: NAO 編集日時 2007-04-27 17:32 ] | ||||||||||||||||
|
投稿日時: 2007-04-27 17:45
objectです。
>Tdnr_Symさん >NAOさん 一応私も処理系の動作は確認して書いています。 >VB.NETの文法上、区別されていないように見えるだけで >コンパイラはちゃんとSystem.CharとSystem.Stringの型の違いを区別していると思いますけれども…? 少し表現を変えれば、 「System.CharとSystem.Stringと、型の違うものに対して、VB.NETの文法上、同じものの様に動く事」 の問題を言っている訳です。 それから「VB.NETの文法上」というのは、とても大きい訳です。 プログラマは、 「VBの書式としてしか表現出来ない」 訳ですから。 #型とそれに対する言語の動作が違うのはとても大きな問題ではないでしょうか? 「件名:VB2005の言語仕様の落とし穴について(ソース付き)」 に於いても、最終的に致命的なのは、この問題だと思います。 勿論、VBが考えている趣旨は理解しているつもりですが、 このスレ自体は、 この問題を一度、皆さんそれぞれに考えて欲しいという意味で起こしました。 | ||||||||||||||||
|
投稿日時: 2007-04-27 18:40
例としてあがったソースでは、ですよね。 あの問題は、インデクサ (デフォルト プロパティ) の戻り値が System.String であっても "意図しない実装' としては発生しうるものです。 というより、あのスレッドではそちらを問題視していたのであって、 今回 object 氏が問題にしているものとは別だと思います。 (あのソースでは '誤り' に気付かない原因になっているだけで) object 氏が挙げているのは 「型が主役であるハズの .NET CLR でこれを許すのか?」 ですよね。 しかし、MSIL を見てわかるとおり、その前の段階の問題ですね。 ですので、
この言い回しには御幣があると思います。 # あ、Tdnr_Sym さんがすでに書かれていますね。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||||||||||
|
投稿日時: 2007-04-27 18:49
うまぁく問題をすり替えていますが、
VBはもともと開発のプロではない人向けです。言語仕様の細かい所は気にせず、手軽に作れることを目標にした開発“環境”です(IDEとしてはじめて意味があり、言語単独では成り立たない)。 よく、「プログラムは、思った通りには動かない。書いた通りに動く」といいますが、VBに関しては、思った通りに動くことが目標です。だからデザイナを含めたIDEとしてでないと成り立たない。 思った通りに動くように、あれこれ手を尽くしてくれる。 仕様上、問題ありません。 _________________ | ||||||||||||||||
|
投稿日時: 2007-04-27 21:54
いつもどおりの展開。学習したら?
でも。それがobject(reject)思考クォリティ。 | ||||||||||||||||
|
投稿日時: 2007-04-27 21:56
Jittaさんと同じに考えてます。
私の場合こうも思います。 C#やVBは、.NET上で動作する実行モジュールを作るための手段であって .NETそのものではない。それぞれに言語仕様上の特徴があるから指摘され た事例も発生する。 その事例が問題であるかどうか。それは問題ではない。各言語が.NET上で 動作する実行モジュールを構築するかは、各言語の言語仕様に基づくもの であるのだから。
というのは、C#とVBの言語仕様が異なるだけのことで、全く問題ありません。 問題なのは、C#とVBが.NETフレームワークを扱う言語であるからといって、 System.Char、System.Stringという定義が「同一であると思い込む」ことだ と思うのです。 C#にとってのSystem.Char、System.Stringが存在し、 VBにとってのSystem.Char、System.Stringが存在する。 メイクし実行モジュールとなったことによって、初めて共通のSystem.Char、 System.Stringとなる。 暗黙的な型変換を嫌うのはわかりますが、暗黙的な型変換は言語仕様として 特徴といえるものです。暗黙的な型変換を許容する言語仕様は、相互の対応 付けが言語仕様としてなされているという点において、それを許容しない 言語仕様よりも進んだ言語仕様という見方ができます。 ※VBの方が優れているということを言っているわけではありません。 VBの言語仕様に目くじらを立てるのはナンセンスだと思うのです。 VBは元々インタプリタ言語。CやJavaのようなコンパイラ言語とは根本的な 言語仕様が異なります。 言語仕様の落とし穴というよりも、言語仕様の混同がそもそもの原因であり、 混乱を招いただけなのではないかと思います。 |
1|2|3|4
次のページへ»