F83 and OpenFirmware
新城@筑波大学情報です。こんにちは。
In article <m3ptc9l1vn.fsf@nospam.maedapc.cc.tsukuba.ac.jp>
MAEDA Atusi <maeda-news@ialab.is.tsukuba.ac.jp> writes:
> > Forth は、late binding ではないのですが、再定義できます。同
> > じ名前の手続きを呼ぶと、古いものに対して stacking されます。
> > 再帰はできません。たとえば、
>
> SunのROMモニタにはrecというwordがあったような。
Sun の ROM モニタは、F83 だから。see の逆コンパイラなんか、
「そこまでやるか」って感じです。
F83 って、ソースが comp.sources に流れた気がするのですが、ど
こに行ったんでしょうね。
ROM モニタというと、Apple にも Forth が入っています。
起動時に Command+Option+O+F だったかなあ。OpenFirmwareの意味
です。
http://www.openfirmware.org/
さっき見たら PowerBook G4 の ROM には rec はなかったみたいです。
Forth で再帰するなら、変数に番地を入れてやるんだったかなあ。
あ、忘れた。
variable wptr
: f ... wptr @ call ... ;
' f wptr !
void (*wptr)();
f() { ... (*wptr)(); ... }
main() { wptr = f; }
call って無かったような気がするんだけどなあ。リターンスタッ
クに積んで ret でもどるか。
: f ... wptr @ >r ;S ... ;
戻る命令わすれた。;S で良かったかなあ。この作戦なら、call は
これでもいいか。
: call r> drop ;
自己再帰でよければ、
: f .... [ ' f , ] ... ;
でもいいかも。' での検索は、定義中はかからなかった気がするか
らなにかフラグをぐにょぐにょしないといけなかったかも。となる
と
: rec 現在定義中のコードの先頭を取ってくる , ; immediate
でもいいかも。immediate で即実行でコンパイル時に働くものにし
ます。
> PostScriptでは「辞書スタック」が環境に当たります。同じ辞書に複数の名前
> を定義すれば、相互再帰ができますね。辞書は書き換え可能ですから、定義を
> 上書きできます。また、辞書をプッシュして名前を定義すると、上書きでなく
> 名前を一時的に隠す(shadowする)こともできます。
Forth の辞書は、append only で、定義の逆順にサーチです。複数
の辞書(vocabulary) は作れます。F83 は検索用は8個くらいまで
スタックにできたかなあ。標準は、検索用(context)が1つに定義
用(current)が1つ。
\\ 新城 靖 (しんじょう やすし) \\
\\ 筑波大学 電子・情報 \\
Fnews-brouse 1.9(20180406) -- by Mizuno, MWE <mwe@ccsf.jp>
GnuPG Key ID = ECC8A735
GnuPG Key fingerprint = 9BE6 B9E9 55A5 A499 CD51 946E 9BDC 7870 ECC8 A735