Frage

Ich habe vor kurzem über Stackless Python lesen und es scheint, mit Vanille CPython viele Vorteile im Vergleich zu haben. Es hat all die coolen Features wie eine unendliche Rekursion, Microthreads, Fortsetzungen usw. und zugleich schneller als CPython (etwa 10%, wenn der Python Wiki ist es zu glauben) und kompatibel mit ihm (zumindest Versionen 2.5, 2.6 und 3.0).

All diese Blicke fast zu schön, um wahr zu sein. Allerdings TANSTAAFL , ich sehe nicht viel Begeisterung für Stackless unter der Python-Community, und PEP 219 nie kommen in Verwirklichung hat. Warum ist das so? Was sind die Nachteile von Stackless? Welche Skelette sind in Stackless' Schrank versteckt?

(Ich weiß Stackless nicht wirklich Gleichzeitigkeit bietet, nur eine einfachere Möglichkeit der Programmierung in der gleichzeitigen Art und Weise. Es ist nicht wirklich mich stört.)

War es hilfreich?

Lösung

Ich weiß nicht, wo die „Stackless 10% schneller ist“ auf dem Wiki kam, aber dann wieder habe ich nie versucht, diese Performance-Zahlen zu messen. Ich kann nicht glauben, was Stackless tut, um einen Unterschied zu machen, dass groß.

Stackless ist ein wunderbares Werkzeug mit mehreren Organisations / politischen Problemen.

Die erste kommt aus der Geschichte. Christian Tismer begann zu reden, was schließlich Stackless wurde vor etwa 10 Jahren. Er hatte eine Vorstellung davon, was er wollte, aber hatte eine harte Zeit zu erklären, was er tat, und warum die Leute es verwenden sollte. Dies ist zum Teil, weil seine Herkunft nicht die CS Ausbildung in Bezug auf Ideen wie Koroutinen haben und weil seine Vorträge und Diskussion sind sehr umsetzungsorientiert, die für alle nicht bereits hüfttief in Fortsetzungen sind schwer zu verstehen, wie es zu benutzen als Lösung ihre Probleme.

Aus diesem Grunde war die erste Dokumentation schlecht. Es gab einige Beschreibungen, wie es zu benutzen, mit dem Besten aus Drittbeteiligten. Bei PyCon 2007 hielt ich einen Vortrag über „ Mit Stackless “, die recht gut ging, nach dem PyCon Umfrage Zahlen. Richard Tew hat einen tollen Job zu sammeln diese getan, Aktualisierung stackless.com und Aufrechterhaltung der Verteilung, wenn neue Python Versionen kommt. Er ist ein Mitarbeiter von CCP Games , Entwickler von EVE Online, die Stackless als wesentliche Teile ihres Gaming-System verwendet wird.

CCP Games ist auch der größte der realen Welt Beispiel Menschen benutzen, wenn sie über Stackless sprechen. Das Haupt Tutorial für Stackless ist Grant-Olsons " Einführung in Concurrent Programming mit Stackless Python " , das Spiel ist auch ausgerichtet. Ich denke, diese Leute eine schiefe Idee gibt, dass Stackless ist Spiele-orientiert, wenn es mehr ist, dass Spiele mehr sind leicht Fortsetzung orientiert.

Eine weitere Schwierigkeit war der Quellcode. In seiner ursprünglichen Form benötigte es Änderungen in viele Teile von Python, die Guido van Rossum gemacht, den Python Blei, vorsichtig. Ein Teil des Grundes, glaube ich, war die Unterstützung für Call / cc, die später als entfernt wurden „zu sehr wie eine goto unterstützen, wenn es besser auf höhere Ebene bildet.“ Ich bin über diese Geschichte nicht sicher, so können Sie diesen Absatz lesen als „Stackless verwendet zu viele Änderungen zu verlangen.“

