VALUE

README.EXT.ja読んだ。
へええ、VALUEは1ビット目(LSB)でFixnumかそれ以外(メモリアドレスとか)かを判別しているんだなーー。ヒープからアロケートしたメモリアドレスはまずほとんどの処理系で2の倍数になっているだろうというのを利用して。つまり Fixnum#hash はVALUEの値そのままを返していたんだねー。(ていうかObject#hashがVALUEの値そのまんまを返しているのか?)
で、falseは0でtrueは2、nilが4と。nilがNULLポインタっぽく0に割り当てられているのかと思いきやfalseにて割り当てられていました。まあこんな先頭のメモリアドレスは多分ほとんどの処理系では予約されていて使われることはないだろうからーってことで使ってるんだろう、多分。

面白い。

      • -

どれもここに書いてあった。