我有兴趣使用基于堆栈的解释器来解释动态语言。我理解字节码和堆栈是如何工作的,但我正在努力实现诸如执行帧和对象之类的东西。
我知道(如果我错了,请纠正我)执行框架
并且对象将具有
的内容但我需要帮助实现这一点。
谢谢, 丹尼尔
答案 0 :(得分:0)
对于您的第一个实验,我建议将您的堆栈实现为链接列表。每个列表条目(" frame")表示函数调用,因此它需要;
如果在调用之前知道每个函数的所有变量,则每个变量可以分配一个槽,因此该函数的每次调用都会分配一个相同大小的帧,但不同函数的帧大小会有所不同
这个计划被称为" spaghetti stack"。如果要支持continuation,则需要对帧进行垃圾收集,而不是在函数调用返回时取消分配它们。虽然意大利面堆不是超高性能的途径,但它非常灵活,可能适合你。
对于你的对象," super"是指向klass对象的指针,方法表位于klass对象中。在非klass对象上不需要方法;处理Ruby调用" singleton"方法,你只为那个实例分配一个单独的klass对象,其super是原始声明的类。 Ruby使用klass对象上的标志来指示哪些是单例类,这些是通过" extend"添加的模块,以及哪些是原始声明的类。