发电机(产量)如何在低水平上工作?

时间:2017-06-24 10:05:24

标签: generator low-level conceptual

我知道大多数脚本语言提供的生成器(通常是yield)的概念(如PHP或Python),因此如何使用它们,它们如何工作以及有什么好处(更少的混乱,更多的性能,更少的内存) )他们通常在语言本身的范围内

我的问题针对他们如何在幕后工作的解释。某种程度上,状态必须存储在语言本身范围之外的某个地方。这个"某种程度上"必须是一个非常通用的概念,因为我可以像任何正常函数一样使用生成器,否则会返回一个数组。

例如,如果我从二进制库调用函数 - 比如在PHP生成器中查询MySQL - 某种程度上数据库连接的状态必须保持活动状态。因此,生成器必须以某种方式干扰外部应用程序(在这种情况下是MySQL服务器),通常情况下,语言中的正常代码执行不允许直接执行。普通函数只允许使用库中提供的API函数,但使用生成器似乎有一些自动化概念来软化这个限制并提供生成器经常产生的最初命名的好处(双关语)。

那么,如何从语言/解释器设计者的POV提供生成器的基本概念是什么?

How are generators and coroutines implemented in CPython?不是重复的,恕我直言,因为我并没有要求CPython的具体实现,而是它们背后的一般想法。)

0 个答案:

没有答案