C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[4]: データ型について


(過去ログ 26 を表示中)

[トピック内 10 記事 (1 - 10 表示)]  << 0 >>

■12198 / inTopicNo.1)  データ型について
  
□投稿者/ ゴン太 (1回)-(2008/01/04(Fri) 20:29:47)

分類:[.NET 全般] 

データ型ですが、言語によっては、型を宣言しなくても自動的に解釈
してくれる言語がありますが、あれは、OSがそうした機能をもっている
と解釈してよろしいのでしょうか?
引用返信 編集キー/
■12200 / inTopicNo.2)  Re[1]: データ型について
□投稿者/ 未記入 (144回)-(2008/01/04(Fri) 20:43:48)
No12198 (ゴン太 さん) に返信
> データ型ですが、言語によっては、型を宣言しなくても自動的に解釈
> してくれる言語がありますが、あれは、OSがそうした機能をもっている
> と解釈してよろしいのでしょうか?

いいえ、ケフィアです。

OS に依存しちゃまずいでしょう・・・
引用返信 編集キー/
■12203 / inTopicNo.3)  Re[2]: データ型について
□投稿者/ 未記入 (147回)-(2008/01/04(Fri) 21:01:28)
書き忘れましたが、「自動的に解釈」というのが var のことなのかそれとも VB なんかにある遅延バインディングのことなのかわからないですね。具体的にどの言語のどの機能を言っているのでしょう? とりあえず OS はありえないと書いてしまいましたが。
引用返信 編集キー/
■12206 / inTopicNo.4)  Re[3]: データ型について
□投稿者/ ゴン太 (2回)-(2008/01/04(Fri) 21:54:33)
No12203 (未記入 さん) に返信
> 書き忘れましたが、「自動的に解釈」というのが var のことなのかそれとも VB なんかにある遅延バインディングのことなのかわからないですね。具体的にどの言語のどの機能を言っているのでしょう? とりあえず OS はありえないと書いてしまいましたが。
何と説明したらよいのかわかりませんが、例えばrubyなどはデータ型を宣言しなくても
よいですよね。これらの言語はどのようにデータ型を判別するようにできているのでしょうか?

それとVB2008は、データ型を宣言しなくてもよくなったという噂を聞きましたが本当でしょうか?
引用返信 編集キー/
■12210 / inTopicNo.5)  Re[4]: データ型について
□投稿者/ Tom Yama (39回)-(2008/01/04(Fri) 23:53:36)
No12206 (ゴン太 さん) に返信
> 何と説明したらよいのかわかりませんが、例えばrubyなどはデータ型を宣言しなくても
> よいですよね。これらの言語はどのようにデータ型を判別するようにできているのでしょうか?
データ自身が、自分の型を知っているのです。

> それとVB2008は、データ型を宣言しなくてもよくなったという噂を聞きましたが本当でしょうか?
未記入さんが書かれている var のことですね。
データ型を明示的に宣言せずに、コンパイラに推論させる機能が追加されています。
が、いつでも、使えるわけではありません。ので、「しなくてもよくなった」というのは、誤解だと、言っておきます。
引用返信 編集キー/
■12214 / inTopicNo.6)  Re[5]: データ型について
□投稿者/ ゴン太 (3回)-(2008/01/05(Sat) 06:37:06)
No12210 (Tom Yama さん) に返信
> データ自身が、自分の型を知っているのです。
具体的にどのようなことなのでしょうか?

引用返信 編集キー/
■12215 / inTopicNo.7)  Re[6]: データ型について
□投稿者/ やじゅ (62回)-(2008/01/05(Sat) 08:46:07)
やじゅ さんの Web サイト
2008/01/05(Sat) 08:58:09 編集(投稿者)

No12214 (ゴン太 さん) に返信
> ■No12210 (Tom Yama さん) に返信
>>データ自身が、自分の型を知っているのです。
> 具体的にどのようなことなのでしょうか?
>

変数を宣言するためには、明確な型を指定していたりしたけど
代入する値(データ自身)の型から、変数の型を決定させるのです。


var x = 1;
var y = "string";
var z = 1.123;
以上のコードは、コンパイラが自動的に以下のように解釈してくれます。

int x = 1;
string y = "string";
double z = 1.123;

