问题是:为什么不继续(在Ruby中)和coroutines(在Python中)更广泛地用于Web编程?
由于在请求之间保持状态的问题使得服务器端web编程变得困难.两个优雅且相关的解决方案是继续(如Scheme,Ruby和Smalltalk中所见)和协同程序(如Python和Go中所见).
Bruce Tate在他的Beyond Java(O'Reilly,2005)中谈到Ruby on Rails和Seaside是Web编程中令人兴奋的新发展.对我而言,Seaside是真正的突破:使用Smalltalk延续,Seaside使编写复杂的请求/响应序列变得非常容易.
我知道在Tornado和Twisted中使用Python协程来减少回调,但与在单个协程中编写视图/控制器来处理一系列HTTP请求以完成在线购买相比,这有点低级别.
我想知道为什么这些看起来如此优秀的想法在Python和Ruby中没有得到更广泛的部署.这只是一种文化问题吗?以这些语言实施的设施限制?或者,在Web开发的背景下,这些方法存在根本缺陷吗?
看一下源代码,似乎唯一的"原因"是OrderedDict用Python编写的,而defaultdict在C语言中.但是看起来这种情况正在发生变化,因为Python 3.5应该有一个cOrderedDict(参见Python Bugs),这突出了我唯一的错误解释其实是.
谁能提供更好的解释?我希望有更好的理由.
编辑:对于Python 2.7,所谓的重复答案是可以的,而不是对于类3 /类型区别消失的Python 3.OrderedDict并且defaultdict都被解释器本身视为类:
>>> collections.defaultdict
<class 'collections.defaultdict'>
>>> collections.OrderedDict
<class 'collections.OrderedDict'>
Run Code Online (Sandbox Code Playgroud)