2012-08-28 22:44

使用Python和Ruby进行Web编程的协程或延续。 为什么不? [关闭]


The question is: why aren't continuations (in Ruby) and coroutines (in Python) more widely used for Web programming?

Server-side web programming is made difficult by the problem of preserving state between requests. Two elegant, and related, solutions to this are continuations (as found in Scheme, Ruby and Smalltalk) and coroutines (as found in Python and Go).

Bruce Tate in his Beyond Java (O'Reilly, 2005) talked about Ruby on Rails and Seaside as exciting new developments in Web programming. To me, Seaside was the real breakthrough: using Smalltalk continuations, Seaside made it very easy to program complex request/response sequences.

I know about Python coroutines being used in Tornado and Twisted to reduce callbacks, but that is somewhat low-level, compared to writing a view/controller in a single coroutine to handle a sequence of HTTP requests to complete an online purchase, for example.

I wonder why these ideas that look so good on paper are not more widely deployed in Python and Ruby. Is it just a cultural matter? Limitations in the facilities as implemented in these languages? Or is there a fundamental flaw in these approaches in the context of Web development?

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享
  • 邀请回答


  • duan198811 duan198811 9年前

    I've used Seaside and continuations are a beautiful model for developing client server webapps. They simplify traditional client/server applications that I couldn't believe why no other langugage was doing it.

    But unfortunately webapps aren't what they used to be. Instead of the requesting only one page, now with ajax there are multiple requests at different times. That is why continuations aren't as useful as they used to be.

    Even Avi Bryant (original author of Seaside) has said that under ajax making callbacks easier (event driven programming) is more important than continuations.

    Take a look at this quora discussion for more: http://www.quora.com/Whats-the-best-continuation-based-web-framework

    点赞 评论 复制链接分享
  • doutui8842 doutui8842 9年前

    You application should be written on continuation/coroutines framework, as well as support libraries too. It's not trivial model to understand by beginners. Also there are much easier frameworks like gevent, which provides the same possibilities in making green threads, and easier to use because of monkey patching.

    点赞 评论 复制链接分享
  • dongze8698 dongze8698 9年前

    Mainly because of non-technical reasons. The number of people knowing Seaside or even Smalltalk is small, so there is no large pool of cheap programmers that can be hired. Because of this the number of service providers knowing how to install and maintain a Seaside system is also low.

    点赞 评论 复制链接分享