哪些框架/语言支持运行时类创建?

时间:2010-06-26 08:13:03

标签: reflection reflection.emit dynamic-class dynamic-class-creation

我正在尝试整理一个支持运行时类创建的框架/语言列表。例如,在.NET中,您可以使用System.Reflection.Emit库在运行时发出新类。如果你能提到支持它的其他框架/语言(或其中的一些变体),那将非常有帮助。

谢谢:)

4 个答案:

答案 0 :(得分:2)

动态语言,如Python,Ruby,......

答案 1 :(得分:2)

Objective-C支持它(objc_allocateClassPair

答案 2 :(得分:2)

在JavaScript中,函数是对象。因此给出了一个函数定义,如:

function Foo(x, y, z)
{
        this.X = x;
        this.Y = y;
        this.Z = z;  var g = function()

}

你可以像这样创建一个新对象:

var obj = new Foo(a,b,c);

但在JavaScript中,您可以在运行时创建函数。

function MakeFoo(x, y, z, f) //where parameter f is a function
{
    var g = function()
    {

        this.X = x;
        this.Y = y;
        this.Z = z;
        this.DoSomething = f;
    }

    return g;

}

var my_class = MakeFoo(a, b, c, function() { /* Do Stuff */ });
var obj = new my_class();

obj.DoSomething();

答案 3 :(得分:1)

根据您的意思,任何语言都可以。

例如,C ++可以。乍一看,这是荒谬的 - C ++是一种静态类型的编译语言。所以 - 你要做的是在项目中包含LLVM库。这是一个编译器后端,您可以使用它来描述您的类,编译它们,并使用LLVM JIT运行它们,所有这些都在您的应用程序的运行时。

IIRC,gcc后端是用C语言编写的,所以如果你愿意弄清楚那些代码,你原则上可以使用一种甚至没有类的语言在运行时定义类。

无论哪种方式,你的部分工作是定义一个类究竟是什么 - 它没有内置到编译器后端,因为它们应该支持一系列具有不同类型系统的不同前端语言。

当然我不推荐这种方法 - 只是指出它是可能的。