130 votes

Quels sont les inconvénients de Stackless Python ?

J'ai lu récemment sur Stackless Python et il semble avoir de nombreux avantages par rapport à la vanille disponible. Il a toutes ces fonctionnalités intéressantes comme la récursivité infinie, microthreads, les continuations, etc. et en même temps est plus rapide qu'disponible (autour de 10%, si le Python wiki est pour le croire) et qui soit compatible avec elle (au moins les versions 2.5, 2.6 et 3.0).

Tous ces regards presque trop beau pour être vrai. Cependant, TANSTAAFL, je ne vois pas beaucoup d'enthousiasme pour Stackless parmi la communauté Python, et PEP 219 n'a jamais été la réalisation. Pourquoi est-ce? Quels sont les inconvénients de Stackless? Ce que les squelettes sont cachés dans Stackless' placard?

(Je sais Stackless n'offre pas de réelle concurrence, juste un moyen plus simple de programmation en simultané. Il n'a pas vraiment me dérange pas.)

Merci pour vos réponses.

168voto

Andrew Dalke Points 7607

Je ne sais pas où ce "Stackless est 10% plus rapide" sur le Wiki est venu, mais là encore je n'ai jamais essayé de mesurer les performances des nombres. Je ne peux pas penser à ce que Stackless fait pour faire une différence énorme.

Stackless est un outil étonnant avec plusieurs de l'organisation ou de problèmes politiques.

La première vient de l'histoire. Christian Tismer commencé à parler de ce qui allait devenir Stackless y a environ 10 ans. Il avait une idée de ce qu'il voulait, mais il avait du mal à expliquer ce qu'il faisait et pourquoi les gens devraient utiliser. C'est en partie parce que son fond de ne pas avoir la CS de formation concernant les idées comme des coroutines et parce que ses présentations et des discussions sont très de la mise en œuvre orienté, ce qui est difficile pour quiconque n'est pas déjà le hip-profond dans les continuations de comprendre comment l'utiliser comme une solution à leurs problèmes.

Pour cette raison, la documentation initiale était pauvre. Il y avait quelques descriptions de la façon de l'utiliser, avec le meilleur de tiers contributeurs. À PyCon 2007, j'ai donné une conférence sur "l'Aide Stackless" qui a plus de bien, selon la PyCon numéros d'enquête. Richard Tew a fait un excellent travail pour la collecte de ces, la mise à jour stackless.comet le maintien de la distribution lorsque de nouvelles versions de Python. Il est un employé de CCP Games, les développeurs de EVE Online, qui utilise Stackless comme une partie essentielle de leur système de jeu.

CCP games est aussi le plus grand du monde réel exemple, les gens utilisent quand ils parlent de Stackless. Le principal tutoriel pour Stackless est de Subvention Olson "Introduction à la Programmation Simultanée avec Stackless Python", qui est également en jeu orienté. Je pense que cela donne aux gens une idée biaisée que Stackless est jeux-orienté, quand c'est plus que les jeux sont plus facilement continuation orienté.

Une autre difficulté a été le code source. Dans sa forme originale, il les changements nécessaires à de nombreuses parties de Python, qui fait de Guido van Rossum, le Python de plomb, méfiez-vous. Partie de la raison, je pense, a été un soutien pour call/cc qui a été retiré comme étant "trop comme soutenant un goto quand il y a de mieux de plus haut niveau." Je ne suis pas certain à propos de cette histoire, il suffit donc de lire ce paragraphe que "Stackless utilisée pour exiger trop de changements."

Les versions ultérieures ne nécessite que peu de changements, et Tismer continué à insister pour que son inclusion dans Python. Alors qu'il y avait une certaine considération, la position officielle (autant que je sache), c'est que Disponible n'est pas seulement un Python de mise en œuvre, mais il s'agit d'une implémentation de référence, et il ne comprend pas Stackless fonctionnalité, car il ne peut pas être mis en œuvre par Jython ou de Fer Python.

Il n'y a absolument pas de plans pour "des changements importants à la base de code". Cette citation et de référence de lien hypertexte à partir de Arafangion (voir le commentaire) sont à peu près de la campagne 2000/2001. Les changements structurels qui ont longtemps été fait, et c'est ce que j'ai mentionné ci-dessus. Stackless comme il est maintenant stable et mature, avec seulement quelques changements mineurs dans le code de base au cours de la dernière plusieurs années.

Une dernière limitation Stackless - il n'est pas ardent défenseur de Stackless. Tismer est maintenant profondément impliqué avec PyPy, qui est une implémentation de Python en Python. Il a mis en œuvre le Stackless fonctionnalité dans PyPy et considère qu'il est de beaucoup supérieur à l'Stackless lui-même, et se sent que PyPy est la voie de l'avenir. Tew maintient Stackless mais il n'est pas intéressé dans les activités de plaidoyer. Je l'ai considéré comme étant dans le rôle, mais ne voyais pas comment je pouvais faire un revenu d'elle.

Mais si vous voulez de la formation dans Stackless, n'hésitez pas à me contacter! :)

40voto

tismer Points 221

il a fallu longtemps pour trouver cette discussion. À l' le temps que je n'étais pas sur PyPy, mais avait 2 ans affaire avec psyco, jusqu'à ce que la santé arrêté tout cela assez brusquement. Je suis maintenant de nouveau actif et de la conception d'une approche alternative - le présentera sur EuroPython 2012.

La plupart des Andrews déclarations sont exactes. Certains ajouts mineurs:

Stackless était nettement plus rapide que Disponible, il y a 10 ans, parce que j'ai optimisé l'interprète de la boucle. À l'époque, Guido n'était pas prêt pour cela. Quelques années plus tard, les gens ne s'similaire optimisations et encore plus et mieux, ce qui rend Stackless un peu plus lent, comme prévu.

Sur l'inclusion: eh bien, au début j'ai été très agressifs et convaincu que Stackless est le chemin à parcourir. Plus tard, quand il était presque possible de faire partie de la liste, j'ai perdu l'intérêt dans ce et a préféré laisser - il rester de cette façon, partiellement, de la frustration, en partie pour garder le contrôle de Stackless.

Les arguments comme "d'autres implémentations ne le" sentais toujours boiteux pour moi, comme il y a d'autres exemples où cet argument peut également être utilisé. J'ai pensé que je ferais mieux de l'oublier et rester en bonne amitié avec Guido, avoir ma propre distribution.

Pendant ce temps, les choses changent à nouveau. Je suis en train de travailler sur PyPy et Stackless comme une extension de parler, parfois plus tard

Cheers, Chris

5voto

Arafangion Points 5650

Si je me souviens bien, Stackless était prévu pour inclusion dans la CPython officiel, mais l’auteur de stackless dit les gens de CPython ne pas de le faire, parce qu’il a prévu de faire des changements importants à la base de code - deux, il voulait l’intégration faite plus tard alors que le projet était plus mature.

3voto

Greg Hewgill Points 356191

Je suis également intéressé par les réponses ici. J’ai joué un peu avec Stackless et il semble que ce serait un bon complément solid à Python standard.

PEP 219 mentionne les difficultés éventuelles de l’appel de code Python à partir de code C, si Python veut changer à une conduite différente. Il aurait besoin d’être des moyens de détecter et d’empêcher cela (pour éviter de bousiller la pile C). Je pense que c’est docile, alors je me demande aussi pourquoi Stackless doit se tenir sur ses propres.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X