R6RS:翻訳:R6RS:5.10 Storage model

R6RS:翻訳:R6RS:5.10 Storage model

5.10 記憶モデル

変数や、対・ベクタ・バイトベクタ・文字列・ハッシュテーブル・構造体といったオブジェクトは暗黙裏に場所や場所の並びを参照している。例えば文字列では、文字列中の文字と同じ数だけの場所を格納している(これらの場所は完全に機械語に対応している必要はない)。これらの場所のひとつに string-set! 手続きを使って新しい値を格納することもできるが、文字列は以前と同じ場所を格納している。

変数の参照や、car、 vector-ref、 string-ref、といった手続きにより、ある場所から持って来られたオブジェクトは eqv? (R6RS:翻訳:R6RS:11.5 Equivalence predicates 参照)の意味で、その場所から取り出す前に格納されていたオブジェクトと等価である。

各場所にはそれが使用中であるかどうか示すために印がつけられている。使用中でない場所を参照している変数やオブジェクトは決して存在しない。本報告書で変数やオブジェクトに割り当てられた記憶領域について言及する場合はいつも、適切な数の場所が未使用の場所から選ばれ、変数やオブジェクトが参照するより前に、そこに使用中の印が付けられるものとする。

定数(すなわちリテラル式の値)は読み込み専用のメモリに存在することが好ましい。これを表すために、場所を参照しているオブジェクトは、それが変更可能であるか否かを示すフラグと対応づけられると想像するとわかりやすい。リテラル定数や、 symbol->string により返された文字列、変更可能なフィールドのない構造体、そして変更不可能であると明示されたオブジェクトは変更不可能であり、一方、本報告書に挙げられている他の手続きで作成されたオブジェクトはすべて変更可能である。変更不可能なオブジェクトにより参照されている場所に新たな値を格納しようとすると &assertion コンディション型の例外が発生する。

More ...