2 Stimmen

Welche Frameworks/Sprachen unterstützen die Erstellung von Klassen zur Laufzeit?

Ich versuche eine Liste von Frameworks/Sprachen zusammenzustellen, die die Laufzeitklassenerzeugung unterstützen. Zum Beispiel können Sie in .NET die System.Reflection.Emit-Bibliothek verwenden, um neue Klassen zur Laufzeit zu generieren. Wenn Sie andere Frameworks/Sprachen nennen könnten, die dies unterstützen (oder eine Variation davon), wäre das wirklich hilfreich.

Danke :)

2voto

Darin Dimitrov Punkte 990883

Dynamische Sprachen wie Python, Ruby, ...

2voto

cobbal Punkte 68319

Objective-C unterstützt es (objc_allocateClassPair)

0 Stimmen

Vielen Dank :). Und vielen Dank für die Referenz.

2voto

Rodrick Chapman Punkte 5327

In JavaScript sind Funktionen Objekte. Daher kann man eine Funktionendefinition wie folgt verwenden:

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

}

Sie können ein neues Objekt wie folgt erstellen:

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

Aber in JavaScript können Sie Funktionen zur Laufzeit erstellen.

function MakeFoo(x, y, z, f) // wobei der Parameter f eine Funktion ist
{
    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() { /* Mach etwas */ });
var obj = new my_class();

obj.DoSomething();

1voto

Je nachdem, was du meinst, kann jede Sprache das.

Zum Beispiel kann C++ das. Auf den ersten Blick ist dies absurd - C++ ist eine statisch typisierte kompilierte Sprache. Also - was du tust, ist die LLVM-Bibliothek in dein Projekt einzubeziehen. Dies ist ein Compiler-Backend, und du kannst dies verwenden, um deine Klassen zu beschreiben, sie zu kompilieren und sie mit dem LLVM JIT auszuführen, alles zur Laufzeit für deine Anwendung.

Soweit ich mich erinnere, ist das gcc-Backend in C geschrieben, also könntest du, wenn du bereit bist, diesen Code herauszufinden, im Prinzip Klassen zur Laufzeit mit einer Sprache definieren, die nicht einmal Klassen hat.

Wie auch immer, ein Teil deiner Aufgabe ist es zu definieren, was genau eine Klasse ist - das ist nicht in die Compiler-Backends eingebaut, da sie eine Reihe unterschiedlicher Frontendsprachen mit unterschiedlichen Typsystemen unterstützen sollen.

Natürlich empfehle ich diesen Ansatz nicht - ich weise nur darauf hin, dass es möglich ist.

0 Stimmen

Ich meinte explizite Unterstützung, aber das ist interessant. Danke :)

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X