Frage

Ich versuche, eine Liste der Frameworks/Sprachen zu erstellen, die die Erstellung der Laufzeitklassen unterstützen. Zum Beispiel in .NET können Sie die verwenden System.Reflection.Emit Bibliothek, um neue Klassen zur Laufzeit zu emittieren. Wenn Sie andere Frameworks/Sprachen erwähnen könnten, die dies unterstützen (oder eine Variation davon), wäre dies wirklich hilfreich.

Vielen Dank :)

War es hilfreich?

Lösung

Dynamische Sprachen wie Python, Ruby, ...

Andere Tipps

Objective-C unterstützt es (OBJC_ALLOCATECLASSPAIR)

In JavaScript -Funktionen sind Objekte. Somit eine Funktionsdefinition wie:

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

}

Sie können ein neues Objekt wie dieses erstellen:

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

In JavaScript können Sie jedoch zur Laufzeit Funktionen erstellen.

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

Je nachdem, was Sie meinen, kann jede Sprache.

Zum Beispiel C ++ kann. Auf den ersten Blick ist dies absurd - C ++ ist eine statisch typisierte kompilierte Sprache. Sie tun also die LLVM -Bibliothek in Ihr Projekt ein. Dies ist ein Compiler-Back-End, und Sie können mit dieser Klassen Ihre Klassen beschreiben, kompilieren und mit dem LLVM JIT zur Laufzeit für Ihre Anwendung mithilfe des LLVM-JIT ausführen.

IIRC, das GCC-Back-End ist in C geschrieben. Wenn Sie also bereit sind, diesen Code herauszufinden, können Sie im Prinzip die Klassen zur Laufzeit mit einer Sprache definieren, die nicht einmal Klassen hat.

In jedem Fall ist es ein Teil Ihrer Aufgabe, zu definieren, was genau eine Klasse ist - die nicht in den Compiler -Back -Enden integriert wird, da sie eine Reihe verschiedener Front -End -Sprachen mit verschiedenen Typsystemen unterstützen sollen.

Natürlich empfehle ich diesen Ansatz nicht - nur darauf hinzuweisen, dass dies möglich ist.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top