Как я могу контролировать, где будут компилироваться новые слова Forth?
Есть ли способ изменить то, что HERE
указывает или каким-либо другим способом убедиться, что следующее определение, которое я скомпилирую, окажется в каком-то особом месте? Или я могу скопировать определение куда-нибудь еще, как только оно будет сделано? В идеале я хотел бы найти решение в ANS Forth, но кое-что специфичное для Gforth достаточно хорошо.
1 ответ
Вы можете использовать ALLOT для перемещения указателя пространства данных в обоих направлениях:
: here! ( a -- ) here - allot ;
Что касается gforth, эта более простая версия должна работать:
: here! dp ! ;
Сказав это, ЗДЕСЬ не обязательно, где будут компилироваться новые слова. ЗДЕСЬ указывает на пространство данных, тогда как определения записываются в пространство имен и пространство кода. Однако в традиционном дизайне, таком как Gforth, эти три представляют собой единый смежный регион. Смотри DPANS94 3.3.