Каковы недостатки Stackless Python? [закрытый]
Я недавно читал о Stackless Python и он, кажется, имеет много преимуществ по сравнению с ванильным cPython. Он имеет все эти интересные функции, такие как бесконечная рекурсия, микропотоки, продолжения и т. д. и в то же время быстрее, чем cPython (около 10%, если питон Вики нужно верить) и совместима с ней (по крайней мере версии 2.5, 2.6 и 3.0).
все это выглядит почти слишком хорошо, чтобы быть правдой. Однако, TANSTAAFL, Я не вижу большого энтузиазма для Stackless среди сообщества Python, и PEP 219 никогда не приходил в реализацию. Почему? Каковы недостатки Stackless? Какие скелеты спрятаны в шкафу Stackless'?
(Я знаю, что Stackless не предлагает реального параллелизма, просто более простой способ программирования в параллельном режиме. На самом деле меня это не беспокоит.)
4 ответа:
Я не знаю, откуда взялся этот "Stackless на 10% быстрее" на Вики, но опять же я никогда не пытался измерить эти показатели производительности. Я не могу думать о том, что делает Stackless, чтобы сделать разницу такой большой.
Stackless-это удивительный инструмент с несколькими организационно-политических проблем.
первый исходит из истории. Кристиан Тисмер начал говорить о том, что в конечном итоге стало Stackless около 10 лет назад. У него было представление о том, чего он хочет, но было трудно объяснить, что он делает и почему люди должны использовать его. Отчасти это связано с тем, что у него не было обучения CS относительно таких идей, как сопрограммы, и потому что его презентации и обсуждения очень ориентированы на реализацию, что трудно для тех, кто еще не глубоко в продолжениях, чтобы понять, как использовать его в качестве решения своих проблем.
по этой причине, первоначальная документация была бедной. Было несколько описаний того, как его использовать, с помощью лучше всего от сторонних авторов. На PyCon 2007 я выступил с докладом на тему"Использование Stackless " который прошел довольно хорошо,согласно данным опроса PyCon. Ричард тью проделал большую работу, собирая их, обновляя stackless.com, и поддержание дистрибутива, когда появляются новые релизы Python. Он сотрудник CCP Games, разработчики EVE Online, которая использует Stackless в качестве неотъемлемой части своей игровой системы.
игры для КПК также самый большой реальный пример, который люди используют, когда говорят о Stackless. Основной учебник для Stackless-это грант Олсон"введение в параллельное программирование с помощью Stackless Python", который также ориентирован на игру. Я думаю, что это дает людям искаженное представление о том, что Stackless ориентирован на игры, когда это больше, что игры легче ориентированы на продолжение.
еще одной трудностью был исходный код. В своем первоначальном виде он требовал изменений во многих частях Питон, что заставило Гвидо ван Россума, ведущего питона, насторожиться. Частью причины, я думаю, была поддержка call/cc, которая позже была удалена как "слишком похожая на поддержку goto, когда есть лучшие формы более высокого уровня."Я не уверен в этой истории, поэтому просто прочитайте этот абзац, поскольку "Stackless требовал слишком много изменений."
более поздние релизы не требовали изменений, и Тисмер продолжал настаивать на его включении в Python. В то время как было некоторое рассмотрение, официальная позиция (насколько я знаю) заключается в том, что CPython-это не только реализация Python, но она предназначена как эталонная реализация, и она не будет включать в себя Stackless функциональность, потому что она не может быть реализована Jython или Iron Python.
нет никаких планов на "значительные изменения в базе кода". Эта цитата и ссылка на гиперссылку от Арафангиона (см. комментарий) относятся примерно к 2000/2001 году. Структурные изменения уже давно сделаны, и это о чем я уже упоминал выше. Stackless, как сейчас, является стабильным и зрелым, с незначительными изменениями в базе кода за последние несколько лет.
одно окончательное ограничение с Stackless-нет сильного защитника для Stackless. Тисмер теперь глубоко вовлечен в пользователей, который является реализацией Python для Python. Он реализовал функцию Stackless в PyPy и считает, что она намного превосходит саму Stackless, и чувствует, что PyPy-это путь в будущее. Тью поддерживает Stackless, но он не заинтересован в защите. Я думал о том, чтобы быть в этой роли, но не мог понять, как я могу заработать на этом.
хотя, если вы хотите обучение в Stackless, не стесняйтесь свяжитесь со мной! :)
прошло довольно много времени, чтобы найти это обсуждение. При этом время я не был на PyPy, но имел 2-летний роман с psyco, пока здоровье не остановило все это довольно резко. Теперь я снова активен и проектирования альтернативный подход-представим его на EuroPython 2012.
большинство утверждений Эндрюса верны. Некоторые незначительные дополнения:
Stackless был значительно быстрее, чем CPython, 10 лет назад, потому что я оптимизировал цикл интерпретатора. В то время Гвидо не было готов к этому. Несколько лет спустя люди сделали аналогичные оптимизации и даже больше и лучше, что делает Stackless немного медленнее, как и ожидалось.
на включение: ну, в начале я был очень настойчив и убежден, что Stackless-это путь. Позже, когда это было почти Возможно, я потерял интерес к этому и предпочел позволить он остается таким образом, частично из-за разочарования, частично для того, чтобы держать под контролем Stackless.
аргументов, как "другие реализации не могут этого сделать" всегда казались мне хромыми, поскольку есть и другие примеры, где этот аргумент также может быть использован. Я подумал, что лучше забыть об этом и остаться в хорошей дружбе с Гвидо, имея свой собственный дистрибутив.
тем временем все снова меняется. Я работаю над PyPy и Stackless, поскольку расширение будет говорить об этом иногда позже
Ура-Крис
Если я правильно помню, Stackless был запланирован для включения в официальный CPython, но автор stackless сказал людям CPython не делать этого, потому что он планировал сделать некоторые значительные изменения в базе кода - предположительно, он хотел, чтобы интеграция была сделана позже, когда проект был более зрелым.
меня также интересуют ответы здесь. Я немного поиграл с Stackless, и похоже, что это будет хорошее твердое дополнение к стандартному Python.
PEP 219 упоминает потенциальные трудности с вызовом кода Python из кода C, если Python хочет перейти на другой стек. Там должны быть способы обнаружения и предотвращения этого (чтобы избежать разгрома стека C). Я думаю, что это послушно, хотя, поэтому мне также интересно, почему Stackless должен стоять сам по себе.