トップページ > プログラム > 2014年07月28日 > xAvZeiSh

書き込み順位&時間帯一覧

21 位/186 ID中時間01234567891011121314151617181920212223Total
書き込み数0000000000000000000012003



使用した名前一覧書き込んだスレッド一覧
デフォルトの名無しさん
Rubyについて Part49

書き込みレス一覧

Rubyについて Part49
749 :デフォルトの名無しさん[sage]:2014/07/28(月) 20:45:02.50 ID:xAvZeiSh
やはり>>737が危惧したように、分かっていないのに
分かったつもりでいる馬鹿が何人かいるみたいだ

>>739
> C++でいうテンプレートを使うと、
> いわゆるジェネリックプログラミングもメタプログラミングもできる

C++ のテンプレートはコンパイル時に適用されるスマートなマクロ構文である
対してメタプログラミングは一般には実行時に適用されるものを指すから、
「C++でテンプレートを使うと、メタプログラミングもできる」という文章は間違い
正しくは「C++でテンプレートを使うと、テンプレートメタプログラミングができる」と書く


> Javaのジェネリクスは、ジェネリックプログラミングに使えるが、
> 型消去が入るから原則的に実行時情報を利用するリフレクションとは組み合わせられない

Javaの総称型(generics)は、クラス/メソッド定義時にデータ型を特定せず、
それを参照するコードに応じて決定するコンパイル時の機能(型多相ともいう)
だからコンパイル終了時に型情報が消えるはずもないし、プログラム実行時には
それをRTI(Runtime Type Information,実行時型情報) の API を介して自由に参照できる
なお、この RTI は RMI 等におけるシリアライゼーションを目的に初期から導入されていたものだが、
それを一般のプログラマが使いやすいスタイルで包んだものをリフレクションと呼ぶようになった

したがって「Javaのジェネリクスは、リフレクションとは組み合わせられない」も明らかな間違い
Rubyについて Part49
750 :デフォルトの名無しさん[sage]:2014/07/28(月) 21:04:58.36 ID:xAvZeiSh
>>741
>>749 で書いたように、「静的型付け」言語における総称型を使った
クラス/メソッド定義のデータ型は、コンパイル終了時には必ず決まる

コンパイル時にはデータ型を決めず、実行時まで決定を送らせるやりかたは、
「動的型付け」と呼ばれる
そして静的型付け言語で動的型付けを模倣する手法が、
たとえば C/C++ における(>>742 がレスした) void * になる


>>745
> Windowsでメッセージ投げるときにLPARAMやWPARAMにキャストしてるはずだけど?
> あれこそ総称型だろ?

これも間違い(理由はすでに書いているので省略する)

> そーいえばWindowsで「リフレクション」って別の意味で使われてるけどさ
> あれもたいがいだよね、

英単語 reflection には、プログラミングでよく用いられる「自己反映」という意味とは別に、
一般的な「反射」という意味がある(写真の世界でいう「リフレクタ(反射鏡)」を憶い出そう)
だから Win32 API でメッセージをそのまま送り返す動作を反射と呼ぶのは、
「日本語訳として紛らわしい」けど、英語としての意味では正しい(原文を読めば分かる)
Rubyについて Part49
751 :デフォルトの名無しさん[sage]:2014/07/28(月) 21:20:25.76 ID:xAvZeiSh
>>746
Java における動的型付けは値のキャストと型情報のパラメタ渡しだけで実現できるから、
それは総称型(generics)が導入される以前から使われていた技法だ
総称型はコンパイル時における(=静的な)多相型付けのために導入された仕掛けであり、
総称型で動的型付けコードを書いても型安全性は保証されない

したがって、総称型と動的型付けとごっちゃにすべきではない


※このページは、『2ちゃんねる』の書き込みを基に自動生成したものです。オリジナルはリンク先の2ちゃんねるの書き込みです。
※このサイトでオリジナルの書き込みについては対応できません。
※何か問題のある場合はメールをしてください。対応します。