我在定义中测试 [] 的使用,出现错误:
: x [ here ] ;
:2: unstructured
: x [ here ] >>>;<<<
我知道错误的原因是编译时增加/减少了堆栈。罪魁祸首可以是任何“直接”单词:
: y + ; immediate ok
1 2 y . 3 ok
4 5 ok
: x y ;
:4: unstructured
: x y >>>;<<<
我的问题是:它是标准的一部分还是只是第四个实现?
堆栈的使用还有其他限制吗?
它是标准的一部分还是只是第四个实现?
它是标准的一部分。
:
将colon-sys留在数据堆栈上:( -- colon-sys )
。;
从数据堆栈中消耗 colon-sys:( colon-sys -- )
。
colon-sys 是一种系统编译数据类型。 colon-sys 的大小取决于实现。它可以占用数据堆栈中的 0 个单元,或者 10 个单元,甚至更多。
以下行在使用空数据堆栈运行时,将输出 colon-sys 元组。
: x [ cr .s cr ] ;
反过来,如果单词
;
没有在堆栈顶部遇到 colon-sys(例如,如果您将某些内容放在堆栈上的 colon-sys 上),则会引发异常。抛出异常不是必须的,但由于条件不明确,标准允许。
因此,在编译定义时,从数据堆栈中消耗某些内容或在堆栈上留下某些内容并不容易。使用变量或用户定义的堆栈,或者如果以编程方式创建定义,则使用返回堆栈。
正式地,colon-sys 放置在控制流堆栈上。但控制流堆栈可以使用数据堆栈来实现。无论如何,结果是colon-sys可能占用0个或更多数据堆栈单元。