Ich denke, dass dies eine Dynamit Idee ist, und ein Feature, das ich gerne hätte! Haben Sie sich Gedanken darüber gemacht, wie Sie mit dem Feature interagieren möchten?
obj1 = Foo()
compiler.Recompile(Foo, '/some/path/myapp/newsrc/foo.blah');
obj2 = Foo()
// Would this be True?
type(obj1) == type(obj2)
Ich nehme an, dass Sie erwarten, dass vorhandene Instanzen durch die Neukompilierung unverändert bleiben? Dies scheint so zu sein, als wäre es einfacher mit Funktionen, solange sie den gleichen Prototyp behalten, aber es mit Klassen zu tun scheint, als würde es unordentlich werden.
Auch, was ist mit Threading zu tun?
Thread.start(wait 1; bar();); // bar is a function
compiler.Recompile(bar, '/some/path/myapp/newsrc/bar.blah');
Lets sagen, dass wir in unserem Thread beginnen, "bar" während der Neukompilierung aufzurufen. Blockiert der Aufruf, bis die Neukompilierung abgeschlossen ist, und ruft dann die neue Funktion auf? Ist die alte Funktion noch vorhanden, bis die Kompilierung abgeschlossen ist? Was ist, wenn wir nach dem Kompilieren einen Funktionszeiger haben, wo zeigt er? Zu der ursprünglichen Funktion oder zu der neuen?
Hat jemand irgendwelche Gedanken darüber, wie dies in einer direkten Richtung umgesetzt werden könnte?
Ich werde das mit Objekten haben. Die Idee ist, dass wir aktualisieren, wenn kein Code in aktualisierbaren Objekten ausgeführt wird. Dann serialisieren wir alle Instanzen und aktualisieren und verknüpfen erneut. Dann erstellen Sie alle Instanzen neu, deserialisieren und aktualisieren Sie alle Zeiger. Voila, Stück Kuchen :-) – BarsMonster