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

2023-12-30

所以我们都知道 C# 没有类似 C 的宏预处理器(并且有一个很好的线程解释了为什么here https://stackoverflow.com/questions/1369725/why-arent-there-macros-in-c)。但现在 AOP 越来越受欢迎,似乎我们开始使用后处理器做一些我们以前用预处理器做的事情(请记住,我只是刚刚接触过)后锐利 http://www.postsharp.org/所以我可能偏离了基础)。

我非常喜欢 C# 中的属性,但如果出于充分的原因而排除了预处理器(作为前 MFC 用户,我仍然对此表示怀疑,但仍然接受),为什么编译后代码注入比编译前代码注入更好?编译代码注入?


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

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

也就是说,C/C++ 的 AOP 实现确实是一个预编译器 (WeaveC),而 Java 中的实现是一个编译器扩展(因为 Java 编译器有许多 OSS 实现)。

-gael

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么编译后代码注入比预编译代码注入更好? 的相关文章

  • BASIC 中的 C 语言中的 PeekInt、PokeInt、Peek、Poke 等效项

    我想知道该命令的等效项是什么Peek and Poke 基本和其他变体 用 C 语言 类似PeekInt PokeInt 整数 涉及内存条的东西 我知道在 C 语言中有很多方法可以做到这一点 我正在尝试将基本程序移植到 C 语言 这只是使用
  • 调用 McAfee 病毒扫描引擎

    我收到客户的请求 要求使用他们服务器上的 McAfee 病毒扫描将病毒扫描集成到应用程序中 我做了一些调查 发现 McScan32 dll 是主要的扫描引擎 它导出各种看起来有用的函数 我还发现提到了 McAfee Scan Engine
  • 机器Epsilon精度差异

    我正在尝试计算 C 中双精度数和浮点数的机器 epsilon 值 作为学校作业的一部分 我在 Windows 7 64 位中使用 Cygwin 代码如下 include
  • std::list 线程push_back、front、pop_front

    std list 线程安全吗 我假设不是这样 所以我添加了自己的同步机制 我认为我有正确的术语 但我仍然遇到问题 每个函数都由单独的线程调用 Thread1 不能等待 它必须尽可能快 std list
  • std::vector 与 std::stack

    有什么区别std vector and std stack 显然 向量可以删除集合中的项目 尽管比列表慢得多 而堆栈被构建为仅后进先出的集合 然而 堆栈对于最终物品操作是否更快 它是链表还是动态重新分配的数组 我找不到关于堆栈的太多信息 但
  • -webkit-box-shadow 与 QtWebKit 模糊?

    当时有什么方法可以实现 webkit box shadow 的工作模糊吗 看完这篇评论错误报告 https bugs webkit org show bug cgi id 23291 我认识到这仍然是一个问题 尽管错误报告被标记为RESOL
  • 如何在 C++ 中标记字符串?

    Java有一个方便的分割方法 String str The quick brown fox String results str split 在 C 中是否有一种简单的方法可以做到这一点 The 增强分词器 http www boost o
  • 对类 static constexpr 结构的未定义引用,g++ 与 clang

    这是我的代码 a cp p struct int2 int x y struct Foo static constexpr int bar1 1 static constexpr int2 bar2 1 2 int foo1 return
  • 方程“a + bx = c + dy”的积分解

    在等式中a bx c dy 所有变量都是整数 a b c and d是已知的 我如何找到整体解决方案x and y 如果我的想法是正确的 将会有无限多个解 由最小公倍数分隔b and d 但我只需要一个解决方案 我可以计算其余的 这是一个例
  • 用于解析 Rust 中的匹配臂的递归宏

    我正在尝试编写一个宏来将一组规则扩展为执行标记匹配的代码 但无法在不导致宏扩展错误的情况下生成正确的代码 我知道我可以通过其他方式处理这个问题 但这里的关键问题不是如何解析令牌 而是如何编写一个可以使用匹配臂递归扩展令牌树的宏 这个想法是我
  • 在 Unity 中实现 Fur with Shells 技术

    我正在尝试在 Unity 中实现皮毛贝壳技术 http developer download nvidia com SDK 10 5 direct3d Source Fur doc FurShellsAndFins pdf Fins 技术被
  • 两个静态变量同名(两个不同的文件),并在任何其他文件中 extern 其中一个

    在一个文件中将变量声明为 static 并在另一个文件中进行 extern 声明 我认为这会在链接时出现错误 因为 extern 变量不会在任何对象中看到 因为在其他文件中声明的变量带有限定符 static 但不知何故 链接器 瑞萨 没有显
  • C# - 当代表执行异步任务时,我仍然需要 System.Threading 吗?

    由于我可以使用委托执行异步操作 我怀疑在我的应用程序中使用 System Threading 的机会很小 是否存在我无法避免 System Threading 的基本情况 只是我正处于学习阶段 例子 class Program public
  • 空指针与 int 等价

    Bjarne 在 C 编程语言 中写道 空指针与整数零不同 但 0 可以用作空指针的指针初始值设定项 这是否意味着 void voidPointer 0 int zero 0 int castPointer reinterpret cast
  • 复制目录下所有文件

    如何将一个目录中的所有内容复制到另一个目录而不循环遍历每个文件 你不能 两者都不Directory http msdn microsoft com en us library system io directory aspx nor Dir
  • 如何实例化 ODataQueryOptions

    我有一个工作 简化 ODataController用下面的方法 public class MyTypeController ODataController HttpGet EnableQuery ODataRoute myTypes pub
  • 在 WPF 中使用 ReactiveUI 提供长时间运行命令反馈的正确方法

    我有一个 C WPF NET 4 5 应用程序 用户将用它来打开某些文件 然后 应用程序将经历很多动作 读取文件 通过许多插件和解析器传递它 这些文件可能相当大 gt 100MB 因此这可能需要一段时间 我想让用户了解 UI 中发生的情况
  • 相当于Linux中的导入库

    在 Windows C 中 当您想要链接 DLL 时 您必须提供导入库 但是在 GNU 构建系统中 当您想要链接 so 文件 相当于 dll 时 您就不需要链接 为什么是这样 是否有等效的 Windows 导入库 注意 我不会谈论在 Win
  • 使用特定参数从 SQL 数据库填充组合框

    我在使用参数从 sql server 获取特定值时遇到问题 任何人都可以解释一下为什么它在 winfom 上工作但在 wpf 上不起作用以及我如何修复它 我的代码 private void UpdateItems COMBOBOX1 Ite
  • 对于某些 PDF 文件,LoadIFilter() 返回 -2147467259

    我正在尝试使用 Adob e IFilter 搜索 PDF 文件 我的代码是用 C 编写的 我使用 p invoke 来获取 IFilter 的实例 DllImport query dll SetLastError true CharSet

