Stackless Pythonの欠点は何ですか?[閉まっている]


127

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

これらすべては本当であるにはあまりにも良さそうに見えます。しかし、TANSTAAFLは、私はPythonコミュニティの中でスタックレスのために多くの熱意が表示されない、とPEP 219は、実現に来たことはありません。何故ですか?Stacklessの欠点は何ですか?Stacklessのクローゼットにはどのスケルトンが隠されていますか?

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

回答:


165

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

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

最初は歴史から来ています。クリスチャン・ティズマーは、約10年前にスタックレスになったものについて話し始めました。彼は自分が何を望んでいるのかはわかっていましたが、彼が何をしていて、なぜそれを使う必要があるのか​​を説明するのに苦労しました。これは、彼のバックグラウンドにコルーチンなどのアイデアに関するCSトレーニングがなかったこと、および彼のプレゼンテーションとディスカッションが非常に実装指向であるためであり、継続的に最先端に達していない人は、それをソリューションとして使用する方法を理解することが困難です彼らの問題。

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

CCPゲームは、人々がスタックレスについて話すときに使用する最大の実例でもあります。Stacklessのメインチュートリアルは、ゲーム指向のGrant Olsonの「Introduction to Concurrent Programming with Stackless Python」です。これは、Stacklessがゲーム指向であるという歪んだ考えを人々に与えていると思います。

もう1つの問題はソースコードです。元の形式では、Pythonの多くの部分に変更を加える必要があり、PythonのリーダーであるGuido van Rossumは慎重になりました。その理由の1つは、call / ccのサポートにあったため、後で「より高いレベルのフォームがある場合にgotoをサポートするのに似すぎている」として削除されました。私はこの歴史について確信が持てないので、この段落を「スタックレスはあまりにも多くの変更を必要としていました」と読んでください。

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

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

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

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


39

この議論を見つけるのにかなり時間がかかりました。当時、私はPyPyを利用していませんでしたが、健康がこれをまったく突然止めるまで、2年間psycoと関係がありました。私は再びアクティブになり、代替アプローチを設計しています-EuroPython 2012でそれを発表します。

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

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

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

「他の実装はそれを行うことができない」のような議論は、この議論が使用されることもできる他の例があるので、常に私には不満を感じました。私はそれを忘れて、自分のディストリビューションを持ちながら、Guidoと良い友情を保つべきだと思いました。

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

乾杯-クリス


5

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


1
ソース?私はこれを面白いと思いますが、あなたがそう言ったからといってあなたを信じることはできません。あなたが間違っていたら私は馬鹿に見えるだろうし、それがいかに興味深いかについて話し始めた。
Devin Jeanpierre、

2
優れた点。申し訳ありませんが、参照はありません。これは、freenode上の#pythonのirc会話にあったためですが、gnosis.cx / download / charming_python_10_outtakes.htmlで古代のメーリングリストの会話を見つけて、状況。
アラファンギオン2009

そのリンクは本当に素晴らしいです。それは私の質問の多くに答えます。
リザードソパ09

そのリンクは8歳または9歳(Python 2.1について話している)であり、コードベースに対する将来の変更についての議論は長い間行われてきました。Stackless Pythonは安定していて成熟しているため、「コードベースの大幅な変更」の計画はありません。
Andrew Dalke、

dalke:これが現状です-変更を統合する決定に大幅な変更があった場合は、新しい参照を自由に思いついてください。 of python、eg、JPython、IronPytion ..
Arafangion

3

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

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


3
PEP 219は9歳で、時代遅れです。「CコードからPythonコードを呼び出す」ことの難しさは、PEPで説明されている実装にのみ存在し、スタックレスにはありません。PEP(「Stackless Python」)の名前は、少し誤った名称です。Stacklessからインスピレーションを得て、それだけです。
Andrew Dalke、
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.