【发布时间】:2010-11-10 05:29:07
【问题描述】:
我使用迭代器已经有一段时间了,我喜欢它们。
但是,尽管我仔细考虑过,但我无法弄清楚“如何实现识别迭代器的编译器”。我也对此进行了研究,但找不到任何资源来解释编译器设计上下文中的情况。
详细地说,大多数关于迭代器的文章都暗示存在某种“魔法”来实现所需的行为。他们建议编译器维护一个状态机,以便跟踪执行的位置(看到最后一个“yield return”的位置)。我对启用惰性求值的 Iterators 的这个属性特别感兴趣。
对了,我知道什么是状态机,已经上过编译器设计课程,学过龙书。但显然,我无法将我所研究的内容与 csc 的“魔法”联系起来。
感谢任何知识或不同的想法。
【问题讨论】:
-
你能再解释一下吗?例如,您认为编译器很难识别的源代码示例?
-
还有你在说什么语言——例如“yeild”是做什么的?
-
C# 有一个“收益回报”语法。
-
对不起,我的参考语言是c#。
标签: iterator compiler-construction yield-keyword