Gauche > Archives > 2018/03/11

2018/03/11 16:26:10 UTCkuu
#
所謂俺LISPというのを書いていて、アライメントを利用したポインタへの数値やらの埋め込みをあれこれ試してたんですけど、効率やら突き詰めるとGaucheの内部構造と同じような感じに落ち着いて、合理的な仕組みなんだなと。車輪の再発明もいいとこですが、実装して初めて理解できた部分が大きくて、こういうのって楽しいですね。
2018/03/11 19:41:06 UTCshiro
#
Gaucheも先行する処理系を参考にしました。SCM、Scheme->Cあたりは強く影響を受けたと思います。ポインタの下位ビットにタグを埋め込むのはOlin ShiversによればJonathan ReesがNILプロジェクトからTに持ち込んだ、とのことですね。
2018/03/11 19:45:50 UTCshiro
#
Tは32bitアーキテクチャ前提で開発され、PC用Schemeの初期のものは16bitも前提にしていたので現在と異なる制約もあります。例えば多くのPC用Schemeは下2bitをタグにしてましたが、これはヒープが4byteアラインでアロケートされたからです。(Tは8バイトアラインで3bitタグ)。Gaucheも当初は2bitタグで始め、途中で3bitに直しました。
#
64bitアーキテクチャ前提にすると制約条件も色々変わってくるので過去にとらわらず試せるアイディアはまだあると思います。浮動小数点数の即値埋め込みとかやりやすくなりましたし。一方でポインタに8バイト使うのは帯域的に不利なんじゃないかという懸念もあったりして、CDR codingみたいのを復活させたらローカリティが高くて案外有利なんじゃないかとか。Clojureみたいにベクタ(背の低いツリー)を多用するというのも。