Spätere Versionen nicht die Änderungen erfordern, und Tismer weiterhin für die Aufnahme in Python schieben. Zwar gibt es einige Überlegungen, die offizielle Haltung (soweit ich weiß) ist, dass CPython nicht nur eine Python-Implementierung ist, aber es ist als Referenzimplementierung gemeint, und es wird nicht Stackless Funktionalität enthalten, weil es nicht von Jython umgesetzt werden kann oder Eisen Python.

Es gibt absolut keine Pläne für " wesentliche Änderungen an der Code-Basis ". Dieses Zitat und Referenz Hyperlink von Arafangion des (siehe Kommentar) ist von etwa 2000/2001. Die strukturellen Veränderungen sind seit langem getan worden, und es ist das, was ich oben erwähnt. Stackless wie es ist jetzt stabil und ausgereift, mit nur geringfügigen Veränderungen an die Code-Basis in den letzten Jahren.

Eine letzte Einschränkung mit Stackless - es gibt keinen starken Fürsprecher für Stackless. Tismer ist jetzt tief beteiligt mit PyPy , die eine Implementierung von Python für Python ist. Er hat die Stackless Funktionalität in PyPy implementiert und hält es für viel besser, sich zu Stackless, und fühlt, dass PyPy der Weg der Zukunft ist. Tew hält Stackless aber er ist in Advocacy nicht interessiert. Ich hielt in dieser Rolle zu sein, kann aber nicht sehen, wie ich ein Einkommen daraus machen könnte.

Obwohl, wenn Sie mit dem Training in Stackless wollen, können Sie auf kontaktieren Sie mich :)

Andere Tipps

Es dauerte ziemlich lange, diese Diskussion zu finden. dabei Zeit war ich nicht auf PyPy hatte aber eine 2-Jahre-Affäre mit psyco, bis der Gesundheit dieses ganz plötzlich alles gestoppt. Ich bin jetzt wieder aktiv und Gestaltung eines alternativer Ansatz -. wird es auf Europython 2012 präsentiert

Die meisten Andrews Aussagen sind korrekt. Etwas geringere Zusätze:

war Stackless deutlich schneller als CPython, vor 10 Jahren, weil ich die Dolmetscher Schleife optimiert. Damals war Guido dafür nicht bereit. Einige Jahre später, haben die Menschen ähnliche Optimierungen und noch mehr und bessere, die Stackless ein wenig langsamer als erwartet macht.

Auf Inklusion: na ja, am Anfang war ich sehr aufdringlich und davon überzeugt, dass Stackless ist der Weg zu gehen. Später, als es fast möglich war eingeschlossen zu werden, verlor ich das Interesse an, dass und bevorzugt zu lassen es bleibt auf diese Weise, teilweise aus der Frustration, teilweise zu behält die Kontrolle über Stackless.

Die Argumente wie „andere Implementierungen können es nicht tun“, um mich immer lahm gefühlt, denn es gibt andere Beispiele, wo dieses Argument könnte auch verwendet werden. Ich dachte, ich besser darüber vergessen und in guter Freundschaft mit Guido bleiben, meine eigene Distribution haben.

Unterdessen ändern sich die Dinge wieder. Ich arbeite an PyPy und Stackless als Erweiterung wird über die manchmal später

sprechen

Prost - Chris

Wenn ich mich richtig erinnere, Stackless für die Aufnahme in die offizielle CPython war geplant, aber der Autor von stackless sagte den CPython Leute nicht so zu tun, weil er einige bedeutende Änderungen an der Code-Basis zu tun geplant - presumeably wollte er die Integration später erfolgen, wenn das Projekt reifer war.

Ich interessiere mich auch für die Antworten hier. Ich habe ein bisschen mit Stackless gespielt und es sieht aus wie eine gute und solide Neben Standard-Python wäre.

PEP hat 219 mögliche Schwierigkeiten erwähnt mit Aufruf Python-Code von C-Code, wenn Python will einen anderen Stapel ändern. Es müßte Wege, dies zu erkennen und zu verhindern (zu vermeiden, dass das C-Stack Wegwerfen). Ich denke, dies obwohl lenkbar ist, so frage ich mich auch, warum Stackless auf eigenen Beinen stehen muss.

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