Ich interessiere mich für continuations, speziell in Pythons C-API. Von dem, was ich verstehe, erfordert die Art der Fortsetzungen die Un-Abstrahierung von Aufrufkonventionen auf niedriger Ebene, um den Aufruf-Stack nach Bedarf zu manipulieren. Ich hatte das Glück, ein paar Beispiele dieser verstreuten here und there zu finden. In den wenigen Beispielen, die ich gefunden habe, erfolgt diese Un-Abstraktion entweder mit cleverem C (mit Annahmen über die Umgebung) oder mit benutzerdefinierter Assemblierung.Kann das Ein- und Ausschalten von PyFrameObjects eine gute Implementierung von Fortsetzungen sein?
Was jedoch an Python cool ist, ist, dass es seinen eigenen Interpreter-Stack hat, der aus PyFrameObject
s besteht. Angenommen, single-threaded Anwendungen für jetzt, sollte es nicht genug sein, nur ein- und auszuschalten PyFrameObjects
s, um Fortsetzungen in Pythons C-API zu implementieren? Warum beschäftigen sich diese Autoren überhaupt mit dem Low-Level-Zeug?
Ich kann das nicht wirklich beantworten, aber die Optimierung kommt mir in den Sinn. Gute Frage! – ThinkChaos
Das Tauschen von Rahmenobjekten ist im Grunde, wie Generatorfunktionen funktionieren. Wenn Sie auf "yield" klicken, wird das aktuelle Frame-Objekt im Generator gespeichert und vom Stapel ausgegeben. Wenn der nächste Wert benötigt wird, wird das Rahmenobjekt auf den Stapel zurückgeschoben und die Ausführung wird dort fortgesetzt, wo es aufgehört hat. –