我并不大明白,提供这样的一个Namespace和其下的类和方法到底有多大的实际意义。当然,你可以用这个东西写一些在.NET的编译器,这样你可以把一些喜欢的语言特性加入到其中,但真的要这样做吗?毕竟这个东西写起来并不是那么方便。
由于提供了方法生成MSIL,所以能够想到的一个用处就在于优化函数性能,但并不代表直接写MSIL就一定能达到优化的目的,因为我始终觉得不大可能有人写的比编译器更好,而那些可能的人,他们正在忙着编写新的编译器或研究新的指令集。
不过这也并不代表Emit就一点用处都没有,正因为可以生成MSIL,这就让人想起在C中直接编写汇编代码一样,应该有差不多的功效。说白了,其实就是可以用来比较方便的手动解循环,毕竟当百万级别的循环嵌套时,循环索引的开销就不能忽略了。我的工作看来是不大可能遇到这样的情景了,不过即便遇到了,并行运算可能是更优先的解决办法,而我也没看到更多关于Emit使用的详细资料,所看到的不过是一些简单的使用示例,不知道有人有相关资料推荐么?
资料推荐暂时没有。但可以回答你Emit这东西很有用,的确主要的应用肯定在性能上,但同时也是架构层面上灵活运用的好东西。不是很合适的例子,想想C#的属性,其实本质上就是get,set函数,但对调用的人来说写起来方便很多了。我不知道目前java怎么处理属性的,但原来的书上介绍java的属性都是写一个get、set函数的。
用Emit动态生成代码,来简化开发人员的操作,因为生产的是MSIL,所以效率比referenc就好了。
Comment by pumaboyd — December 6, 2008 @ 6:42 pm