【问题标题】:Is it practical for a Forth implementation to use the system stack as the return stack?Forth 实现使用系统堆栈作为返回堆栈是否可行?
【发布时间】:2019-12-17 23:00:43
【问题描述】:

像 C 这样的语言使用系统堆栈来存储局部变量和返回地址。 Forth 有数据栈和返回栈。是否有使用系统堆栈作为返回堆栈并因此使用返回指令来结束一个字的执行的 Forth 实现?这是一种可行的方法吗?

【问题讨论】:

标签: stack forth


【解决方案1】:

subroutine-threaded code 中使用了原生的callret 指令。在这种情况下,系统堆栈扮演着 Forth 中返回堆栈的角色。

SP-Forth/4 是一个使用这种方法的 Forth 系统示例(请参阅forthproc)以及peephole optimization

【讨论】:

    【解决方案2】:

    是的,完全可行。

    它可能仅在您编译单词而不是解释它们时才有用,如果您想捕获返回堆栈错误而不是崩溃,则需要编写某种堆栈帧约定。

    【讨论】:

      【解决方案3】:

      可以制作只使用一个堆栈的类似 Forth 的语言,但是如果您想要一个与标准 Forth 程序兼容的 Forth,则需要单独的数据堆栈和返回堆栈。 Forth 将参数从一个函数传递到另一个函数,只需将它们留在数据堆栈中即可;如果您将一个堆栈用于数据和流控制,则需要小心在函数结束之前清除堆栈中的数据。

      【讨论】:

        猜你喜欢
        • 2023-03-23
        • 2014-07-21
        • 2016-08-13
        • 2013-01-25
        • 2013-04-24
        • 2022-01-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多