我正在考虑为 Lua 制作类似 Linq 之类的东西,我大致了解 Linq 的工作原理,但想知道是否有一篇好文章,或者是否有人可以解释 C# 如何使 Linq 成为可能
注意:我的意思是在幕后,比如它如何生成代码绑定等等,而不是最终用户语法。
很难回答这个问题,因为 LINQ 有很多不同的东西。比如坚持C#,就涉及到以下几点:
IEnumerable<T>
)有效地获得更多的权力。var
隐式类型局部变量(显然,其中很多不仅被 LINQ 使用,而且不同的 LINQ 技术将依赖于它们。
如果您可以提供更多关于您感兴趣的方面的指示,我们或许可以提供更多详细信息。
如果您对有效实现 LINQ to Objects 感兴趣,您可能会对几周前我在 DDD 的 Reading 上发表的演讲感兴趣 - 基本上是在一个小时内实现尽可能多的 LINQ to Objects。到最后我们还远未完成,但它应该很好地了解您需要做的事情(以及缓冲/流式传输、迭代器块、查询表达式翻译等)。视频还没有发布(我还没有上传代码供下载)但是如果你有兴趣,请给我发邮件至 skeet@pobox.com,我会在视频发布时通知你. (我可能也会写博客。)
Mono(部分?)实现 LINQ,并且是开源的。也许你可以看看他们的实施?
阅读这篇文章:
也许我的LINQ for R6RS Scheme会提供一些见解。
它在语义上是 100%,在语法上几乎 100% 与 LINQ 相同,除了使用 'then' 而不是 ',' 的附加排序参数之外。
一些规则/假设:
我的实现取决于几个核心程序:
结构的其余部分都是使用宏构建的。
绑定存储在一个列表中,该列表带有绑定标识符以确保卫生。无论何时出现表达式,绑定都会被提取并在本地反弹。
我确实在我的博客上跟踪了进度,这可能会为可能的问题提供一些见解。
对于设计理念,请查看催生 Linq 的研究项目c omega 。Linq 是 c omega 的更实用或淡化的版本,具体取决于您的观点。
Matt Warren 的博客提供了所有答案(以及一个示例 IQueryable 提供程序实现,让您抢先一步):