[Python-de] stackless: return_current

Christian Tismer tismer at tismer.com
Mon Jun 3 20:33:42 EDT 2002


Mark Zöltsch wrote:
> Der Meister persoenlich :)

*blush*

Naja, oder auch "alles muß man selber machen" :-))

[__doc__]

> hab ich, aber das extra fuer mich :?)

Naja, Du bist halt 'Der Juhser(TM)', das ist irgendwie
nur einer, auf der anderen Seite vom Bildschirm :)
neenee, aber halt stellvertretend.

[mode-blah]

> dann hab ich das wohl von Anfang an richtig verstanden,
> aber ich schaff es keinen Fall zu erzeugen bei der mit mode 0
> nicht zum Aufrufer zurueckgekehrt wird! Das ist
> das Verwirrende fuer mich...

Ohje, ich bin wirklich am schwimmen. Das ist das
komplizierteste Stück Code, das ich je geschrieben
habe, und ich krieg's gerade nicht gebacken...

Ahh, jetzt sehe ich's. Diese Modes sind sehr verwirrlich,
war nie ganz zuende designt. Tatsächlich wird im Falle
von return_current intern ein Flag gesetzt, das dieses
Ding eindeutig als Funktion auszeichnet. Du kannst den
Hack in Zeile 1581 von continuationmodule sehen.
Wenn Du den Mode (der in diesem Fall 8 ist, siehe Z. 430)
explizit auf 0 setzt, geht das Verhalten wieder auf jump.
Allerdings hat dieser Frame keinen f_back, was auch wieder
automatisch call-Verhalten aktiviert (ich wußte nicht, was
sonst tun). Du kannst das explizit verändern, wenn Du
attribut co.caller auf irgendeine andere continuation
setzt, dann zieht der jump wirklich.

[continuations are dead...]

> ...ich finde sie dennoch so interessant das ich gerne
> mit ihnen ein bischen rumspielen moechte :)
...

> ach ich finde prinzipiell sind sie gar nicht so schwer zu verstehen,
> ich find sogar das man dadurch Probleme viel linearer durchdenken
> kann, nur die Maechtigkeit erschlaegt einen :) (zumindestens mich)

Ja, die sind wirklich heftig, oder? Das ist auch der
Hauptkritikpunkt: Man kann zuviel damit anrichten,
sogar neue Kontrollstrukturen erzeugen. Das ist
zum einen aber nicht nötig, weil die Sprache eigentlich
alles an Kontrollstrukturen hat, zum anderen zeigt es,
daß die Dinger Overkill sind. Alles was zu mächtig ist,
kostet irgendwo Effizienz.

Genauer gesagt ist ds zu Mächtige die Fähigkeit, die
gleiche COntinuation wieder und wieder zu starten.
Die neuen Dinger sind "one-shot", das heißt, ein
tasklet ändert seinen Status. Continuations sind
immutable, dafür zahle ich einen ziemlichen Preis.
Naja, eigentlich nicht wirklich viel :-)

[neue Version]

> Das freut mich sehr das zu hoeren! Wie komplett wird denn diese
> Version sein? Gerade diese pickable states interessieren mich
> ja besonders :)

Die werden mit Sicherheit noch nicht drin sein, ich werde
sie in Chaleroix prinzipiell erklären, aber noch bin ich
tief im experimentieren.
Ist überhaupt nicht trivial, ich muß nämlich leider
reale C-Stacks untersuchen und einpacken. Das ist der
Preis für den "harten Weg".
Momentan schwanke ich zwischen verschiedenen Pfaden hin
und her. Einmal habe ich eine Heuristik, mit der ich
abgefangene Stacks auf Objekte, Stackreferenzen und
Programmadressen untersuchen kann.
Zum Anderen bastele ich an einem Parser für das MAP-File
herum, der mir alle Adressen, Zeilennummern und Namen
einsammelt. Das will ich mit einem Disassembly der dll
matchen, ein bischen die Register verfolgen (in Python),
damit ich direkt tracken kann, was was und wo ist. Mit
letzterem Ansatz könnte ich automatisch ein Modul
erzeugen, das die Struktur aller Aufrufstacks kennt
und solche "continuations" direkt erzeugen kann.

Jaaaa, ich weiß, damit ist das continuation-Problem
so gut wie gelöst, theoretisch. Mal sehen, welcher
Ansatz letztlich überlebt.
Aber ich stecke hier ganz schön in der Sch...., diese
realen C-Stacks waren schon ein Selbstschuß. Leider
hat jemand insgeheim Thread-Pickling implementiert
mit dem alten Stackless, und wollte das mir geben,
damit ich's in die Open Source übernehme. Dieses
Pickling ar ihr einziger Grund, Stackless einzusetzen.
Habe daraufhin versprochen, das Problem irgendwie zu
lösen. Hart, echt hart...

> Auf jeden Fall moechte ich dir auf diesen Weg auch gleich danken
> fuer Stackless und Continuations die mir neue Sichtweisen
> eroeffnet haben!

...long live continuations

Mist, das hatte ich befürchtet. Werde die Dinger wohl
doch wieder unterstützen, wenn ich weiß, wie. Zum
Lernen sind die richtig gut, gell?
*wenn* das mit dem Synthetisieren wirklich geht, dann
sind die Dinger auch machbar. Grübel...

bis dann - chris

-- 
Christian Tismer             :^)   <mailto:tismer at tismer.com>
Mission Impossible 5oftware  :     Have a break! Take a ride on Python's
Johannes-Niemeyer-Weg 9a     :    *Starship* http://starship.python.net/
14109 Berlin                 :     PGP key -> http://wwwkeys.pgp.net/
work +49 30 89 09 53 34  home +49 30 802 86 56  pager +49 173 24 18 776
PGP 0x57F3BF04       9064 F4E1 D754 C2FF 1619  305B C09C 5A3B 57F3 BF04
      whom do you want to sponsor today?   http://www.stackless.com/





More information about the Python-de mailing list