我正在用Forth编写一个游戏(用于学习)。
这个游戏是在一个"10单元板“上进行的。我在尝试新的东西,所以我做了
here 10 [char] - fill来设置电路板的空间。
然后,在位置3中播放'X‘
[char] X here 3 + c!这一直运行得很好,但也提出了一个问题
这样可以吗?
如果电路板有一百万个细胞宽呢?
谢谢
发布于 2020-07-03 19:11:10
所描述的方法具有特定的环境依赖性,因此您的程序只需与您的Forth系统(即您使用的)的程序的环境限制相匹配。
1.数据空间的大小
单词UNUSED返回“由HERE寻址的区域中剩余的空间量”。因此,程序可以检查可用空间。
此外,根据第四标准的第4.1.3 Other system documentation小节:
系统应提供以下信息:...程序数据空间可用,以地址为单位
因此,您只需检查Forth系统是否为您的程序提供了足够的数据空间,以及如何配置可用的数据空间(如果有的话)。
2.过渡区域
在一般情况下,可移植程序使用数据空间而不保留数据空间是不安全的。
根据Forth标准的3.3.3.6 Other transient regions部分,在分配数据空间之后,由PAD、WORD和#>标识的数据空间区域的内容可能变得无效。因此,在由PAD、WORD和#>标识的区域的内容改变之后,由PAD标识的区域的内容可能变得无效。
另请参阅A.3.3.3.6 Other transient regions
在许多现有的Forth系统中,这些区域在
HERE或更远的地方,因此有许多限制。
此外,某些Forth系统在翻译过程中可能会将HERE标识的区域用于内部目的。例如,Gforth 0.7.9在解码转义字符串时使用此区域。这句话:
s\" test\-passed" cr here over type cr type cr输出:
test-passed
test-passed因此,你必须检查你的Forth系统的限制,你是否可以在不保留空间的情况下使用HERE标识的区域(以及在什么条件下)。
https://stackoverflow.com/questions/62695261
复制相似问题