Forthが辞書(そして一般的にはメモリ)をどのように管理しているのか調べようとしているうちに、私はthisページを訪れました。 Cに精通しているので、ポインタのコンセプトには問題ありません。すべてを正しく理解していると思います。しかし、ページの末尾にはseveral exercisesがあり、ここで私は何か変わったことに気づいた。 DATE
がVARIABLE
として定義されていると仮定Forthは変数ごとに2つのセルを予約するのはなぜですか?
運動9.4は、
DATE .
と
' DATE .
と運動9.5ユーザーを使用して同じ処理を行い
差が何であるかを尋ねます変数BASE
。
提供された回答によれば、両方の語句で同じ結果が得られます(BASE
も同様)。しかし、これをWin32Forthで試してみると、4バイト(1セル)の違いで結果が得られます。ここに私がやったことです:別の変数を作成する
here . 4494668 ok
variable x ok
x . 4494672 ok
' x . 4494668 ok
は、同様の結果が得られます。
variable y ok
y . 4494680 ok
' y . 4494676 ok
したがって、それは各変数が(値のため)だけではなく、一つのセルを取得するように見えるが、二つのセル。変数自体は実際の値が格納されている場所を指し、実行トークン(' x ?
を使用)で内容を取得すると、両方の変数に0040101F
が与えられます。 演習9.5については
、私の結果は以下のとおりです。
base . 195F90 ok
' base . 40B418 ok
これらが相互にさえ近くありません。しかし、この演習の答えは、結果がBASE
の定義方法に依存する可能性があることに言及しています。
通常の変数に戻って、私の主な質問はこうです:変数ごとに2つのセルが予約されているのはなぜですか?
さらに:
- だけ1つのセルは実際の値が含まれているので、他のセルの内容が何を意味するのですか?
- これはWin32Forth固有のものですか?他の実装ではどうなりますか?
- これは、実行時変数とコンパイル時変数で異なりますか?
- 上記の質問に対する回答は、ユーザー変数(
BASE
など)にどのように適用されますか?
EDIT1:さて、等も各変数のヘッダを格納し、'
を使用してあなたにこのヘッダのアドレスを与えます。私のテストでは、ヘッダーに含まれるべきすべての情報に対応していないただ1つのセルをヘッダーが使用すると判断します。第2に、エクササイズによれば、変数のアドレスを検索すると、両方のケースで同じ結果が得られるはずであり、ヘッダーの存在に完全に矛盾するように見える。
これはすべて実装固有のものです。もしそうなら、Win32Forthでは何が起こりますか?練習にはどうしたらいいでしょうか?
さらに多くの予約があります。ほとんどのForthワード(変数を含む)は、前の単語を指すフィールド、変数の名前(通常はその名前もヘッダーに格納されます)、変数が存在するときに実行されるコード参照され、データセルに送信されます。そして、データセル自体があります(または、変数が作成されたときに割り当てられた内容に応じて複数のものがあります)。 Tick( '' ')は、続く単語に対して実行されるコードのアドレスを返します。これは、解釈されたコードとコンパイルされたコードで異なる場合もあります。 –
...単語を参照すると、その名前自体が 'DATE'のように、変数のコードはデータアドレスをスタックに置きます。したがって、 'DATE'と' DATE'自体には大きな違いがあります。 –
https://forth-standard.org/standard/core/Tick。 –