C 运行时类属性的高效表示

C 运行时类属性的高效表示,c,compiler-construction,interpreter,vm-implementation,C,Compiler Construction,Interpreter,Vm Implementation,我正在开发一种基于类的语言和虚拟机(使用C)。语言是动态类型化的,我正在设计类在运行时必须如何表示 基本上是这样的语法: class Point { var x; var y; } 在运行时由结构表示: typedef struct { int numfields; const char *name; class_t *super; void *methods[]; } class_t; 关于类属性所需的

我正在开发一种基于类的语言和虚拟机(使用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类,并且静态地知道各种属性的相对位置

我想应该有更好的办法。
是否还应将属性名称保存在类结构中?

以及当您更改
点的定义以添加新字段时会发生什么情况?编译器如何知道重新编译所有派生类?多年来,在动态语言(如Smalltalk、Self和Objective-C)中,已经有许多尝试优化属性(和方法)查找。在internet上搜索会发现许多描述不同算法的论文。这里只有一个,我碰巧手头有,但不认为它是“最好的”;这只是一个起点: