主要观点:作者阐述了在 Forth 中实现DOES>的过程及相关问题,包括其时间方面的特性、与CREATE等 Forth 单词的交互等,还提及了 JonesForth 未实现DOES>的可能原因。
关键信息:
DOES>是即时词,在编译时执行特殊操作,需修改新创建的单词使其不仅推送自身代码地址还能执行后续代码。CREATE创建新单词并将其主体地址压入栈,SHAPE通过CREATE创建新单词并编译代码。DOES>在不同时间点(时间 1 编译、时间 2 修改新单词、时间 3 运行创建的单词)有不同操作,如在时间 1 编译当前单词的运行时xt等。forth_core_create.does_hook在DOES>运行时起到推送主体地址和设置执行代码的作用。
重要细节:- 示例中
STAR打印星号,.ROW根据 8 位值打印星号或空格,DO和LOOP是 Forth 的for循环。 MAN创建后的结构及在不同时间点的变化,如时间 1 时SHAPE的结构变化,时间 2 时DOES>对MAN的修改等。- 提到现代系统对可写可执行内存的限制可能是 JonesForth 未实现
DOES>的原因。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用。你还可以使用@来通知其他用户。