2009-02-26 3 views
117

Я недавно читал о Stackless Python и, похоже, имеет много преимуществ по сравнению с ванильным cPython. В нем есть все эти классные функции, такие как бесконечная рекурсия, микропотоки, продолжения и т. Д. И в то же время быстрее, чем cPython (около 10%, если полагаться the Python wiki) и совместимы с ним (по крайней мере, версии 2.5, 2.6 и 3,0).Каковы недостатки Stackless Python?

Все это выглядит слишком хорошо, чтобы быть правдой. Однако, TANSTAAFL, я не вижу большого энтузиазма для Stackless среди сообщества Python, и PEP 219 никогда не приходил в осознание. Почему это? Каковы недостатки Stackless? Какие скелеты скрыты в шкафу Stackless?

(я знаю Stackless не предлагает реальный параллелизм, только более простой способ программирования в параллельной дороге. Это не беспокоит меня.)

ответ

149

Я не знаю, откуда такое «Stackless на 10% быстрее» на Wiki, но опять же я никогда не пытался измерить эти показатели производительности. Я не могу придумать, что делает Stackless, чтобы иметь большое значение.

Stackless - это удивительный инструмент с несколькими организационно-политическими проблемами.

Первый - из истории. Кристиан Тисмер начал говорить о том, что в конечном итоге стало неутешительным около 10 лет назад. У него было представление о том, чего он хотел, но ему было трудно объяснить, что он делает и почему люди должны его использовать. Частично это объясняется тем, что на его фоне не было обучения CS в отношении таких идей, как сопрограммы, и потому, что его презентации и обсуждения ориентированы на реализацию, что трудно для тех, кто еще не проработал в продолжении, чтобы понять, как использовать его в качестве решения для их проблемы.

По этой причине исходная документация была плохой. Были некоторые описания того, как их использовать, с лучшими от сторонних участников. В PyCon 2007 я рассказал о «Using Stackless», который прошел довольно хорошо, согласно данным опроса PyCon. Ричард Тью отлично справился с этим, обновив stackless.com и поддерживая распространение при появлении новых выпусков Python. Он является сотрудником CCP Games, разработчиками EVE Online, который использует Stackless как неотъемлемую часть своей игровой системы.

Игры CCP также являются самым большим примером реального мира, который люди используют, когда говорят о Stackless. Основным учебником для Stackless является «Introduction to Concurrent Programming with Stackless Python» Гранта Олсона, который также ориентирован на игры. Я думаю, что это дает людям перекошенную идею о том, что Stackless ориентирован на игры, тогда как игры более легко ориентируются на продолжение.

Другой трудностью был исходный код.В его первоначальном виде потребовались изменения во многих частях Python, которые заставили Guido van Rossum, руководство Python, настороженно. Частично, я думаю, была поддержка call/cc, которая позже была удалена как «слишком похожая на поддержку goto, когда есть более качественные формы более высокого уровня». Я не уверен в этой истории, поэтому просто прочитайте этот параграф, как «Stackless использовал слишком много изменений».

Более поздние выпуски не требовали изменений, и Tismer продолжал настаивать на его включении в Python. Хотя было некоторое соображение, официальная позиция (насколько мне известно) заключается в том, что CPython является не только реализацией Python, но и подразумевается как эталонная реализация, и она не будет включать функции Stackless, поскольку она не может быть реализована Jython или Iron Python.

планов не существует. "важные изменения, связанные с кодом". Эта цитата и справочная гиперссылка от Arafangion's (см. Комментарий) составляют примерно 2000/2001. Структурные изменения уже давно сделаны, и это то, о чем я говорил выше. Без стаки, поскольку сейчас он стабильный и зрелый, с небольшими изменениями в кодовой базе за последние несколько лет.

Окончательное ограничение с помощью Stackless - нет сильного защитника для Stackless. Tismer теперь глубоко связан с PyPy, который представляет собой реализацию Python для Python. Он реализовал функциональность Stackless в PyPy и считает, что она намного превосходит самого Stackless и считает, что PyPy - это путь в будущее. Tew поддерживает Stackless, но он не заинтересован в адвокации. Я считал себя в этой роли, но не мог понять, как я могу получить от этого доход.

Хотя, если вы хотите тренироваться в Stackless, не стесняйтесь contact me! :)

3

Я также заинтересован в ответах здесь. Я немного поиграл с Stackless, и похоже, что это будет хорошее дополнение к стандартному Python.

PEP 219 упоминает потенциальные трудности с вызовом кода Python из кода C, если Python хочет перейти на другой стек. Там должны быть способы обнаружения и предотвращения этого (чтобы избежать обхода стека C). Я думаю, что это сносно, поэтому я также задаюсь вопросом, почему Stackless должен стоять сам по себе.

+3

PEP 219 9 лет и серьезно устарели. Трудности «вызова кода Python из кода C» только в реализации, обсуждаемой в PEP, и не в Stackless. Имя PEP («Stackless Python») является немного неправильным; он черпал вдохновение из Stackless и все. –

4

Если я правильно помню, Stackless был запланирован для включения в официальный CPython, но автор stackless сказал людям CPython этого не делать, потому что он планировал внести некоторые существенные изменения в базу кода - предположительно, он хотел, чтобы интеграция была сделана позже, когда проект был более зрелым.

+1

Источник?Я нахожу это интересным, но я, очевидно, не могу поверить тебе, потому что ты так сказал. Я бы выглядел дураком, если вы ошибались, и я начал говорить о том, как это было интересно. –

+2

Отличная точка. Извините, у меня нет ссылки, потому что это было в irc-разговоре в #python on freenode, однако мне удалось найти древний список рассылки по адресу http://gnosis.cx/download/charming_python_10_outtakes.html, который дает много более глубокое понимание ситуации. – Arafangion

+0

Эта ссылка действительно замечательная. Он отвечает на многие мои вопросы. –

34

Прошло довольно долго, чтобы найти эту дискуссию. При этом времени я не был на PyPy, но имел 2-летнюю историю с psyco, пока здоровье не прекратило все это довольно резко. Теперь я снова активен и разрабатываю альтернативный подход - представит его на EuroPython 2012.

Большинство утверждений Эндрюса верны. Некоторые Дополнительные сведения:

Stackless был значительно быстрее, чем CPython, 10 лет назад, потому что я оптимизировал цикл интерпретатора. В то время Гвидо не был готов к этому. Несколько лет спустя люди сделали аналогичную оптимизацию и даже больше и лучше, что делает Stackless немного медленнее, как и ожидалось.

Включение: ну, в начале я был очень надуман и убежден, что Stackless - это путь. Позже, когда это было практически возможно, я потерял интерес к этому и предпочел позволить оставаться таким образом, частично из-за разочарования, частично до держать контроль над Stackless.

Аргументы, подобные «другим реализациям, не могут этого сделать», всегда казались мне хромыми, так как есть и другие примеры, где этот аргумент также можно использовать. Я подумал, что лучше забыть об этом и оставаться в хорошей дружбе с Гвидо, имея собственный дистрибутив.

Между тем все меняется снова. Я работаю над PyPy и Stackless как расширение будет говорить о том, что иногда позже

Приветствия - Крис

+0

Спасибо за понимание, Крис. :) –

Смежные вопросы