所以我们都知道 C# 没有类似 C 的宏预处理器(并且有一个很好的线程解释了为什么here https://stackoverflow.com/questions/1369725/why-arent-there-macros-in-c)。但现在 AOP 越来越受欢迎,似乎我们开始使用后处理器做一些我们以前用预处理器做的事情(请记住,我只是刚刚接触过)后锐利 http://www.postsharp.org/所以我可能偏离了基础)。
我非常喜欢 C# 中的属性,但如果出于充分的原因而排除了预处理器(作为前 MFC 用户,我仍然对此表示怀疑,但仍然接受),为什么编译后代码注入比编译前代码注入更好?编译代码注入?
5年前设计PostSharp时选择后编译的原因是:
- 语言不可知论。
- 与高级语言(每隔一年进行一次重大更新)相比,MSIL 具有更稳定的规范。
- 大多数时候,MSIL 是处理方面时所需的抽象级别。您不需要知道所有等效的构造(想想 f 'using' 和 'try-finally')。
- 在 2008 年之前,没有人成功地生产出像样的 C# 编译器。 Mono所遇到的困难已经足够令人印象深刻了,即使他们现在已经迎头赶上了。
- 处理二进制文件似乎比处理源代码快得多。
- 处理二进制程序集使得执行它成为可能——正在处理的程序集可以自我转换。在 PostSharp Laos 首次发布之前,这是闻所未闻的。
也就是说,C/C++ 的 AOP 实现确实是一个预编译器 (WeaveC),而 Java 中的实现是一个编译器扩展(因为 Java 编译器有许多 OSS 实现)。
-gael
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)