web-dev-qa-db-ja.com

Stackless Pythonの欠点は何ですか?

Stackless Python について最近読んでいますが、Vanilla cPythonと比較して多くの利点があるようです。無限再帰、マイクロスレッド、継続などのクールな機能がすべてあり、同時にcPythonよりも高速です( the Python wikiandと互換性があります(少なくともバージョン2.5、2.6、3.0)。

これらはすべて、あまりにも良すぎて真実ではありません。ただし、 [〜#〜] tanstaafl [〜#〜] 、Pythonコミュニティ、および PEPの中でStacklessに対する熱意はあまり見られません。 219 実現したことはありませんが、それはなぜですか?Stacklessの欠点は何ですか?Stacklessのクローゼットに隠されているスケルトンは何ですか?

(Stacklessが実際の同時実行性を提供するのではなく、並行プログラミングをより簡単な方法で提供することを知っています。それは本当に気にしません。)

120
Ryszard Szopa

Wikiの「Stacklessの10%高速化」がどこから来たのかはわかりませんが、そのパフォーマンスの数値を測定しようとしたことは一度もありません。 Stacklessがこれほど大きな違いを生むために何をするのかは考えられません。

Stacklessは、いくつかの組織的/政治的問題を抱える素晴らしいツールです。

最初は歴史から来ています。 Christian Tismerは、約10年前に最終的にStacklessになったものについて話し始めました。彼は自分が何を望んでいるのか考えていましたが、彼が何をしていて、なぜそれを使うべきなのかを説明するのに苦労しました。これは、彼のバックグラウンドにコルーチンなどのアイデアに関するCSトレーニングがなく、プレゼンテーションとディスカッションが非常に実装指向であるためです。これは、継続的にヒップヒップでない人にとっては、それをソリューションとして使用する方法を理解するのが難しいからです彼らの問題。

そのため、最初のドキュメントは貧弱でした。サードパーティの貢献者による最高のものを使用して、それを使用する方法のいくつかの説明がありました。 PyCon 2007で、「 Stacklessを使用 」に関する講演を行いました。 Richard Tewはこれらを収集し、 stackless.com を更新し、新しいPythonリリースが登場したときにディストリビューションを維持します。彼は の従業員です。 CCP Games 、EVE Onlineの開発者。Stacklessをゲームシステムの重要な部分として使用しています。

CCPゲームは、人々がStacklessについて話すときに使用する最大の実世界の例でもあります。 Stacklessのメインチュートリアルは、Grant Olsonの「 Stackless Pythonによる並行プログラミング入門 」で、これもゲーム指向です。これにより、人々はStacklessがゲーム指向であるという偏った考えを得ることができると思います。

もう1つの困難はソースコードです。元の形式ではPythonの多くの部分を変更する必要があったため、Guido van RossumはPythonリード、警戒。理由の一部はcall/ccのサポートだったと思います。後に「より良い高レベルのフォームがある場合にgotoをサポートするのと同じくらい」であるとして削除されました。この歴史については確信がありません。

それ以降のリリースでは変更は不要で、TismerはPythonに含めるためにプッシュを続けました。いくつかの考慮事項がありましたが、公式のスタンス(私の知る限り)は、CPythonはPython実装であるだけでなく、参照実装として意図されており、Stackless機能を含みませんJythonやIron Pythonで実装できないためです。

コードベースの大幅な変更」の計画はまったくありません。 Arafangionの引用および参照ハイパーリンク(コメントを参照)は、およそ2000/2001年のものです。構造の変更は長い間行われてきましたが、それは私が上で述べたものです。スタックレスは現在、安定しており、成熟しており、過去数年間でコードベースに微調整を加えただけです。

Stacklessの最後の制限-Stacklessの強力な支持者はいません。 Tismerは PyPy に深く関わっています。これは、PythonのPythonの実装です。PyPyでStackless機能を実装しており、Stackless自体よりもはるかに優れていると考えています。 TewはStacklessを維持していますが、アドボカシーには興味がありません。私はその役割にあることを考えましたが、それから収入を得る方法がわかりませんでした。

ただし、Stacklessでのトレーニングが必要な場合は、お気軽に お問い合わせください ! :)

156
Andrew Dalke

この議論を見つけるのにかなり時間がかかった。当時、私はPyPyを使用していませんでしたが、サイコと2年間関係がありました。現在、私は再び活動しており、代替アプローチを設計しています-EuroPython 2012で紹介します。

アンドリュースの声明のほとんどは正しい。いくつかのマイナーな追加:

インタープリターループを最適化したため、Stacklessは10年前のCPythonよりも大幅に高速でした。当時、グイドはその準備ができていませんでした。数年後、人々は同様の最適化を行い、さらに多くのより優れた最適化を行いました。これにより、予想通りStacklessが少し遅くなりました。

インクルージョンについて:まあ、最初は、私は非常に強引で、Stacklessが道であると確信していました。後で、含まれることがほとんど可能になったとき、私はそのことに興味を失い、この方法で、フラストレーションから部分的に、スタックレスの制御を維持するために部分的にそれをそのままにしておくことを好みました.

「他の実装ではできない」などの議論は、この議論も使用できる他の例があるため、私には常に足りないと感じました。私はそれを忘れて、グイドと良い友情を保ち、自分のディストリビューションを持っている方が良いと思った。

その間、状況は再び変化しています。私は拡張機能としてPyPyとStacklessに取り組んでいます

乾杯-クリス

37
tismer

正しく思い出せば、Stacklessは公式のCPythonに含める予定でしたが、stacklessの作者はCPythonの人々にそうしないように言っていました。プロジェクトはより成熟しました。

5
Arafangion

ここでの答えにも興味があります。 Stacklessを少し使ってみましたが、標準のPythonにしっかりと追加できるようです。

PEP 219は、Python Cコードからのコード、Pythonが別のスタックに変更したい場合。 (Cスタックを破壊しないようにするため)これは扱いやすいと思うので、Stacklessが単独で立つ必要がある理由も疑問に思っています。

3
Greg Hewgill