2014-02-20 61 views
0

我对使基于堆栈的解释器解释动态语言感兴趣。我明白字节码和堆栈是如何工作的,但我正在努力实现诸如执行框架和对象之类的东西。实现基于堆栈的解释器

我知道(纠正我,如果我错了)的执行框架将有

  • 堆栈指针
  • 程序计数器
  • 局部变量表
  • 等。

和一个物体会沿着线条

  • 类/超(Ruby中相当于是 “克拉斯”)
  • 变量表
  • 方法表
  • 等。

,但我需要帮助实现此。

感谢, 丹尼尔

+2

欢迎来到StackOverflow!处理这类事情的最好方法是给它一个刺,并针对你遇到的问题提出具体问题。最好的SO问题有代码,你期望什么,实际发生了什么。你的问题太广泛了,会有太多不同的意见在这里很适合。 –

回答

0

对于你的第一个实验中,我建议你实现堆栈链表。每个列表条目(“框架”)代表一个函数调用,所以它需要;

  • 到呼叫者帧的参考,
  • 函数本身的引用,
  • 该函数内的程序计数器,并
  • 的函数变量的表。

如果你知道每个函数调用之前,那么每个变量可以分配每一个插槽,所以每次调用该函数分配相同大小的帧的所有变量,但不同功能的帧大小会有所不同。

这个计划被称为“意大利面条堆栈”。如果要支持延续,则需要垃圾回收帧,而不是在函数调用返回时解除分配。虽然意大利面条栈不是超高性能的路径,但它非常灵活,可能适合你。

对于你的对象,“super”是一个指向klass对象的指针,并且方法表进入klass对象。对非klass对象没有必要使用方法;为了处理Ruby所谓的“单例”方法,你只为那个实例分配一个单独的klass对象,其超级是原始的声明类。 Ruby在klass对象上使用标志来指示哪些是单例类,它们是通过“扩展”添加的模块,哪些是原始的声明类。