菜单

编译器后端

相关源文件

此页面概述了 Kotlin 编译器后端,它们负责将 Kotlin 代码的中间表示 (IR) 转换为特定平台的代码。后端是 Kotlin 编译流程的最后阶段,紧随前端和中间件处理阶段之后。

编译器后端架构概述

Kotlin 编译器通过专门的后端支持多个目标平台。

来源

通用后端基础设施

所有 Kotlin 后端都共享一组通用的基础设施组件,负责处理 IR 表示、序列化和转换为目标代码。

IR 序列化框架

IR 序列化框架是所有后端的关键组件,它能够将 IR 模块序列化为适合库存储 (KLIB) 和跨模块编译的二进制格式。

来源

序列化设置

IrSerializationSettings 控制序列化的各个方面,该设置用于配置序列化过程。

来源

JVM 后端

JVM 后端将 Kotlin IR 转换为 JVM 字节码,支持与 Java 库和框架的互操作性。

关键组件

  • JVM IR 代码生成
  • JVM 特定优化
  • JVM 特定元数据的序列化

来源

JavaScript 后端

JavaScript 后端将 Kotlin IR 转换为 JavaScript 代码,支持浏览器和 Node.js 环境。

JavaScript KLIB 序列化

JavaScript 后端包含针对 JavaScript 目标平台的 Kotlin 库 (KLIB) 的专用序列化功能。

来源

原生后端

原生后端在无需虚拟机的情况下生成特定平台的原生二进制文件,支持 iOS、Linux、Windows 和 macOS 等各种平台。

原生序列化组件

来源

WebAssembly 后端

WebAssembly 后端将 Kotlin IR 转换为 WebAssembly 二进制代码,使 Kotlin 能够在浏览器和其他 Wasm 环境中以接近原生的性能运行。

WebAssembly 后端架构

来源

WebAssembly 序列化系统

WebAssembly 后端包含一个专用的序列化系统,用于序列化和反序列化 WebAssembly 模块。

序列化系统处理各种 WebAssembly 特定结构,如函数、全局变量、类型、内存和指令。

来源

WebAssembly 模块结构

WebAssembly 模块包含以下关键元素:

来源

IR 序列化过程

IR 序列化过程是编译器后端的一个关键部分,它支持 Kotlin 代码在编译单元之间的有效存储、传输和加载。

序列化工作流程

来源

通用序列化功能

序列化系统的关键组件包括:

  1. ID 签名 - 声明的唯一标识符

  2. 声明表 - 将声明映射到其签名

  3. 基于 Protobuf 的序列化 - 使用 Protocol Buffers 进行二进制编码

来源

特定后端优化

每个后端都实现了特定于平台的优化,以生成高效的目标代码。

WebAssembly 特定优化

WebAssembly 后端包含以下优化:

  1. 外部声明降低 - 将外部声明转换为 WebAssembly 导入

  2. 类型系统集成 - 将 Kotlin 类型映射到 WebAssembly GC 类型

来源

构建与集成

后端通过 Gradle 插件和配置与 Kotlin 构建系统集成。

来源

结论

Kotlin 编译器后端是编译流水线的最后阶段,负责将通用的 IR 表示转换为特定于平台的代码。每个后端都实现了专门的序列化、代码生成和优化技术,以为其目标平台生成高效的代码。

这些后端共享用于 IR 序列化和转换的通用基础设施,同时提供特定于平台的特性和优化。这种模块化架构使 Kotlin 能够从单个代码库定位多个平台,从而提供出色的跨平台开发能力。