Question

J'ai lu récemment sur Stackless Python et il semble avoir de nombreux avantages par rapport à la vanille CPython. Il a toutes les fonctionnalités intéressantes comme une récursion infinie, microfiletages, continuations, etc., et en même temps est plus rapide que CPython (environ 10%, si wiki Python est à croire) et compatible avec (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 est jamais entrée en réalisation. Pourquoi donc? Quels sont les inconvénients de Stackless? Qu'est-ce que les squelettes sont cachés dans le placard de Stackless?

(je sais Stackless ne propose pas de réelle concurrence, juste un moyen plus facile de la programmation de la manière simultanée. Cela ne me dérange pas vraiment.)

Était-ce utile?

La solution

Je ne sais pas où « Stackless est 10% plus rapide » sur le Wiki est venu, mais là encore je ne l'ai jamais essayé de mesurer ces chiffres de performance. Je ne peux pas penser à ce Stackless fait pour faire une différence si grande.

Stackless est un outil extraordinaire avec plusieurs problèmes d'organisation / politique.

La première vient de l'histoire. Christian Tismer a commencé à parler de ce qui allait devenir Stackless il y a environ 10 ans. Il avait une idée de ce qu'il voulait, mais avait du mal à expliquer ce qu'il faisait et pourquoi les gens devraient l'utiliser. Ceci est en partie parce que son arrière-plan n'a pas eu la formation CS en ce qui concerne les idées comme coroutines et parce que ses présentations et les discussions sont très axées sur la mise en œuvre, ce qui est difficile pour tous ceux qui ne sont pas déjà hip-profond continuations pour comprendre comment l'utiliser comme 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 des tiers contributeurs. A PyCon 2007 j'ai donné une conférence sur « Utiliser Stackless », qui est allé assez bien, selon le PyCon numéros d'enquête. Richard Tew a fait un excellent travail de collecte ces derniers, la mise à jour stackless.com , et le maintien de la distribution lorsque de nouvelles versions de Python arrive. Il est un employé de CCP Games , les développeurs d'EVE Online, qui utilise Stackless comme un élément essentiel de leur système de jeu.

Jeux du PCC est aussi le plus grand exemple, les gens du monde réel utilisent quand ils parlent de Stackless. Le tutoriel principal est Stackless Grant Olson « Introduction à la programmation Parallèlement à Stackless Python » , qui est un jeu aussi orienté. Je pense que cela donne aux gens une idée biaisée que Stackless est orientée jeux, quand il est plus que les jeux sont plus facilement orientés suite.

Une autre difficulté a été le code source. Dans sa forme originale il fallait des changements dans de nombreuses parties Python, qui ont fait Guido van Rossum, la tête Python, méfiant. Une partie de la raison pour laquelle, je pense, a été un soutien pour l'appel / cc qui a ensuite été retiré comme étant « trop comme soutenir un goto quand il y a de meilleures formes de niveau supérieur. » Je ne suis pas certain de cette histoire, donc juste de lire ce paragraphe comme « Stackless utilisé pour exiger trop de changements. »

Les versions ultérieures ne nécessitent pas les changements, et Tismer ont continué à pousser pour son inclusion dans Python. Bien qu'il y ait une certaine considération, la position officielle (pour autant que je sache) est que CPython est non seulement une implémentation de Python, mais il est conçu comme une implémentation de référence, et il ne comprend pas la fonctionnalité Stackless parce qu'il ne peut pas être mis en œuvre par Jython ou ironpython.

Il n'y a absolument aucun plan pour " des changements importants à la base de code ". Cette citation et lien hypertexte référence de Arafangion de (voir le commentaire) sont d'environ 2000/2001. Les changements structurels ont longtemps été fait, et il est ce que je l'ai mentionné ci-dessus. Stackless comme il est maintenant stable et mature, avec seulement quelques réglages mineurs à la base de code au cours des dernières années.

Une limitation finale avec Stackless - il n'y a pas d'avocat fort pour Stackless. Tismer est maintenant profondément impliqué dans PyPy , qui est une implémentation de Python pour Python. Il a mis en œuvre la fonctionnalité Stackless dans PyPy et considère qu'il est bien supérieur à lui-même Stackless, et estime que PyPy est la voie de l'avenir. Tew maintient Stackless mais il n'est pas intéressé par la défense. Je considérais être dans ce rôle, mais ne pouvait pas voir comment je pouvais faire un revenu de celui-ci.

Bien que si vous voulez une formation en Stackless, ne hésitez pas à me contacter :)

Autres conseils

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

La plupart des états Andrews sont corrects. Certains des ajouts mineurs:

Stackless était significativement plus rapide que CPython, il y a 10 ans, parce que je la boucle optimisé interprète. A cette époque, Guido n'était pas prêt pour cela. Quelques années plus tard, les gens ont fait des optimisations similaires et même plus et de meilleurs, ce qui rend Stackless un peu plus lent, comme prévu.

Sur l'inclusion: bien, au début, je suis très arrogant et convaincu que Stackless est le chemin à parcourir. Plus tard, quand il était presque possible d'obtenir inclus, je perdu tout intérêt pour cela et préféré laisser il reste ainsi, en partie de la frustration, partiellement garder le contrôle de Stackless.

Les arguments comme « d'autres implémentations ne peuvent pas le faire » sentir toujours boiteux pour moi, car il y a d'autres exemples où pourrait également être utilisé cet argument. Je pensais que je ferais mieux oublier cela et rester en bonne amitié avec Guido, ayant ma propre distro.

choses Pendant ce temps changent à nouveau. Je travaille sur PyPy et Stackless comme une extension en reparlerons plus tard parfois

Cheers - Chris

Si je me souviens, Stackless était prévu d'inclure dans le CPython officiel, mais l'auteur de stackless dit aux gens CPython de ne pas le faire, parce qu'il comptait faire des changements importants à la base de code - presumeably qu'il voulait l'intégration fait plus tard lorsque le projet était plus mature.

Je suis aussi intéressé par les réponses ici. J'ai joué un peu avec Stackless et il semble que ce serait un bon ajout solide à Python standard.

PEP 219 mentionne les difficultés potentielles d'appeler du code Python à partir du code C, si Python veut changer une autre pile. Il faudrait être des moyens pour détecter et empêcher ce (pour éviter bousiller la pile C). Je pense que c'est traitable, donc je demande aussi pourquoi Stackless doit se suffire à lui-même.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top