gpt4 book ai didi

llvm - MSIL 和 LLVM 位码有什么区别?

转载 作者:搜寻专家 更新时间:2023-10-31 22:10:29 24 4
gpt4 key购买 nike

我是 .Net 的新手,我想先了解基础知识。 MSIL 和 LLVM 位码有什么区别?

最佳答案

LLVM bitcode 和 MSIL 都是 intermediate languages .从本质上讲,它们是通用汇编代码语言:不像大多数源语言(例如 Swift、C#)那样高级,但也不像真正的汇编语言(例如 ARM、x86)那样低级。这两种语言之间存在许多技术实现差异,但大多数开发人员不需要了解这些细节*。他们只需要知道如何在各自平台的分发模型中使用它们。


LLVM 位码格式是 the intermediate representation code used within the LLVM compiler 的序列化版本.编译器的“前端”将源语言(如Swift)翻译成LLVM bitcode,然后编译器的“后端”将bitcode翻译成目标指令集(如ARM机器码)。 (注意:此答案的先前版本暗示 LLVM 位码与处理器无关。事实并非如此,因为源语言取决于目标处理器。)

Apple 允许 iOS 开发人员以完全编译的 ARM 代码形式提交他们的应用程序 or as LLVM bitcode ,其中后者:

[...] will allow Apple to re-optimize your app binary in the future without the need to submit a new version of your app to the store.

本质上,您在开发环境中运行 LLVM 前端,将位码传递给 Apple,后者在其服务器上运行 LLVM 后端。此过程称为提前 (AOT) 编译(the Wikipedia article 对于非位码情况是否也是 AOT 或是否只是“标准”编译有两种看法)。

但是无论您是否使用 bitcode,iOS 最终用户始终会以 ARM 机器代码的形式获取应用。


.NET 中的情况有些不同。大多数 .NET 代码都编译为 MSIL,打包在名为assemblies 的文件中。最终用户设备上的 .NET 运行时加载并执行程序集,在运行时将 MSIL 编译为设备处理器的机器代码。这称为即时 (JIT) 编译

通常,MSIL 与处理器无关,因此大多数开发人员可以将 .NET 应用程序视为与处理器无关。但是,在最终用户通过 JIT 运行应用程序之前,可以通过多种方式打包特定于处理器的代码:

  1. 一些工具,例如 Native Image Generator.NET Native , 允许 AOT 编译。事实上,上传到 Microsoft Store 的通用 Windows 平台 (UWP) 应用程序是 AOT 编译的 - 您将应用程序的 MSIL 版本提交给 Microsoft,然后他们的服务器使用 .NET Native 为 Windows 10 支持的各种架构编译它。

  2. 也可以在程序集本身中包含 native 代码;这些叫做mixed assemblies .

  3. 如果源语言使用“不安全”操作(例如,pointer math in C#),MSIL 本身可以是处理器特定的。

但这些通常是异常(exception)情况,而不是规则。通常,.NET 应用程序以 MSIL 形式分发,最终用户的设备是生成 native 代码的地方。


总结一下:

  • LLVM 位码是特定于处理器的,但并不像实际机器码那样低级。 Apple 允许 iOS 开发人员以位码形式提交应用程序,以便在可以引入优化时允许 future 重新编译。最终用户运行 native 可执行文件。

  • MSIL 通常与处理器无关。最终用户通常运行此与处理器无关的代码,而 .NET 在运行时将 MSIL 编译为 native 代码。但是,在某些情况下,应用的部分或全部可能是 native 代码。


* 当然,如果您对技术细节感兴趣,这里有标准for LLVM bitcodefor MSIL, under its ECMA name CIL .我对后者有一定的了解;粗略浏览前者后,最显着的技术差异是内存模型:LLVM 位码是基于寄存器的,MSIL/CIL 使用评估堆栈。

关于llvm - MSIL 和 LLVM 位码有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47622113/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com