想像がつくと思いますが、
var x;
のように代入がない宣言はデータ自身の型が不明なので許されません。


どのように型推論をしているのかは、結構むずかしいです。
「型推論機構」で検索すればいいと思います。

型推論機構の実装
http://www.sato.kuis.kyoto-u.ac.jp/~igarashi/class/isle4/text/miniml011.html#toc13
型代入を遅延する最適化型推論アルゴリズム
http://www.nue.riec.tohoku.ac.jp/jssst2005/papers/05097.pdf
引用返信 編集キー/
■12222 / inTopicNo.8)  Re[5]: データ型について
□投稿者/ Tom Yama (41回)-(2008/01/05(Sat) 12:23:45)
No12214 (ゴン太 さん) に返信
>>>何と説明したらよいのかわかりませんが、例えばrubyなどはデータ型を宣言しなくても
>>>よいですよね。これらの言語はどのようにデータ型を判別するようにできているのでしょうか?
>> データ自身が、自分の型を知っているのです。
>具体的にどのようなことなのでしょうか?
a. データ自体の値と、そのデータの型を示すデータへのポインタとが、対になって存在しているのです。

# 上記の方が実装が簡単だからこっちだろう、と思って、断定してしまいましたが、
b. そのデータを指す変数が、そのデータの型を示すデータへのポインタも保持する。
という、実装方法もあります。

# a案は、他言語で書かれたプログラムとの間で配列をやり取りするのに、問題があるので、
# 実際の実装は、多分、b案かな?
引用返信 編集キー/
■12228 / inTopicNo.9)  Re[7]: データ型について
□投稿者/ NyaRuRu (30回)-(2008/01/05(Sat) 15:55:56)
2008/01/05(Sat) 16:00:14 編集(投稿者)
No12215 (やじゅ さん) に返信
> 2008/01/05(Sat) 08:58:09 編集(投稿者)
>
> どのように型推論をしているのかは、結構むずかしいです。
> 「型推論機構」で検索すればいいと思います。

ラジカルな型推論を行う言語については確かに難しいことをやっていますが,C# 3.0 の var の説明としてその資料を挙げられているのであれば,ちょっとちぐはぐかもですね.
C# の var で行っているのは,単に右辺の型をそのまま使うと言うだけで,推論といえるほど複雑なことをやっているわけではありません.資料に挙げられているような複雑な話は一切ありません.
var が使うルールなんて,せいぜい「右辺と左辺の型は等しい (代入に副作用がない)」ぐらいです.
(ただし var という変数名を使っていた既存のコードを維持するためのルールはちょっと複雑)

というわけで,var のアルゴリズムについて知りたいという人に,『「型推論機構」で検索』して出てくるような資料を読むのをすすめるのは,ちょっとやりすぎかなと.プログラミングの世界では,実際に複雑な推論を駆使する言語/テクニックもあって,そっちばっかりヒットしている気がします.
引用返信 編集キー/
■12250 / inTopicNo.10)  Re[4]: データ型について
□投稿者/ よねKEN (99回)-(2008/01/06(Sun) 05:09:01)
> 何と説明したらよいのかわかりませんが、例えばrubyなどはデータ型を宣言しなくても
> よいですよね。これらの言語はどのようにデータ型を判別するようにできているのでしょうか?

適当な仮想言語で考えてみましょう。

i = 1;
f = 6.5;
s = "あいう";
o = new Animal();

のような文法で記述できるとしましょうか。
ここで登場する左辺は変数です。
この仮想言語では数値であり小数でなければ整数、それ以外の数値なら小数、
""で括られていれば文字列、new 〜の場合は〜のオブジェクトと決めてあるとします。
iは整数型、sは文字列型、oはAnimal型と判断できます。
つまり、値を区別できるように言語を構成する要素を設計してあるからです。

ただ、この場合、変数iは4バイトの整数型なのか8バイトの整数型なのか?といった区別ができませんので、
そうすると整数型は「4バイト固定」であるとか「数値の大小により割り当てるバイト数を決定する」とか
判定のルールが必要になりますね。言語仕様により動的に型を決定するルールを用意するのか、
はたまた、プログラマ自身に宣言させることで静的に決まるようにするのか、
それは言語次第というわけです。

引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -