我正在开发一个基于类的语言和虚拟机(使用C)。语言是动态类型的,我正在设计如何在运行时表示类。
基本上是一种语法:
class Point {
var x;
var y;
}
在运行时由结构表示:
typedef struct {
int numfields;
const char *name;
class_t *super;
void *methods[];
} class_t;
关于类属性所需的唯一信息是属性数(var)及其位置。因此编译器可以知道类Point的实例将在位置0处具有属性x而在位置1处具有属性y。
实例将简单地用结构表示:
typedef struct {
class_t class;
value fields[];
} instance_t;
在我尝试通过已编译的应用程序实现外部代码的加载之前,一切正常。如果该外部代码包含一个ColorPoint(Point的子类)定义为:
class ColorPoint extends Point{
var color;
}
ColorPoint子类如何在运行时知道x和y的位置? 这是一个静态信息所以我想我需要提供一个类似文件的头文件,其中编译ColorPoint类的编译器可以查找Point类并静态地知道各种属性的相对位置。
我想应该有更好的方法。 我还应该在class_t struct中保存属性名吗?