Je ne sais pas d'où vient ce "Stackless est 10% plus rapide" sur le Wiki, mais là encore je n'ai jamais essayé de mesurer ces performances. Je ne peux pas penser à ce que fait Stackless pour faire une si grande différence.
Stackless est un outil incroyable avec plusieurs problèmes organisationnels / politiques.
Le premier vient de l'histoire. Christian Tismer a commencé à parler de ce qui est finalement devenu 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. C'est en partie parce que son arrière-plan n'avait pas la formation CS concernant des idées comme les coroutines et parce que ses présentations et ses discussions sont très axées sur la mise en œuvre, ce qui est difficile pour quiconque n'est pas déjà à la mode dans les continuations pour comprendre comment l'utiliser comme solution pour leurs problèmes.
Pour cette raison, la documentation initiale était médiocre. Il y avait quelques descriptions sur la façon de l'utiliser, avec le meilleur de contributeurs tiers. A PyCon 2007, j'ai donné une conférence sur " Utiliser Stackless " qui s'est plutôt bien passée, d'après les chiffres de l'enquête PyCon. Richard Tew a fait un excellent travail pour les collecter, mettre à jour stackless.com et maintenir la distribution lorsque de nouvelles versions de Python apparaissent. Il est un employé de CCP Games , les développeurs d'EVE Online, qui utilise Stackless comme élément essentiel de leur système de jeu.
Les jeux CCP sont également le plus grand exemple du monde réel que les gens utilisent lorsqu'ils parlent de Stackless. Le tutoriel principal pour Stackless est " Introduction à la programmation simultanée avec Stackless Python " de Grant Olson , qui est également orienté jeu. Je pense que cela donne aux gens une idée faussée que Stackless est axé sur les jeux, alors que c'est plutôt que les jeux sont plus facilement orientés vers la continuation.
Une autre difficulté a été le code source. Dans sa forme originale, il a fallu des changements dans de nombreuses parties de Python, ce qui a rendu Guido van Rossum, le chef de file de Python, méfiant. Une partie de la raison, je pense, était la prise en charge de call / cc qui a été supprimée plus tard comme étant "trop semblable à la prise en charge d'un goto quand il existe de meilleurs formulaires de niveau supérieur". Je ne suis pas certain de cet historique, alors lisez simplement ce paragraphe comme suit: "Stackless nécessitait trop de changements".
Les versions ultérieures n'ont pas nécessité les modifications, et Tismer a continué à faire pression pour son inclusion dans Python. Bien qu'il y ait eu quelques considérations, la position officielle (pour autant que je sache) est que CPython n'est pas seulement une implémentation Python, mais il est conçu comme une implémentation de référence, et il n'inclura pas la fonctionnalité Stackless car il ne peut pas être implémenté par Jython ou Iron Python.
Il n'y a absolument aucun projet de " changements significatifs de la base de code ". Cette citation et cet hyperlien de référence d'Arafangion (voir le commentaire) datent d'environ 2000/2001. Les changements structurels ont été effectués depuis longtemps, et c'est ce que j'ai mentionné ci-dessus. Stackless tel qu'il est maintenant est stable et mature, avec seulement des modifications mineures de la base de code au cours des dernières années.
Une dernière limitation avec Stackless - il n'y a pas de fervent défenseur de Stackless. Tismer est maintenant profondément impliqué dans PyPy , qui est une implémentation de Python pour Python. Il a implémenté la fonctionnalité Stackless dans PyPy et la considère bien supérieure à Stackless lui-même, et estime que PyPy est la voie du futur. Tew maintient Stackless mais il n'est pas intéressé par le plaidoyer. J'ai envisagé de jouer ce rôle, mais je ne voyais pas comment je pourrais en tirer un revenu.
Mais si vous souhaitez vous entraîner à Stackless, n'hésitez pas à me contacter ! :)
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 ajout solide à Python standard.
PEP 219 mentionne des difficultés potentielles lors de l'appel du code Python à partir du code C, si Python souhaite passer à une pile différente. Il devrait y avoir des moyens de détecter et d'empêcher cela (pour éviter de détruire la pile C). Je pense que cela est traitable, donc je me demande également pourquoi Stackless doit être autonome.
la source