Forth の Vocabularies
2022-9-24 22:56 JST
gforth の vocabularies について実験した。forth-2012 には標準で入っている機能みたい。
order
order を実行すると、その word が入った複数の word list(辞書のことね)を表示する。この順で word をサーチするよと。gforth のマニュアルは辞書という言葉は使ってないのでword list という言葉を使う。
order Forth Forth Root Forth ok
この例では Forth, Forth, Root の順にword listを参照していく。どういうわけか Forth が重複している。Forth は gforth のword list。登録対象のword listは ok の手前のに表示されている Forth というword list。
結果は get-orderでも得られる(スタックに)。トップに近いほうが優先される。これを使うと簡単な namespace 的な(でもないか)ことを出来たりする。
vocabulary
vocabularyという word で 新たなword listを作ることが出来る。これだけだと作っただけなので何も出来ない。生成した vocabulary 名称を実行すると order のトップを"書き換える"。おそらくこれが order で重複している理由。
vocabulary <sinby> ok
order Forth Forth Root Forth ok
<sinby> ok
order <sinby> Forth Root Forth ok
これだけだと”空”のword listを追加しただけなので、definitions でorder のトップの word list と置き換える。
definitions ok
order <sinby> Forth Root <sinby> ok
これで、以後 <sinby> に word が登録される。切り離したいときはForth という word で可能。
: my-test 1234 . ; ok
my-test 1234 ok
Forth ok
order Forth Forth Root <sinby> ok
my-test
:11: Undefined word
>>>my-test<<<
Backtrace:
$7FB840347A68 throw
$7FB84035DDD0 no.extensions
$7FB840347D28 interpreter-notfound1
: my-my-test 5678 . ; ok
my-my-test
:13: Undefined word
>>>my-my-test<<<
Backtrace:
$7FB840347A68 throw
$7FB84035DDD0 no.extensions
$7FB840347D28 interpreter-notfound1
definitions ok
: my-my-my-test 9012 . ; ok
my-my-my-test 9012 ok
リンク集
gforth の Vocabularies の説明。 あれ?本家の gforth じゃなくて tuwien.ac.at ってどこかね?
世の中には奇特な人がいて Forth の紹介しているのね。
Open Firmware で Device Tree とか Forth 絡みだったんだよね。 つかったことないけど
Forth Standard 2012。これが最新の規格?
Moore さんの会社かな? SwiftForth。SwiftX って Embedded の環境にいろいろ適合しているのね。