MSIL文件是否完全跨平台?

时间:2014-08-29 18:33:48

标签: .net vb.net

可能相关的问题:

我来自跨平台语言。我在Python方面相当不错,而且使用Java非常有效。我知道.pyc文件或多或少会在任何运行相同版本Python的系统上运行,并且.jar文件或多或少会在运行Java的任何机器上运行(不包括文字烤面包机)。我想知道.msil文件在.NET环境中是否会起作用。

所以要完全推断我的问题:

虽然x86目前是主流架构,但在ARM上运行的Windows机器。 编译为MSIL的Visual Basic文件(或者更一般地说,使用.NET框架的文件)是否会在基于ARM的Windows计算机上本地运行,例如Windows Phone或其中一个RT平板电脑。 编辑:还想知道这些文件是否会在Mono中本机运行,因为我刚刚了解到这是一件事。 编辑:通常更好地发布以后编译的代码或预编译的代码?

如果我不理解MSIL文件是什么,我道歉。我下个季度要为我的课程取消tetbook,我可能只是误解了MSIL 是什么

1 个答案:

答案 0 :(得分:3)

IL是中间语言。没有处理器能够理解VB.NET或C#编译器生成的MSIL。不是x86 proc或ARM。

这种中间语言需要将JIT(即时)编译成处理器实际可以理解的机器指令。在这种情况下,JIT是.NET Framework的公共语言运行时的一部分。因此,如果该平台有JIT / CLR,那么是的,您可以在其上执行MSIL,但只能通过CLR执行。这也称为虚拟机。

也就是说,用于更流行的平台的CLR / JIT,如x86,x86-64和ARM(虽然WoA在很多方面受到限制),甚至是Itanium。

还有一些其他事情需要考虑。 C#和VB.NET没有编译到MSIL,这就是他们传统上的工作方式。在某些情况下,他们没有。例如,Xamarin编译器将使用提前编译将C#编译为ARM,直接从C#for iOS生成ARM代码,没有"中间"那种情况下的语言。


  

通常更好的方法是运送代码以便稍后编译,或提前编译目标平台吗?

这完全取决于您的工具支持以及您正在尝试开发的内容。从历史上看,C#和VB.NET只能编译到MSIL。 Microsoft没有制作将C#编译为本机代码的编译器。 Xamarin专门针对ARM iOS设备。据我所知,你不能为iOS以外的任何平台进行AoT编译。从理论上讲,JIT编译有一些显着的优点。例如,英特尔酷睿2双核处理器和第四代i7之间存在很多差异。 i7有很多指令集和功能,Core 2 Duo没有。然后,JIT可以生成非常优化的CPU指令,这些指令不能移植到其他CPU,即使它们是相同的架构。

Windows Store应用程序是另一回事。虽然可以使用C#和VB.NET开发它们,但用户可以使用最近发布的.NET Native从为其架构预编译的Store下载它们。