- PR -

型の矛盾

投稿者投稿内容
ラフィン
ぬし
会議室デビュー日: 2002/05/23
投稿数: 809
お住まい・勤務地: 外野
投稿日時: 2007-04-28 08:06
 VB.Net は互換性をある程度持った VB6 の上位バージョン。
 コンパイラには .Net に完璧に変換するアップグレードエンジン内臓。
 てな解釈もありじゃないかな。

 VB.Net では Char と String の関係は DBMS での Char(1) と Varchar の関係だと割り切るのはダメ?
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2007-04-28 08:25
引用:

ラフィンさんの書き込み (2007-04-28 08:06) より:
 VB.Net は互換性をある程度持った VB6 の上位バージョン。
 コンパイラには .Net に完璧に変換するアップグレードエンジン内臓。
 てな解釈もありじゃないかな。

 VB.Net では Char と String の関係は DBMS での Char(1) と Varchar の関係だと割り切るのはダメ?

面白い!
ただ、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 ]
ラフィン
ぬし
会議室デビュー日: 2002/05/23
投稿数: 809
お住まい・勤務地: 外野
投稿日時: 2007-04-28 09:16
引用:

Jittaさんの書き込み (2007-04-28 08:25) より:

a=bで、=が代入ではなく「等しい」の意味で使われているなら、…その意図で使っていると思いますが、なんせa=b=c=0で、代入ではなく等しいとされた方なので不安。「等号」なら左辺と右辺を入れ替えることができます。



 私もそのスレッドを振り返ってみたので DBMS の例をあげてみました。

 VB.Net のそこを問題視するなら VB の下位互換 DLL の存在も問題視される可能性がありますが、あれを無くしたら VB.Net で作られて稼動しているシステムの大半は動かなくなるかも。そもそも VB の下位互換 DLL を極力使わないように工夫できる人は C#.Net でプログラムが組めると思いますので、こだわるなら C#.Net で組めば解決だと思います。
object
ぬし
会議室デビュー日: 2002/03/20
投稿数: 338
お住まい・勤務地: 香川県高松市
投稿日時: 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 ]
ラフィン
ぬし
会議室デビュー日: 2002/05/23
投稿数: 809
お住まい・勤務地: 外野
投稿日時: 2007-05-07 16:17
> object さん

 素人目線でコメントします。

 C# でも int を long に代入できますが、これはOKなんですか?
 数値のみ拡大変換を許す C# の方が矛盾あり、とも考えられますよね?

 拡大変換が「矛盾」ならそもそも char とか int とかの存在自体がよくないのかも。
ぶさいくろう
ぬし
会議室デビュー日: 2005/11/22
投稿数: 1232
お住まい・勤務地: 川崎市(は俺も含めてロクな人間が住んでないよw)
投稿日時: 2007-05-07 16:54
引用:

objectさんの書き込み (2007-05-07 12:33) より:
そして、この一文が意味する問題とは
「論理の問題」
です。

「論理」というと、拒否反応を示す人が多いと思いますが、
簡単に言うと、
「正しいか、そうでないか」
という問題です。


この業界にいる異常論理が嫌いな人間はそうそういないと思う。
おそらくみんなが嫌いなのはムジュンだらけのオレオレ理論。

ムジュンしていなければ誰も突っ込みようがない。
それを突っ込まれると一方的に議論を打ち切り逃げ出す人が嫌い。
Edosson
ぬし
会議室デビュー日: 2004/04/30
投稿数: 675
投稿日時: 2007-05-07 17:59
とあるスペオペに登場するマッド・サイエンティスト台詞に、
「人間の科学技術など、自然現象のご都合主義化に過ぎん」ってのがありまして、
こいつが私のお気に入りなんですけどね。

数学や論理とて、例外ではありません。
数学だったら、証明も否定もできない命題が構築できたりするし。
コンピューター言語の場合は、「仕様書策定」という
ご都合主義の過程を経ているわけです。

ですので、object氏のおっしゃる、
引用:

「正しいか、そうでないか」


は、「仕様書において、正しいか、そうでないか」でなければなりません。
引用:

#今回取り上げた「相等性」は、言語に依存している概念でしょうか?


それを否定しているコンピューター言語は存在しないと思いますが。
ただ、いろんな言語は、明示しなくても、「相等性」を無視する仕様を持ってますよね。
となれば、「相等性」とは仕様次第、言語次第、と言って差し支えないと思います。

ちょっと横道にそれますが、ここで思い出すのは、
エスキモーには、雪の状態を表現する形容詞が、
60以上もある、という話です。
この場合、どうやって「相等性」を保証するのでしょうね。
言語というものは、文化を表現する1手段です。
文化と仕様書を結びつけるのは、さほど飛躍した連想ではないと思いますが、
いかがでしょうか。
引用:

「論理」というと、拒否反応を示す人が多いと思いますが、
簡単に言うと、
「正しいか、そうでないか」
という問題です。


多くの人が拒否反応を示すのは、「数学」や「論理」ではありません。
「object氏がそのように考える」という前提を見透かしているからです。

[ メッセージ編集済み 編集者: Edosson 編集日時 2007-05-07 18:08 ]
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2007-05-07 22:07
引用:

objectさんの書き込み (2007-05-07 12:33) より:
言葉をかえれば、
「CTSの一貫性により、型の全称性が保障されている」
と言っても良いと思います。
#今回取り上げた「相等性」は、言語に依存している概念でしょうか?
#型自身が持つ属性は、言語に依存してはいけない訳です。
#特に、その相等性はとても重要なものです。

私は、前のレスで
>このスレ自体は、
>この問題を一度、皆さんそれぞれに考えて欲しいという意味で起こしました。
>ここで種々の発言をして来ました。
と書きました。
そして、この一文が意味する問題とは
「論理の問題」
です。


 えっと、すみません。これは、どの意見に対してのご意見でしょうか?

 objectさんへの意見は、概ね「あなたが誤解している」で一致していると思います。

 誤解されている点は、Tdnr_Symさんがコードで示し、ラフィンさんと私が過去の objectさんの発言を参考にしているように、
引用:

つまり、「.NET」上で

(System.Char ≠ System.String) and (System.Char = System.String)

という事態が生じていると思います。


というところです。代入を等しいと同等に扱っていらっしゃるために発生する「勘違い」です。

 System.Char を System.String に変換することはできますが、System.String を System.Char に変換することはできません(System.Char 配列にはできますが)。単に System.Char を System.String に変換できたからといって、同じものとするのが、そもそも間違っています。

 仮に、 System.Char EQUAL System.String だとします。すると、この仮定が成り立つためには、相互に型変換できなければなりません。
コード:
Dim str As String = "a"c    ' これは OK
Dim ch1 As Char = "a"       ' Option Strict On で、これは NG
Dim ch2 As Char = "abc"     ' Option Strict Off で、ch2 は "a"c


 ところがこのように、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 を説得しなければなりません。少なくとも私は、上記のような理由で、問題であるとは思いません。

_________________

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