観察日記 2011-02-17

ポインタとは何か

ポインタって難しいものなの?
なんかこう特別扱いがよくない気がする。
参照をなんか汚く実装したものという理解であった
ごく平凡なメモリアクセス。
バイト列としての "メモリ" をイメージできない人間が多いのでしょう
他のイメージ方法が思いつきません><
私も
他のイメージ方法が思いつきません><
「メモリ」より先に、「変数」に対して「箱」を結び付ける解説を読んでしまうと、困難になるんじゃないだろうかと今では想像している
メモリアクセスはアドレス指定で行う。生意気な言語だとアドレスにあだ名を付けられる。さらに生意気な言語だとあだ名だけ付ければ勝手にアドレスを割り振ってくれる。
とりあえずこんな感じ。
僕、BASIC -> Z80 -> Forth -> C という流れだけど、きっと Z80 のおかげでポインタが難しくなかったんだろうなぁ
俺はHSP (中途半端)→PHP (中途半端)→C (中途半端)→Ruby
変数って方程式の変数から意外とジャンプがあるものなのかね
ラベルです、ええ。
変数と思うからいけない。ラベルだ。ラベルなのだ。
きっと「方程式の変数」も難しいと感じてるんじゃないかな、ポインタが分からない人たちは
C の変数はラベルじゃないから
なんとw
らべるだよぅ
C の変数には大きさがあるので、ラベルで説明できない特徴がある
ラベルの裏に大きさが書いてあります。
それはひどい
でも単なる注意書きなので無視して好きなようにアクセスできます^^
ラベルが貼ってあるのってメモリ位置なんだよな
union のイメージを図解するためにはラベルではできないんですよね
えっ<union
え、それこそラベルじゃね
そうだよねえ。
ラベルじゃないとunionが説明できない
同じメモリ位置にラベルが数枚貼ってあって、そのラベルには大きさと型がなんか書いてある
それじゃ図示できない
領地が良いんじゃないかな
数学の用語で言うと領域だな
変数は領域
ある専門分野の知識を説明するのに、別の専門分野の用語を持ってくるのは、
二重に専門分野の知識が必要になるだけなのでつらいでつ。
プログラミングは数学のサブですよ
そんなこといったら世界の全ては数学のサブじゃねーか
お、unak さんはそう考えますか。僕と一緒ですね。
でも、領域って特に専門的な概念じゃない気がするなぁ
「数学の用語で言うと」とか言うから専門的な概念だと思われるんだよ!
1次元だから領域持ち出す必要あるんだろうか
あと1次元だからbitの並びを図示するだけじゃあるまいか
メモリはバイト列なので、
結局のところ、変数は1次元の領域 == 区間ですね
区間ですね。
あと型情報も一応あるな
ただ、区間ではキャストを上手く説明できないです、僕には
ラベルの付け替え
Cの場合、型っていうのはごまかし可能な単なる「情報」なので
それじゃ変数名が変わってしまう > ラベルの付け替え
やっぱラベルの裏でいいよ。
それとも、キャスト演算子まで含めて「名前」って事にするのかな
キャストって変数名変わるでしょ?
要するにCではデータがオブジェクトじゃなくて単なるデータというか。
キャストは変数と関係ないじゃん!
キャスト時点では無名な気もしないでもない
Cの変数は箱だからな
はこじゃないおー
箱のアナロジーは説明する側からすると不便すぎる
ラベルだよう(振り出しに戻る)
区間だよう
サイズの違うキャストとかやったときに箱だと崩壊する
Rubyの変数はラベルだけど
ラベルだねぇ
Rubyの変数こそラベルじゃない気がするというか
とかいうと揉め事の元なのでやめとくw
Ruby の変数はラベルだと思ってた
VALUEは箱じゃない?
まあ、ラベルでいいということにしておこう。
VALUE は箱ですね
ん?
RValue が箱だな
箱の中に「◯◯を参照せよ」と書いてある
VALUE は箱の場所ですかね
場所が入ってる箱でいいのか
VALUEという箱の中にラベルがはいっているって感じか
難しいこというなあ。
Fixnumとかだといきなり値が入ってる
そういう意味では、「ポインタ型」だけなら箱で良いのか
値の表現が一種類だけなら、じゃないかな
Rubyは常にVALUEだから
議論が尽きませんが
ていうかtrue/falseとかポインタ型じゃないよな
いろんな人がそれぞれその辺を説明する企画とか楽しいかもしれない。
w
お互いに他の理論を潰し合って、大統一理論を決めよう
そしてRiteがその幻想をぶちこわす
Rite だけ統一できない
Riteも箱でしょ?
箱にRBasic相当の情報というか、中身の意味が書いてある
VALUEはunionだろう
Ruby言語を考えるためにMRI実装の中身に踏み込むのが筋悪だ説
確か買ったと思うがどこにあるかわからない
VALUEの理解から入るのはちょっと難易度高い気がする
C言語自体の解説はなかった。
でもRuby言語の変数の端っこの仕様がVALUEに依存してるというか由来しているというかなのは事実であろう
Rubyの変数でVALUEの実装に依存する仕様ってあったっけ?
直接メモリいじれなければまぁ箱で問題ないのか?
整数がFixnumを外れると遅い?
Rubyのオブジェクトの仕様は依存しているところがあるが,「変数」の仕様で依存しているのは思いつかない
変数というかFixnumかしら
それはオブジェクトの仕様だ
オブジェクト表現
僕の理解では、オブジェクトっていうのは魚なんだよね。
ObjectSpaceはいけすって呼びたいな。
とかわけのわからんことを言い始める。
unak: GC は?
魚には全部IDタグが付いてるんだよ。
死んだ魚をいけすからすくうんだな
ときどきついてない魚がいるので捨てる
http://www29.atwiki.jp/ff13funeral/pages/43.html
{_ocha_} (AutoCheck): FF13葬式スレ@ ウィキ - どういうわけかシリーズ [AR]
「うーん,Aちゃんさぁ,ObjectSpaceじゃあまりに平凡じゃない?」
笹田耕一先生の理解力に感動した。
「僕の解釈だと」だったか。
ネタもとだったのか
うむ。

まとめると、

  • 変数はラベル
  • 変数名はラベルに書いてある
  • 型もラベルに書いてある
  • ラベルはメモリ上のある位置に貼ってある
  • データはメモリ上の区間
  • データの長さはラベルに書いてある型からわかるが、キャストなどで無視もできる

ってとこでしょうかね