我的理解是,Xamarin的先进(AOT)编译器直接将Xamarin.iOS应用程序编译成本机ARM程序集代码(How Xamarin works)。
然而,我不明白的是,为什么它需要被称为“提前”,而不是仅仅是一个普通的编译器。Xamarin的AOT编译器和传统的编译器之间有什么区别吗?或者这仅仅是一个营销术语?
发布于 2014-02-10 23:47:42
AOT如何与传统的JIT编译器相比
与Just-in-Time compilation形成鲜明对比的是提前编译。
简而言之,.NET编译器不生成特定于平台的汇编代码,它们生成.NET字节码,这些指令由.NET虚拟机解释。这个字节码是可移植的,任何.NET VM都可以运行它,无论是Windows、Linux还是JavaScript-based implementation。不幸的是,由于代码必须由VM来解释,所以它比处理器本身可以执行的本机代码慢。这就是JIT和AOT进来的地方。
当.NET应用程序启动时,JIT编译器将分析字节码,识别可以通过翻译成本机代码来加速的区域,并对它们进行编译。在执行过程中,编译器还可以识别编译的热路径。
不幸的是,对于.NET、Java和任何从JIT中受益的平台来说,platform服务条款都不允许动态代码生成。由于Xamarin不能在设备和上执行JIT,他们知道他们正在向ARM设备发送,所以他们可以提前运行JIT类型的编译器(AOT)并将其绑定到二进制文件中。
AOT如何与机器代码编译器相比较
如前所述,AOT将部分解释的字节码转换为机器代码。它并不能消除对虚拟机字节码解释器的需求。VM将像它那样运行,但偶尔会看到一条指令,上面写着“执行这段机器代码”。
这仅仅是一个营销术语吗?
不是的。Xamarin在该段中传达的信息是,他们的代码比简单的基于字节代码的语言执行得更快。对于iOS和Android,它们都能够在热代码路径上执行本机代码以提高性能。AOT和JIT是关于他们如何做到这一点的技术细节。
https://stackoverflow.com/questions/21689993
复制相似问题