首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Forth中使用HERE作为临时空间

在Forth中使用HERE作为临时空间
EN

Stack Overflow用户
提问于 2020-07-02 19:23:21
回答 1查看 83关注 0票数 3

我正在用Forth编写一个游戏(用于学习)。

这个游戏是在一个"10单元板“上进行的。我在尝试新的东西,所以我做了

代码语言:javascript
复制
here 10 [char] - fill

来设置电路板的空间。

然后,在位置3中播放'X‘

代码语言:javascript
复制
[char] X here 3 + c!

这一直运行得很好,但也提出了一个问题

这样可以吗?

如果电路板有一百万个细胞宽呢?

谢谢

EN

回答 1

Stack Overflow用户

发布于 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部分,在分配数据空间之后,由PADWORD#>标识的数据空间区域的内容可能变得无效。因此,在由PADWORD#>标识的区域的内容改变之后,由PAD标识的区域的内容可能变得无效。

另请参阅A.3.3.3.6 Other transient regions

在许多现有的Forth系统中,这些区域在HERE或更远的地方,因此有许多限制。

此外,某些Forth系统在翻译过程中可能会将HERE标识的区域用于内部目的。例如,Gforth 0.7.9在解码转义字符串时使用此区域。这句话:

代码语言:javascript
复制
s\" test\-passed" cr here over type cr type cr

输出:

代码语言:javascript
复制
test-passed
test-passed

因此,你必须检查你的Forth系统的限制,你是否可以在不保留空间的情况下使用HERE标识的区域(以及在什么条件下)。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62695261

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档