首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >.NET单片机与单声道单片机的兼容性

.NET单片机与单声道单片机的兼容性
EN

Stack Overflow用户
提问于 2011-05-02 01:40:27
回答 2查看 2.6K关注 0票数 5

我知道.NET和Mono是二进制兼容的,但是给出了一组源代码,csc和mcs会产生完全相同的100%完全相同的二进制CLI可执行文件吗?你能分辨出一个可执行文件是用csc还是mcs编译的?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-05-02 02:49:43

很多东西在规范中没有完全定义,或者是特定于实现的扩展。

未完全指定的示例:

  • 字段类事件的同步语义;这是对ecma规范中的实现的显式开放;它在MS规范中严格定义,但在c# 4.0中使用尚未出现在正式规范中的不同版本,

(从lambda);简单地“定义在别处”(实际上,它不是)

实现扩展的示例:

  • P/Invoke
  • COM接口处理(即如何在接口上调用new )

因此,不能保证在csc或gmcs之间有相同的IL -甚至在csc的不同版本之间也是如此。

更重要的是:根据调试设置、优化是否启用以及定义的某些编译常量(例如debug或TRACE),相同的编译器将生成不同的代码。

票数 5
EN

Stack Overflow用户

发布于 2011-05-02 01:42:01

我确信它们不会从相同的源码产生相同的IL。即使是不同版本的MS C#编译器也不支持。

优化器将以不同的方式工作,并创建略有不同的代码。

我预计复杂功能的实现会有更大的差异,比如迭代器,为lamdas捕获的局部变量,...

然后是任意编译器生成的名称,例如匿名类型。没有理由让它们使用相同的命名方案。

如果也有一些程序集元数据包含编译器的名称和版本,我也不会感到惊讶。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5850142

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档