在 Forth 中实现 DOES>,这就是我开始这一团糟的全部原因 - 《波士顿日记》

主要观点:作者阐述了在 Forth 中实现DOES>的过程及相关问题,包括其时间方面的特性、与CREATE等 Forth 单词的交互等,还提及了 JonesForth 未实现DOES>的可能原因。
关键信息:

  • DOES>是即时词,在编译时执行特殊操作,需修改新创建的单词使其不仅推送自身代码地址还能执行后续代码。
  • CREATE创建新单词并将其主体地址压入栈,SHAPE通过CREATE创建新单词并编译代码。
  • DOES>在不同时间点(时间 1 编译、时间 2 修改新单词、时间 3 运行创建的单词)有不同操作,如在时间 1 编译当前单词的运行时xt等。
  • forth_core_create.does_hookDOES>运行时起到推送主体地址和设置执行代码的作用。
    重要细节:
  • 示例中STAR打印星号,.ROW根据 8 位值打印星号或空格,DOLOOP是 Forth 的for循环。
  • MAN创建后的结构及在不同时间点的变化,如时间 1 时SHAPE的结构变化,时间 2 时DOES>MAN的修改等。
  • 提到现代系统对可写可执行内存的限制可能是 JonesForth 未实现DOES>的原因。
阅读 8
0 条评论