为什么编译后代码注入比预编译代码注入更好?

dka*_*man 5 c# macros aop postsharp c-preprocessor

所以,我们都知道,C#没有一个类似C的宏预处理器(和有一个很好的线程为什么在这里).但是现在AOP正在获得牵引力,似乎我们开始使用后处理器(我们曾经使用过预处理器)做的事情(请记住,我只是在使用PostSharp,所以可能不在).

我是C#中属性的忠实粉丝,但是如果一个预处理器被遗漏了很多原因(作为一个前MFC用户,我仍然质疑但仍接受)为什么编译后代码注入比预先更好编译代码注入?

Gae*_*eur 6

我在5年前设计PostSharp时选择后编译的原因是:

  1. 语言不可知论.
  2. 与高级语言(每两年进行一次非平凡更新)相比,MSIL具有更稳定的规范.
  3. 大多数情况下,MSIL是处理方面时所需的抽象级别.您不需要知道所有等效结构(想想'使用'和'try-finally').
  4. 在2008年之前,没有人成功地生成了一个像样的C#编译器.Mono遇到的困难足够令人印象深刻,即使他们现在已经赶上了.
  5. 处理二进制文件似乎比处理源代码要快得多.
  6. 处理二进制程序集可以执行它 - 正在处理的程序集可以自我转换.在PostSharp老挝首次发布之前,这是闻所未闻的.

也就是说,AOP for C/C++的实现确实是预编译器(WeaveC),Java中的实现是编译器扩展(出于很多原因,Java编译器有许多OSS实现).

-gael