随机推荐

  • 如何修复错误“无法使用类型为 ((AnyObject!, NSError!) -> Void) 的参数列表调用 'findObjectInBackgroundWithBlock'

    对于下面的代码 得到Can t invoke findObjectInBackgroundWithBlock with an argument list of type AnyObject NSError gt Void 错误并且无法在后台
  • 如何仅使用 numpy 和 PIL 检测图像翻译

    给定两个图像 我需要检测两者之间是否存在平移偏移 我只能使用 numpy 和 PIL 这个帖子 https stackoverflow com questions 37584977 translate image using pil展示了如
  • 返回其自身类型的方法的接口

    我有一个情况 我正在上课 class Foo Foo Bar return new Foo 现在我想为它创建一个界面 class IFoo Bar 问号应该用什么代替 每个类都应该返回它自己的类型 而不是 Foo 下面的解决方案有效 但看起
  • 在某些视图中隐藏渲染页面 Razor

    在我的 mvc 应用程序中 我制作了一个页脚并像这样嵌入它 div class off canvas wrap div class inner wrap Html Action Menu Site div div
  • Android 无需开启蓝牙即可进行蓝牙扫描

    我正在创建一个具有低功耗蓝牙的应用程序 我发现了一件有趣的事情 我知道对于API level 23或更高版本 除了蓝牙之外 您还需要授予位置权限才能进行扫描 但我不知道即使从设置中关闭蓝牙也可以扫描 BLE 设备 我关闭了蓝牙 但定位功能仍
  • 如何从队列中获取特定元素?

    Unlike ArrayList 没有get int index 中的方法Queue检索指定位置的元素 有人请告诉我如何实现这一目标Queue Thanks 通过索引访问元素不是队列概念的一部分 如果您需要通过索引访问元素 您需要一个列表
  • MediaRecorder 在 Android 上启动视频捕获时出现问题

    我正在尝试开发一个应用程序 除其他外 它还可以录制用户的视频 因此 如果有前置摄像头 我需要使用前置摄像头捕获视频 我构建了一个相机预览 效果很好 我使用 Android How To Sites 构建了 MediaRecorder 并进行
  • Django:带条件的 ModelForm

    我正在尝试创建一个表单变量 默认玩家等级为 0 他可以更改名字 当他达到1级后 他可以更改名字和头像 当他达到3级时 他可以更改名字 头像和职业 ETC 模型 py class Player models Model level model
  • 是否允许使用多个非类型模板参数包?

    temp param p11 说 在 N4527 中 函数模板的模板参数包后面不应跟有另一个模板参数 除非该模板参数可以从函数模板的参数类型列表推导出来或具有默认参数 在这样的背景下non type模板参数包 不能有默认参数 那么到底需要为
  • C# 图表从数据表添加多个系列

    我从数据库中检索了几个大小各异的数据表 这 2 个中的一个只是一个示例 See the structure here I managed to create the 2 different series and have them show
  • 使用流添加到 azure blob 存储

    我正在尝试添加一个IFormFile通过 net core Web API 接收到 azure blob 存储 这些是我设置的属性 static internal CloudStorageAccount StorageAccount gt
  • C# 泛型的反约束

    灵感来自Phil Haack 对 null 或空合并的尝试 http haacked com archive 2010 06 16 null or empty coalescing aspx 我正在尝试编写一些扩展方法string对象 以及
  • 使用 jQuery/ajax 进行基本身份验证

    我正在尝试创建基本身份验证页面 其中我的表单包含三个字段 username password 拨款类型 提交表单时 我只想以 JSON 格式在 HTML 上显示服务器返回的响应 我对 Web 服务的 AJAX 调用也需要授权要设置的标题 但
  • 如何使用 Java 正则表达式捕获并重用匹配项?

    我试图记住在 Java 中进行查找替换正则表达式匹配的正确符号 说我有绳子 String s My name is Eric and I have a bee called Eric and a fish called Wanda 我想做如
  • 如何设置PyQt5 Qtimer以指定的时间间隔更新?

    我想根据 15 FPS 的帧速率更新 Qtimer 所以我的 def update 每 0 06 秒接收一个信号 你能帮助我吗 我在下面附加了一个代码示例 其中我的 setInterval 输入是 1 15 但我不知道这是否是正确的方法 谢
  • Pg-promise 性能提升:冲突

    我正在尝试遵循 pg promise 库作者推荐的性能模式here https github com vitaly t pg promise wiki Performance Boost 基本上 Vitaly 建议使用插入来这样做 var
  • 将非泛型集合转换为泛型集合的最佳方法

    将非泛型集合转换为泛型集合的最佳方法是什么 有没有办法 LINQ 呢 我有以下代码 public class NonGenericCollection CollectionBase public void Add TestClass a L
  • 将 DateTime 序列化为特定格式的 XML .net

    我有大量自动生成的类 这些类使用 NET XmlSerializer 序列化为 XML 或从 XML 反序列化 其中一些类包含 DateTime 属性 我有一个序列化的要求all使用特定格式的 DateTime 属性 例如 u System
  • 如何在 x86 汇编中调用 fgets?

    根据的文档fgets http www cplusplus com reference clibrary cstdio fgets 该函数采用三个参数 char 保存输入的字符串 int 一个整数 表示要读取的最大字符数 FILE a FI
  • 为什么编译后代码注入比预编译代码注入更好?

    所以我们都知道 C 没有类似 C 的宏预处理器 并且有一个很好的线程解释了为什么here https stackoverflow com questions 1369725 why arent there macros in c 但现在 A