133

私は最近Stackless Pythonについて読んでいますが、バニラの cPython と比較して多くの利点があるようです。無限再帰、マイクロスレッド、継続などの優れた機能をすべて備えていると同時に、cPython よりも高速 ( Python wikiを信じるなら約 10%) であり、cPython互換性があります (少なくともバージョン2.5、2.6)。および 3.0)。

これらはすべて、うますぎるように見えます。しかし、TANSTAAFL、Python コミュニティの間で Stackless に対する熱意はあまり見られず、PEP 219は実現していません。何故ですか?スタックレスの欠点は何ですか? スタックレスのクローゼットに隠されている骸骨は?

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

4

4 に答える 4

170

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

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

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

そのため、最初のドキュメントは不十分でした。サードパーティの寄稿者からの最高のものとともに、それを使用する方法のいくつかの説明がありました。PyCon 2007で、PyConの調査数によると、「Stacklessの使用」について講演しました。Richard Tewは、これらを収集し、 stackless.comを更新し、新しいPythonリリースがリリースされたときにディストリビューションを維持するという素晴らしい仕事をしてきました。彼は、ゲームシステムの重要な部分としてStacklessを使用するEVEOnlineの開発者であるCCPGamesの従業員です。

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

もう1つの問題は、ソースコードです。元の形式では、Pythonの多くの部分に変更を加える必要があったため、PythonのリーダーであるGuidovanRossumは警戒していました。その理由の一部は、call / ccのサポートでしたが、後で「より高レベルのフォームがある場合にgotoをサポートするのと非常に似ている」として削除されたと思います。この歴史についてはよくわかりません。この段落を「Stacklessは以前はあまりにも多くの変更が必要だった」と読んでください。

それ以降のリリースでは変更は必要なく、TismerはPythonへの組み込みを引き続き推進しました。いくつかの考慮事項がありましたが、公式のスタンス(私が知る限り)は、CPythonはPython実装であるだけでなく、リファレンス実装として意図されており、Jythonでは実装できないためStackless機能は含まれていませんまたはIronPython。

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

Stacklessの最後の制限の1つ-Stacklessを強く支持する人はいません。Tismerは現在、PythonforPythonの実装であるPyPyに深く関わっています。彼はPyPyにStackless機能を実装しており、Stackless自体よりもはるかに優れていると考えており、PyPyが未来の道であると感じています。TewはStacklessを維持していますが、アドボカシーには興味がありません。私はその役割を担うことを考えましたが、それからどのように収入を得ることができるのかわかりませんでした。

Stacklessでのトレーニングが必要な場合は、お気軽にご連絡ください。:)

于 2009-02-26T12:47:49.740 に答える
42

この議論を見つけるのにかなりの時間がかかりました。当時、私は PyPy を使用していませんでしたが、サイコと 2 年間関係がありましたが、健康状態が突然停止しました。私は現在再び活動しており、別のアプローチを設計しています - EuroPython 2012 で発表します。

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

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

インクルージョンについて: 最初は、私は非常に強引で、Stackless が進むべき道だと確信していました。後で、含まれる可能性がほとんどあったとき、私はそれに興味を失い、一部は欲求不満から、一部はStacklessの制御を維持するために、このままにしておくことを好みました.

「他の実装ではできない」などの議論は、この議論も使用できる他の例があるため、私には常に不十分であると感じました。そのことは忘れて、自分のディストリビューションを持って、Guido との良好な友情を維持したほうがよいと思いました。

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

乾杯 -- クリス

于 2012-03-20T17:44:47.673 に答える
5

私の記憶が正しければ、Stackless は公式の CPython に組み込まれる予定でしたが、stackless の作成者は CPython の人々にそうしないように言いました。なぜなら、彼はコード ベースにいくつかの重要な変更を加える予定だったからです。プロジェクトはより成熟しました。

于 2009-02-26T03:52:17.717 に答える
3

ここでの答えにも興味があります。私は Stackless で少し遊んでみましたが、標準の Python にしっかりと追加されているようです。

PEP 219 は、Python が別のスタックに変更したい場合、C コードから Python コードを呼び出す際の潜在的な問題について言及しています。これを検出して防止する方法が必要です (C スタックの破棄を避けるため)。これは扱いやすいと思いますが、スタックレスが自立しなければならない理由も不思議です。

于 2009-02-26T03:47:02.707 に答える