在编写兼容的Forth标准时,需要大量使用像CHARS这样的词,这在我的Forth环境中没有实际效果。这样的no-ops会给Forth字典或我的冒号定义增加开销吗?
发布于 2020-11-24 08:03:17
当冒号定义为IMMEDIATE时,表示符合标准或注释代码的No-op单词在冒号定义中没有明显的开销。这是因为在编译单词时,IMMEDIATE会导致单词执行,而不是编译。因此,根本不会向编译后的代码添加任何内容。
举个例子:
\ Potential implementation of CHARS for a Forth environment
: CHARS ; IMMEDIATE
: test CHARS ;
SEE test \ prints : test ;例如,这就是gforth implements CHARS的方式。
然而,并不是所有的Forth都会使用这种优化。如果不是,那么对函数的冗余调用将被编译到代码中。如果这对你来说是一个问题,Forth允许你用上面的冒号定义重新定义CHARS等,以应用优化。
https://stackoverflow.com/questions/64978404
复制相似问题