繁体   English   中英

Forth 实现使用系统堆栈作为返回堆栈是否可行?

[英]Is it practical for a Forth implementation to use the system stack as the return stack?

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

本机callret指令用于子例程线程代码 在这种情况下,系统堆栈在 Forth 中扮演返回堆栈的角色。

SP-Forth/4 是一个 Forth 系统的例子,它使用了这种方法(参见第四进程)和窥视孔优化

是的,这是完全可行的。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM