ios – Xamarin Ahead-of-Time(AOT)编译器与普通编译器

前端之家收集整理的这篇文章主要介绍了ios – Xamarin Ahead-of-Time(AOT)编译器与普通编译器前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我的理解是Xamarin的Ahead-of-Time(AOT)编译器直接将Xamarin.iOS应用程序编译为本机ARM汇编代码 (How Xamarin works).

然而,我没有得到的是为什么它需要被称为“Ahead-of-Time”而不仅仅是一个普通的编译器. Xamarin的AOT编译器和传统编译器之间有什么区别,还是仅仅是一个营销术语?

解决方法

AOT如何与传统的JIT编译器进行比较

Ahead-of-Time(AOT)编译与Just-in-Time compilation(JIT)形成对比.

简而言之,.NET编译器不生成特定于平台的汇编代码,它们生成.NET字节码,这些指令由.NET虚拟机解释.这个字节码是可移植的,任何.NET VM都可以运行它,无论是Windows Phone,Linux上的Mono还是JavaScript-based implementation.不幸的是,因为代码必须由VM解释它比本机代码慢,可以由处理器本身.这就是JIT和AOT的用武之地.

当.NET应用程序启动时,JIT编译器会分析字节码,通过转换为本机代码来识别可以加速的区域,并编译它们.在执行期间,编译器还可以识别用于编译的热路径.

不幸的是,对于.NET,Java以及任何可以从JIT中受益的平台,App Store服务条款都不允许动态代码生成.由于Xamarin无法在设备上执行JIT,并且他们知道它们正在运送到ARM设备,因此它们可以提前运行JIT类型的编译器(AOT)并将其捆绑到二进制文件中.

AOT如何与机器代码编译器进行比较

如上所述,AOT将解释的字节码的一部分转换为机器代码.它不会消除对虚拟机字节码解释器的需求. VM将按原样运行,但偶尔会看到一条说明“执行此机器代码块”的指令.

这只是一个营销术语吗?

没有.Xamarin在该段中传达的信息是,他们的代码比简单的基于字节码的语言执行得更快.对于iOS和Android,他们都能够在热代码路径上执行本机代码以提高性能. AOT和JIT这两个术语是关于他们如何做到这一点的技术细节.

猜你在找的iOS相关文章