Как я могу контролировать, где будут компилироваться новые слова Forth?

Есть ли способ изменить то, что HERE указывает или каким-либо другим способом убедиться, что следующее определение, которое я скомпилирую, окажется в каком-то особом месте? Или я могу скопировать определение куда-нибудь еще, как только оно будет сделано? В идеале я хотел бы найти решение в ANS Forth, но кое-что специфичное для Gforth достаточно хорошо.

1 ответ

Решение

Вы можете использовать ALLOT для перемещения указателя пространства данных в обоих направлениях:

: here! ( a -- )   here - allot ;

Что касается gforth, эта более простая версия должна работать:

: here!   dp ! ;

Сказав это, ЗДЕСЬ не обязательно, где будут компилироваться новые слова. ЗДЕСЬ указывает на пространство данных, тогда как определения записываются в пространство имен и пространство кода. Однако в традиционном дизайне, таком как Gforth, эти три представляют собой единый смежный регион. Смотри DPANS94 3.3.

Другие вопросы по тегам