此页面概述了 Kotlin 编译器后端,它们负责将 Kotlin 代码的中间表示 (IR) 转换为特定平台的代码。后端是 Kotlin 编译流程的最后阶段,紧随前端和中间件处理阶段之后。
Kotlin 编译器通过专门的后端支持多个目标平台。
来源
所有 Kotlin 后端都共享一组通用的基础设施组件,负责处理 IR 表示、序列化和转换为目标代码。
IR 序列化框架是所有后端的关键组件,它能够将 IR 模块序列化为适合库存储 (KLIB) 和跨模块编译的二进制格式。
来源
IrSerializationSettings 控制序列化的各个方面,该设置用于配置序列化过程。
来源
JVM 后端将 Kotlin IR 转换为 JVM 字节码,支持与 Java 库和框架的互操作性。
关键组件
来源
JavaScript 后端将 Kotlin IR 转换为 JavaScript 代码,支持浏览器和 Node.js 环境。
JavaScript 后端包含针对 JavaScript 目标平台的 Kotlin 库 (KLIB) 的专用序列化功能。
来源
原生后端在无需虚拟机的情况下生成特定平台的原生二进制文件,支持 iOS、Linux、Windows 和 macOS 等各种平台。
来源
WebAssembly 后端将 Kotlin IR 转换为 WebAssembly 二进制代码,使 Kotlin 能够在浏览器和其他 Wasm 环境中以接近原生的性能运行。
来源
WebAssembly 后端包含一个专用的序列化系统,用于序列化和反序列化 WebAssembly 模块。
序列化系统处理各种 WebAssembly 特定结构,如函数、全局变量、类型、内存和指令。
来源
WebAssembly 模块包含以下关键元素:
来源
IR 序列化过程是编译器后端的一个关键部分,它支持 Kotlin 代码在编译单元之间的有效存储、传输和加载。
来源
序列化系统的关键组件包括:
ID 签名 - 声明的唯一标识符
声明表 - 将声明映射到其签名
基于 Protobuf 的序列化 - 使用 Protocol Buffers 进行二进制编码
来源
每个后端都实现了特定于平台的优化,以生成高效的目标代码。
WebAssembly 后端包含以下优化:
外部声明降低 - 将外部声明转换为 WebAssembly 导入
类型系统集成 - 将 Kotlin 类型映射到 WebAssembly GC 类型
来源
后端通过 Gradle 插件和配置与 Kotlin 构建系统集成。
来源
Kotlin 编译器后端是编译流水线的最后阶段,负责将通用的 IR 表示转换为特定于平台的代码。每个后端都实现了专门的序列化、代码生成和优化技术,以为其目标平台生成高效的代码。
这些后端共享用于 IR 序列化和转换的通用基础设施,同时提供特定于平台的特性和优化。这种模块化架构使 Kotlin 能够从单个代码库定位多个平台,从而提供出色的跨平台开发能力。