java、ruby 等有许多基于延续的框架,但在 python 中没有。Nagare 框架在一定程度上解决了这个问题,但它不使用标准 python,而是使用 stackless python 来解决延续问题。
我想知道,
在标准 python 中创建这样的延续 web 框架的标准 python 约束的哪一部分?
以及解决方法是什么?什么是延续框架架构的标准部分(因为模型视图控制器在 MVC 中)?
java、ruby 等有许多基于延续的框架,但在 python 中没有。Nagare 框架在一定程度上解决了这个问题,但它不使用标准 python,而是使用 stackless python 来解决延续问题。
我想知道,
在标准 python 中创建这样的延续 web 框架的标准 python 约束的哪一部分?
以及解决方法是什么?什么是延续框架架构的标准部分(因为模型视图控制器在 MVC 中)?
在您开始考虑编写基于延续的框架之前,您需要一种具有延续(或至少可用于模拟延续的协同程序)的编程语言。延续是像循环、闭包或函数这样的控制结构,而不是像 MVC 这样的设计模式。不幸的是(当前)标准 Python 不支持延续。这也是人们开发无堆栈 python 的原因之一。
Java 有点特殊。语言本身不支持延续,但虚拟机支持(为了支持异常)。我认为他们所做的是在运行时修改编译的字节码并重新排序指令,使其看起来支持延续。有点像通过猴子补丁实现无堆栈python。
对,延续是一种语言的属性,遗憾的是 CPython 没有延续。
纯 Python 中的解决方法是众所周知的:例如使用 Twisted 和 Tornado 之类的回调/延迟器,或者在任何地方使用“yield”来模仿协同程序,例如 Diesel。但是这两种方法都迫使您改变设计和编码应用程序的方式。也可以“重播”延续,这是基于延续的框架自动处理“后退”按钮问题的方式。
最后,准确地说,在 Nagare 中,我们使用了对冻结的 tasklet 的酸洗来获得一个延续对象。