有没有办法改变HERE
指向的内容,或者其他一些方法来确保我编译的下一个定义最终会出现在某个特殊位置?或者我可以将定义复制到其他地方吗?理想情况下,我想在ANS Forth中找到解决方案,但Gforth特有的东西已经足够好了。
答案 0 :(得分:3)
您可以使用ALLOT在两个方向上移动数据空间指针:
: here! ( a -- ) here - allot ;
至于gforth,这个更简单的版本应该有效:
: here! dp ! ;
话虽如此,HERE并不一定是编译新单词的地方。 HERE指向数据空间,而定义则写入名称空间和代码空间。然而,在像Gforth这样的传统设计中,三者是一个连续的区域。请参阅DPANS94 3.3。