Pregunta

Estoy tratando de armar una lista de marcos/idiomas admite la creación de clase de tiempo de ejecución. Por ejemplo, en .NET puede usar el System.Reflection.Emit Biblioteca para emitir nuevas clases en tiempo de ejecución. Si pudiera mencionar otros marcos/idiomas que respaldan esto (o alguna variación de él), sería realmente útil.

Gracias :)

¿Fue útil?

Solución

Idiomas dinámicos como Python, Ruby, ...

Otros consejos

Objective-C lo admite (objc_allocateclasspair)

En JavaScript, las funciones son objetos. Así dada una definición de función como:

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

}

Puede crear un nuevo objeto como este:

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

Pero en JavaScript puede crear funciones en tiempo de ejecución.

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();

Dependiendo de lo que quiere decir, cualquier idioma puede.

Por ejemplo, C ++ puede. A primera vista, esto es absurdo: C ++ es un lenguaje compilado estáticamente escrito. Entonces, lo que haces es incluir la biblioteca LLVM en tu proyecto. Este es un back-end compilador, y puede usar esto para describir sus clases, compilarlas y ejecutarlas usando el JIT LLVM, todo en tiempo de ejecución para su aplicación.

IIRC, el Back End de GCC está escrito en C, por lo que si está dispuesto a descubrir ese código, en principio podría definir clases en tiempo de ejecución usando un idioma que ni siquiera tiene clases.

De cualquier manera, parte de su trabajo es definir qué es exactamente una clase: que no está integrado en los extremos del compilador, ya que se supone que admiten una variedad de idiomas frontales diferentes con diferentes sistemas de tipos.

Por supuesto, no recomiendo este enfoque, solo señalar que es posible.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top