KCLVM 整体架构

Kusion 配置语言 (KCL, Kusion Configuration Language) 是一种开源配置语言,主要用于 Kusion Stack 开放协同技术栈。并且 KCL 是一种基于声明性和面向对象编程 (OOP) 范式等概念,用于配置和策略场景的静态类型语言。

KCL 语言最早采用 Python 语言实现,逐渐采用 Rust 语言重新实现语言核心,同时提供Go语言等其他语言的SDK。

KCLVM 仓库:https://github.com/KusionStack/KCLVM

KCLVM 编译器实现以 Spec 作为驱动(主要包含 KCL 语言规范,KCL 多语言集成规范、KCL OpenAPI 规范),KCL 是一个编译型的语言,整体保持与常规语言编译器相同的三段式架构,并在其中借助了 LLVM-IR 作为 KCL 连接 Native/WASM 代码的中间纽带,主要有以下 3 个核心工作:

  • KCL 代码到 LLVM-IR 的翻译:通过遍历 KCL AST,根据 KCL 语言规范生成相应的 LLVM-IR 代码,相当于用户态代码。
  • KCL Runtime Lib:运行时辅助函数库,提供运行时 KCL 的值/类型计算、内存、上下文管理、内置库和插件库支持,相当于系统态代码。
  • 用户态与系统态代码链接与执行:将用户态代码与系统态代码链接为一个动态链接库/WASM Module,最终通过统一的 Runner 模块执行编译后的 KCL 代码。

此外 KCL 在语义检查器和和 Plugin 这块做了增强支持:

  • Resolver
    • 静态类型推导与检查:可以在编译时进行类型推导和检查,避免运行时类型检查开销,可以作为 IDE 插件跳转、补全等功能支持和语义 API 构建(如 schema 模型查询、依赖分析等) 的良好基础
    • 配置图合并:在编译过程对配置数据依赖图进行构建与合并,最终运行时仅进行少量计算即可得到最终的解
    • 语义依赖图:通过内建语义依赖图,KCL 可以完成配置变更的依赖分析, 并且根据配置变更结果进行增量编译,对不变的配置进行缓存,可以提升端到端编译性能
    • Schema 为中心的面向对象特性:KCL 语言只保留了单继承的语法。同时 schema 可以通过 mixin 和 protocol 等特性混入复用相同的代码片段,对于不同的能力配套,可以通过 mixin 机制编写,并通过 mixin 声明的方式“混入”到不同的结构体中
  • Plugin: 可以使用 Python/Go 编写扩展库,主要包含一些领域能力,如访问网络或数据库等。