Подтвердить что ты не робот

Coroutines или продолжения для веб-программирования в Python и Ruby. Почему нет?

Вопрос: почему не используются продолжения (в Ruby) и сопрограммы (в Python), более широко используемые для веб-программирования?

Веб-программирование на стороне сервера затруднено из-за проблемы сохранения состояния между запросами. Два изящных и связанных с ними решений - это продолжения (как показано в Scheme, Ruby и Smalltalk) и сопрограммы (как показано на Python и Go).

Брюс Тейт в своей Beyond Java (O'Reilly, 2005) рассказал о Ruby on Rails и Seaside как захватывающие новые разработки в веб-программировании. Для меня Seaside стал настоящим прорывом: с помощью продолжения Smalltalk Seaside очень легко программировал сложные последовательности запросов/ответов.

Я знаю о сопрограммах Python, используемых в Tornado и Twisted для уменьшения обратных вызовов, но это несколько низкоуровневый, по сравнению с написанием view/controller в одной сопрограмме для обработки последовательности HTTP-запросов для завершения онлайн-покупки, например.

Интересно, почему эти идеи, которые выглядят так хорошо на бумаге, более широко не используются в Python и Ruby. Это просто культурный вопрос? Ограничения в средствах, реализованных на этих языках? Или существует фундаментальный недостаток этих подходов в контексте веб-разработки?

4b9b3361

Ответ 1

Я использовал Seaside и продолжения - прекрасная модель для разработки клиентских серверов webapps. Они упрощают традиционные клиент-серверные приложения, которые я не мог поверить почему никакой другой langugage не делал этого.

Но, к сожалению, webapps не то, чем они были раньше. Вместо того, чтобы запрашивать только одну страницу, теперь с помощью ajax в разное время существует несколько запросов. Вот почему продолжения не так полезны, как раньше.

Даже Ави Брайант (автор оригинальной версии Seaside) сказал, что при ajax более эффективные обратные вызовы (программирование, управляемое событиями) важнее продолжений.

Взгляните на эту дискуссию по кворе: http://www.quora.com/Whats-the-best-continuation-based-web-framework

Ответ 2

Ваше приложение должно быть написано на схеме продолжения/сопрограммы, а также в библиотеках поддержки. Это не тривиальная модель для понимания новичков. Также есть гораздо более простые фреймворки, такие как gevent, который обеспечивает те же возможности в создании зеленых потоков и проще в использовании из-за патчей обезьян.

Ответ 3

В основном из-за нетехнических причин. Количество людей, которые знают Seaside или даже Smalltalk, невелико, поэтому нет большого пула дешевых программистов, которые могут быть наняты. Из-за этого количество поставщиков услуг, которые знают, как устанавливать и поддерживать систему Seaside, также низкое.