在编写符合标准的Forth时,像CHARS
这样的词需要大量使用,这在我的Forth环境中没有实际效果。这样的操作会不会给Forth字典或我的冒号定义增加开销?
当冒号定义为IMMEDIATE
时,没有用于标准遵从性或注释代码的操作词在冒号定义中没有显著的开销。这是因为IMMEDIATE
导致在编译单词时执行单词,而不是编译单词。因此,编译后的代码中根本没有添加任何内容。
例如:
Potential implementation of CHARS for a Forth environment
: CHARS ; IMMEDIATE
: test CHARS ;
SEE test prints : test ;
例如,gforth就是这样实现CHARS
的。
然而,并非所有福斯都会使用这种优化。如果没有,那么对函数的冗余调用将被编译到代码中。如果这对你来说是个问题,Forth允许你用上面的冒号定义重新定义CHARS
等,以应用优化。