著作一覧 |
otsuneさんのとこの日記を読んで考えた(とトピックの逆方向をやってみたり)。
構文は同じだからint i = 9;
とObject o = foo;
は一見同じことを表現しているように見える。Rubyのように実際、同じことをしている場合もある。が、JavaやC#ではこの違いはパフォーマンスという観点からは比較的大きい。
Webページで例えるとわかりやすいかな? とふと思った。
今、自分のWebページで言及したいページを見つけたとする。
参照型の代入というのはアンカータグを文中に埋め込むことに相当し、値型の代入というのはブロッククォートでページ上の文章を引用することに相当する。
参照型では、リンク先の文章が勝手に変わってしまうことがある(Webはマルチスレッドだから)が、値型は勝手には変わらない。値型である手元の引用した文章はいくら変えても元のページには反映されない。
参照型はアンカータグだから、何かするためには必ずリンクをたどらなければならない(その分、パフォーマンスは低下する)が、値型は手元のページなのでそのような操作は不要だ。
C#の構造体が値型だというのは、配列で大きな意味を持つ。
ブロッククォートのリストと、アンカータグのリストを考えてみる。
ブロッククォートのほうが不利な点はページのサイズがでかくなることだ。一方、アンカータグであればページのサイズはタグの分でしかない。しかし、連続して操作する場合には、いちいちリンクをたどらなければならないアンカータグのほうがパフォーマンスは劣化する。
勝手な妄想であるが、Webの構造を意識している人のページでは、他のページへの言及はリンクが多く、紙文化になれた人のページでは、他のページへの言及には引用が多い、かも知れない。値型のほうがおそらく直観的なのではなかろうか(全然、根拠ないけど)。
っていうか、この最後の妄想についてさらに上塗りをすると、論文は引用は要旨にとどめ最後に参照文献としてリンクするが、論説は読者の(その場限りの)便のために引用が普通だ(へたすると参照文献へのリンクすらない)。論文がリンクを使うのは読者が参照先を読むこと(あるいは参照先を「直接」参照すること)を前提とし、論説は読者はそんな手間をかけずその場限りで終らせるだろうことを前提としている。おお、理系文化、文系文化論がでっちあげられたぞ。理系=参照型、文系=値型。でも、僕は理系/文系論ってくそだと思っているから間違いなくヨタだけど。
デッドリンクが発生しないようにする仕組みってできないだろうか? ってそりゃ無理だな。でもデッドリンクを見つけたらarchive.orgやGoogleキャッシュからどっかの殿堂へ移動してそこへの参照に付け替えるスパイダーとかが蠢いていたら(って言うかそれはページが勝手に更新かかるということになるけど自サイトならできなくはないかも)、すごくサイバーだ。リンクがある限り消したくても消せないシステムだ。
当然、逆も真というかGCなんだから、誰からも儀礼的な無関心されているページは次々と削除されてしまうという。
追記:というのを受けて
ジェズイットを見習え |