use*_*667 11 c# linq compiler-construction language-design
我一直在寻找Skeet先生关于如何重新实现LINQ的博客.
特别是,他声明代码:
var list = (from person in people
where person.FirstName.StartsWith("J")
orderby person.Age
select person.LastName)
.ToList();
Run Code Online (Sandbox Code Playgroud)
转换为LINQ库提供的扩展方法的方法:
people.Where(person => person.FirstName.StartsWith("J"))
.OrderBy(person => person.Age)
.Select(person => person.LastName)
Run Code Online (Sandbox Code Playgroud)
我的问题是,如何用图书馆给这些大人物留下足够的印象,让他们允许语言改变以支持图书馆?或者在LINQ出现之前这些词已经被保留了?
抓住Mono C#编译器 - 它是开源的,你可以做你想要的任何语言修改和.net支持,例如,使用枚举作为通用约束,创建返回值类型(public ref int Max(ref int x, ref int y) { if (x>y) return ref x; else return ref y; })的引用的方法,具有受保护或内部可见性等.
当然,你正在创建一个不兼容的C#派生词,但如果你把它推得足够硬,那么人们可能会喜欢它.
另一个选择:启动博客,为它提出一些非常好的用例,可能是.net语言的示例实现或使用自定义编译器,显示它解决了什么问题以及为什么这将是一个很大的胜利,证明了指定,设计,开发,测试和记录功能的成本.