2

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

谢谢 :)

4

4 回答 4

2

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

于 2010-06-26T08:21:23.270 回答
2

Objective-C 支持它(objc_allocateClassPair

于 2010-06-26T08:26:08.570 回答
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();
于 2010-06-26T09:28:12.070 回答
1

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

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

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

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

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

于 2010-06-26T09:07:30.070 回答