KCL v0.9.0 重磅发布——小体积、高性能、更丰富的生态集成

15a80ca765cb61a1019f73905d34e69a.png

KCL 团队很高兴地宣布 KCL v0.9.0 新版本现在已经可用!本次发布为大家带来了三方面的重点更新

  • 使用性能更好、功能更完善和错误更少的 KCL 语言、工具链和 IDE 提升代码编写体验和效率

  • 更加全面丰富的标准库、三方库以及社区生态集成,涵盖不同应用场景和需求

  • 更丰富的多语言 SDK 和插件,无缝地集成不同编程语言和开发环境

KCL 是一个 CNCF 基金会托管的基于约束的记录及函数语言,期望通过成熟的编程语言技术和实践来改进对大量繁杂配置比如云原生 Kubernetes 配置场景的编写,致力于构建围绕配置的更好的模块化、扩展性和稳定性,更简单的逻辑编写,以及更简单的自动化和生态工具集成。

⚡️ 性能提升

运行性能

在 KCL v0.9 新版本中,引入了一个新的快速运行模式,可以通过设置 KCL_FAST_EVAL=1 环境变量开启,从而提升启动速度和运行时性能。

对于使用 Schema 的配置(比如 k8s 三方库),相比于之前的版本可以获得 3 倍左右的性能提升。对于简单的不使用 Schema 的配置,输出 YAML 性能经测试超过 helm template 和 kustomize build 等使用 YAML 和 Go Template 的工具。

IDE 性能

KCL IDE 在大型项目上针对语义分析部分进行了进一步的增量编译和性能优化,对于 400 个文件左右的 KCL 项目, IDE 端到端响应时间可以减小为之前版本的 20%

🔧  核心功能

语言
  • 字符串插值支持类似 Shell 的 \${} 转义功能取消插值

world = "world"
hello_world_0 = "hello ${world}"  # hello world
hello_world_1 = "hello \${world}" # hello ${world}
  • typeof 函数新增 Schema 类型的支持用于区分 schema 类型和实例

schema Foo:
    bar?: str

foo = Foo {}
type_schema = typeof(foo) # schema
type_type = typeof(Foo) # type
  • Schema 的 instances() 方法新增关键字参数 full_pkg 参数用于读取所有代码中对应 Schema 的实例

schema Person:
    name: str

alice = Person {name = "Alice"}
all_persons = Person.instances(True)
  • 去除 bool 类型和 int 类型隐式比较的功能 0 < True

  • 去除 list 类型的比较功能 [0] < [1]

  • as 关键字增加类型断言失败功能

  • 优化 lambda 函数和配置代码块 {} 在不同作用域的闭包变量捕获逻辑,更符合直觉

工具链
  • kcl run 支持使用 --format toml 输出 TOML 格式的配置

  • kcl mod add 支持使用 --oci 和 --git 添加私有三方 OCI Registry 和 Git 仓库的依赖

  • kcl import 支持从整个 Go Package 导入为 KCL Schema

  • kcl import 支持导入带 YAML Stream --- 格式的文件

  • kcl import 支持从 TOML 文件导入为 KCL 配置

  • kcl clean 支持清理外部依赖和编译缓存

  • kcl mod init 支持 --version 标签设置 KCL 新建模块的版本

  • kcl runkcl mod add 和 kcl mod pull 等命令支持通过本地 Git 对私有仓库进行访问

IDE
  • 支持多个 Quick Fix 修复选项

  • 支持 kcl.mod 和 kcl.mod.lock 文件的高亮

  • IDE 支持部分语法悬停高亮

  • 支持 import 语句对外部依赖的补全

  • 支持函数符号的高亮和 Inlay Hints 显示缺省的变量类型

256a4599b36229b723e6e1a9c26f43ea.png

API
  • Override API 支持设置配置覆盖时使用不同的属性运算符 := 和 +=

  • Go API 支持 prototext 格式和 KCL schema 输出为 KCL 配置

  • Go API 支持任意 Go Type 和 Go Value 序列化为 KCL Schema 和配置


📦️ 标准库与三方库
标准库
  • 新增标准库 file 用于文件 IO 操作,比如从 YAML 读取配置并进行配置合并操作

import file
import yaml
import json_merge_patch as p

config = p.merge(yaml.decode(file.read("deployment.yaml")), {
    metadata.name = "override_value"
})

其他更多 file 模块函数详见:https://www.kcl-lang.io/docs/reference/model/file

  • 新增标准库 template 用于模版配置编写

import template

_data = {
    name = "handlebars", 
    v = [ { a = 1 }, { a = 2 } ], 
    c = { d = 5 },
    g = { b = [ { aa = { bb = 55} }, { aa = { bb = 66} } ] },
    people = [ "Yehuda Katz", "Alan Johnson", "Charles Jolley" ]
}

content = template.execute("""\
Hello world from {{name}}

{{#each v}}
{{this.a}}
{{/each}}
{{ c.d }}
{{#each people}}
{{ this }}
{{/each}}
{{#each g.b}}
{{this.aa.bb}}
{{/each}}
""", _data)
  • 新增标准库 runtime 可以用于捕获运行时异常,并用于 kcl test 工具测试异常用例

import runtime

schema Person:
    name: str
    age: int

    check:
        0 <= age <= 120, "age must be in [1, 120], got ${age}"

test_person_check_error = lambda {
    assert runtime.catch(lambda {
        p = Person {name = "Alice", age: -1}
    }) == "age must be in [1, 120], got -1"
}
三方库

KCL 模型数量新增至 313 个, 主要包含如下更新:

  • k8s 发布 1.30 版本

  • argo-cd 发布 0.1.1 版本

  • argo-workflow 0.0.3 版本

  • istio 发布 1.21.2 版本

  • victoria-metrics-operator 发布 0.45.1 版本

  • cert-manager 发布 0.1.2 版本

  • cilium 发布 0.1.1 版本

  • Longhorn 发布 0.0.1 版本

  • jsonpatch 发布 0.0.5 版本,支持 rfc6901Decode

  • 新增 difflib 三方库,支持比较配置差异

  • 新增 argo-cd-order 用于排序 argocd 同步操作的资源顺序

  • 新增 cluster-api 相关的模型库:包括 cluster-apicluster-api-provider-metal3cluster-api-provider-gcpcluster-api-addon-provider-helmcluster-api-addon-provider-awscluster-api-provider-azure 等

☸️ 生态集成

  • 修复 Argo KCL 插件并发 Sync 报错的问题

  • Flux KCL Controller 发布 https://github.com/kcl-lang/flux-kcl-controller,目前支持 OCI 和 Git 配置进行 GitOps

  • KCL 正式登陆 Crossplane 函数市场并发布 v0.9.0 版本 https://github.com/crossplane-contrib/function-kcl,Star 数和采用量超过 CUE, OPA/Rego, Pkl 和 CEL 等其他 DSL,后续会进一步作为 Crossplane 官方配置方案。

apiVersion: apiextensions.crossplane.io/v1
kind: Composition
metadata:
  name: example
spec:
  compositeTypeRef:
    apiVersion: example.crossplane.io/v1beta1
    kind: XR
  mode: Pipeline
  pipeline:
    - step: basic
      functionRef:
        name: function-kcl
      input:
        apiVersion: krm.kcl.dev/v1alpha1
        kind: KCLInput
        source: |
          # Read the XR
          oxr = option("params").oxr
          # Patch the XR with the status field
          dxr = oxr | {
              status.dummy = "cool-status"
          }
          # Construct a AWS bucket
          bucket = {
              apiVersion = "s3.aws.upbound.io/v1beta1"
              kind = "Bucket"
              metadata.annotations: {
                  "krm.kcl.dev/composition-resource-name" = "bucket"
              }
              spec.forProvider.region = option("oxr").spec.region
          }
          # Return the bucket and patched XR
          items = [bucket, dxr]
    - step: automatically-detect-ready-composed-resources
      functionRef:
        name: function-auto-ready

此外,可以在这里找到更多的关于 KCL 和其他生态项目一起使用的真实用例

  • https://github.com/mindwm/mindwm-gitops

  • https://github.com/vfarcic/crossplane-kubernetes

  • https://github.com/giantswarm/crossplane-gs-apis/blob/main/crossplane.giantswarm.io/xnetworks/package/compositions/peered-vpc-network.yaml

  • https://github.com/upbound/configuration-aws-eks/blob/main/apis/composition-kcl.yaml

🧩 多语言 SDK 和插件

多语言 SDK

KCL 多语言 SDK 新增至 7 个, 目前主要支持 Rust, Go, Java, .NET, Python, Node.js 和 WASM,无需额外安装 KCL 命令行即可使用,安装体积优化为之前版本的 90%,且不需要复杂的系统依赖。

此外,不同的 SDK 均提供了相同的 API,主要包括代码运行,代码分析,类型解析和添加外部依赖等操作,下面以 Java 和 C# SDK 为例

  • Java

import com.kcl.api.API;
import com.kcl.api.Spec.ExecProgram_Args;
import com.kcl.api.Spec.ExecProgram_Result;

public class ExecProgramTest {
    public static void main(String[] args) throws Exception {
        API api = new API();
        ExecProgram_Result result = api
                .execProgram(ExecProgram_Args.newBuilder().addKFilenameList("path/to/kcl.k").build());
        System.out.println(result.getYamlResult());
    }
}
  • C#

namespace KclLib.Tests;

using KclLib.API;

public class KclLibAPITest
{
    public static void Main()
    {
        var execArgs = new ExecProgram_Args();
        execArgs.KFilenameList.Add("path/to/kcl.k");
        var result = new API().ExecProgram(execArgs);
        Console.WriteLine(result.YamlResult);
    }
}

更多其他 SDK 安装和使用方式详见:https://github.com/kcl-lang/lib

多语言插件

KCL 多语言插件新增至 3 个,目前主要支持 Go, Python 和 Java, 仅需要基础的 SDK 依赖,可以实现通用语言和 KCL 的无缝互操作,下面以 Python 和 Java 插件为例

编写如下 KCL 代码 (main.k)

import kcl_plugin.my_plugin

result = my_plugin.add(1, 1)

使用 Python SDK 注册 Python 函数实现在 KCL 中调用

import kcl_lib.plugin as plugin
import kcl_lib.api as api

plugin.register_plugin("my_plugin", {"add": lambda x, y: x + y})

def main():
    result = api.API().exec_program(
        api.ExecProgram_Args(k_filename_list=["main.k"])
    )
    assert result.yaml_result == "result: 2"

main()

使用 Java SDK 注册 Java 函数实现在 KCL 中调用

package com.kcl;

import com.kcl.api.API;
import com.kcl.api.Spec.ExecProgram_Args;
import com.kcl.api.Spec.ExecProgram_Result;

import java.util.Collections;

public class PluginTest {
    public static void main(String[] mainArgs) throws Exception {
        API.registerPlugin("my_plugin", Collections.singletonMap("add", (args, kwArgs) -> {
            return (int) args[0] + (int) args[1];
        }));
        ExecProgram_Result result = new API()
                .execProgram(ExecProgram_Args.newBuilder().addKFilenameList("main.k").build());
        System.out.println(result.getYamlResult());
    }
}

更多其他多语言插件使用方式详见:

https://www.kcl-lang.io/docs/reference/plugin/overview

此外,可以在这里找到更多的关于 KCL 多语言插件使用的真实用例

  • https://github.com/cakehappens/kcfoil/blob/main/cmd/kcf/template.go

ebb8738caa7834349d19aff0fbd053b8.png

内容概要:本文聚焦2026年高教社杯全国大学生数学建模竞赛B题“无线电干扰源的快速自动定位与清除”,提供涵盖数学建模、算法实现与论文撰写的全套技术支持,并扩展分享多个科研方向的Matlab/Simulink仿真项目,如无人机协同路径规划、电力系统无功优化、信号处理、图像处理、车间调度、新能源预测与优化调度等。资源内容不仅服务于竞赛备赛,还覆盖智能优化、通信定位、边缘计算、雷达追踪、深度学习等多个前沿科研领域,旨在为参赛学生与初级科研人员提供系统化、高质量的技术参考与资源共享。文中强调科研需逻辑严密、善于借力,并倡导按目录系统学习以提升建模能力与科研素养,所有资料可通过指定网盘链接或微信公众号免费获取。; 适合人群:全国大学生数学建模竞赛参赛者,具备Matlab编程与数学建模基础的本科及研究生,以及从事智能优化、信号处理、电力系统、路径规划、机器学习等方向的初级科研人员。; 使用场景及目标:①备战数学建模竞赛,快速掌握赛题解题思路、算法模型与论文写作模板;②开展科研项目时复现经典算法、借鉴成熟仿真方法,提升研究效率;③系统学习多领域(如无人机路径规划、微电网优化、光伏/风电预测、图像处理)的Matlab/Simulink实现技术。; 阅读建议:建议读者按照资源目录顺序系统浏览,结合网盘中的代码与文档进行实践操作,重点关注建模逻辑、算法实现细节与仿真结果分析,同时关注公众号与共享链接以获取完整资料,全面提升竞赛竞争力与科研实践能力。
下载代码方式:https://pan.quark.cn/s/0636d5a2cd63 爱普生1390型宽幅照片打印机是一款备受摄影发烧友及小型设计机构欢迎的经典设备。经过一段时间的持续运作,其供纸辊可能会遭遇磨损或积聚灰尘,进而干扰打印机的正常运作,例如在打印过程中出现纸张移动或卡住等情况。本指南将系统性地阐述对爱普生1390进行拆解并换供纸辊的具体操作方法。 1. **前期准备** 在着手拆解之前,务必要将打印机关闭并切断电源供应。需要准备一套适配的小型螺丝刀及辅助工具,同时备齐全新的供纸辊。采购供纸辊时,必须核实其与爱普生1390型号完全兼容。 2. **外部拆解** 开始移除打印机的外壳部件。通常情况下,这涉及到松开底部和背面的固定螺栓。在分离外壳时需格外谨慎,以免拉扯到机内部署的电线或线缆。 3. **曝露供纸部件** 继续对内部结构进行拆解,直至定位到供纸辊组件。这个过程可能需要取下墨盒托架、进纸模块等零件。务必记住各个部件的原始位置和朝向,以便后续顺利复原。 4. **拆卸供纸辊** 供纸辊一般通过轴心固定于打印机内部。借助螺丝刀或其他适宜工具松开固定轴,随后轻轻转动或抽离供纸辊。操作过程中需留意避免损伤周边的塑料构件。 5. **清洁或调换供纸辊** 若供纸辊仅因污损,可用柔软布料蘸取少量酒精进行轻柔擦拭,以去除附着物和尘埃。倘若供纸辊已出现损耗,则必须换为新的。新供纸辊应依照原样安装,确保轴心与齿轮系统精确对接。 6. **重新组装** 依照与拆解相反的顺序,小心地将各个部件逐一装回,确保每部分都准确对齐并牢固固定。特别要注意连接线缆,防止其发生扭曲或过度弯曲。 7. **功能测试** 组装完毕后,重新接入电源,启动打印机,检验其是否能正常...
内容概要:本文详细介绍了基于三相PWM电压源换流器(VSC)构建的三相交流-直流-交流脉宽调制转换器的SimPowerSystems仿真模型,利用Simulink平台实现电力供应系统的动态建模与仿真分析。该模型完整呈现了电能从三相交流输入经整流为直流、再逆变为交流输出的全过程,重点体现了PWM控制技术在电压源换流器中的核心作用,涵盖了系统建模、主电路设计、控制策略(如电压/电流双闭环控制)、PWM信号生成及谐波抑制等关键技术环节,并通过仿真验证了系统的稳定性、动态响应性能与能量转换效率,适用于对现代电力电子变换装置的原理探究与性能优化研究。; 适合人群:电气工程、自动化、电力电子与电力传动等相关专业的高校本科生、研究生,以及从事新能源发电、智能电网、电机驱动、不间断电源(UPS)和高压直流输电(HVDC)等领域的科研人员和技术工程师。; 使用场景及目标:①用于高校课程教学中演示AC-DC-AC变换器的工作原理与PWM控制机制;②支撑科研项目中对先进控制算法(如PI控制、重复控制、模型预测控制)的验证与对比;③为工业界中变频器、电力有源滤波器、柔性直流配电等设备的研发提供高保真仿真原型与设计参考。; 阅读建议:建议读者结合MATLAB/Simulink环境动手复现并调试该模型,重点关注PWM调制模块、锁相环(PLL)同步控制、直流母线电压稳定机制及滤波器参数设计,通过改变负载条件和控制参数观察系统动态响应,深入理解电力电子系统中能量流动、控制逻辑与稳定性之间的内在联系。
内容概要:本文详细介绍了一种基于双扩展卡尔曼滤波器(DEKF)的时变多变量自回归(MVAR)模型参数在线估计方法,并提供了完整的Matlab实现代码。该方法通过将系统状态与待估参数共同增广为扩展状态向量,利用扩展卡尔曼滤波框架实现对非平稳时间序列动态特性的有效追踪,解决了传统固定参数模型在处理时变系统时的局限性。文中系统阐述了算法的数学原理、递推公式推导及关键实现步骤,涵盖状态预测、协方差新、雅可比矩阵计算与观测新等核心环节,并通过仿真实验验证了其在跟踪快速变化参数方面的高精度与强鲁棒性。; 适合人群:具备信号处理、时间序列分析或状态估计等相关领域基础知识的研究生、科研人员及工程技术人员,尤其适合从事脑电分析、金融建模、气候预测或动态系统辨识等方向的研究者,熟悉Matlab编程环境者佳。; 使用场景及目标:①应用于脑科学中的有效连接分析(如动态格兰杰因果分析),以研究大脑功能网络的时变特性;②用于金融市场的动态因果关系建模与风险预警,捕捉资产间的时变关联;③实现对气候、环境等复杂非平稳系统的实时建模与参数追踪;④作为高级滤波算法的教学与研究案例,深入理解扩展卡尔曼滤波的扩展形式及其在联合状态与参数估计中的应用机制。; 阅读建议:建议读者结合提供的Matlab代码逐行研读,重点理解状态增广策略、非线性函数的线性化处理(雅可比矩阵)以及滤波递推过程的设计逻辑;可通过调整噪声强度、参数变化速率等仿真参数进行对比实验,或代入实际观测数据复现分析,以全面掌握算法的性能特点与适用边界。
内容概要:本文围绕2026年高教社杯全国大学生数学建模竞赛A题“药材的烘干问题”,提供了一套完整的数学建模解决方案,涵盖问题分析、模型构建、算法实现与结果讨论,并附带Matlab/Python代码及论文资源供参赛者免费参考。文中系统阐述了如何通过建立传热传质模型、动力学模型与多目标优化模型,综合考虑温度、湿度、风速等关键参数对烘干效率与药材品质的影响,实现能耗最小化与干燥均匀性的平衡。结合实际数据进行仿真验证,展示了模型的有效性与实用性,旨在帮助参赛队伍快速掌握解题思路与技术路径。; 适合人群:全国大学生数学建模竞赛参赛学生,特别是具备一定数学建模基础、编程能力(如MATLAB/Python)和数据分析经验的本科生或研究生。; 使用场景及目标:① 为参加高教社杯数学建模竞赛的团队提供A题的完整解题示范与技术参考;② 学习如何将复杂的工业干燥过程抽象为数学模型,并运用优化算法求解多目标决策问题;③ 获取可复用的代码框架与论文写作模板,提升建模效率与成果规范性,增强获奖竞争力。; 阅读建议:建议读者结合所提供的代码与论文资源,按照文档结构逐步研读,重点关注模型构建的物理意义与数学推导逻辑,深入理解算法实现细节,并动手复现实验结果,尝试调整参数或改进模型,以提升独立建模与创新解决问题的能力。
代码下载地址: https://pan.quark.cn/s/efd53af024a8 PanoSim是一款专注于自动驾驶领域仿真测试的专业软件。该软件融合了传感器仿真的功能与车辆动力学仿真的核心技术,为自动驾驶的仿真研究提供了坚实的工具基础。以下是对PanoSim仿真软件的全面阐述以及使用指南中关键内容的系统梳理: 1. 软件概述:PanoSim是一个虚拟仿真平台,它综合了车辆动力学模型、三维道路环境模型、交通流动态模型、环境感知传感器模型以及Matlab/Simulink模型自动构建等关键特性。其核心使命在于应对智能汽车与汽车智能化技术在研发、测试及验证环节中的各类难题。除此之外,PanoSim还具备图形与动画的后期处理能力,为环境感知、数据整合、高级驾驶辅助系统研发测试、车联网技术及无人驾驶技术等方向提供研发与产品测试的模拟环境支持。 2. 实验构建流程:PanoSim的实验构建过程主要划分为三个核心阶段: - 设计实验:首要任务是建立新的实验工程,并选取适配的道路场景。同时需要设定环境中的气象状况与光照条件。 - 参数配置:在选定的道路场景中配置车辆,并设定车辆的驾驶特性参数,如横向或纵向控制策略。此外,还需设定交通流特征与行人干扰因素,并安装车载传感器设备,例如摄像头、雷达或车对一切交互系统等。同时要配置交通设施元素,包括交通标志标线、信号控制装置和障碍物等。 - 结果评估:实验执行完毕后,借助PanoSim提供的后处理工具对仿真数据进行详尽的分析报告,并通过动画重播功能来审视仿真过程的效果。 3. 快速操作指南:用户可以通过PanoSim Demo功能快速启动系统以预览实验的运行状况。在实验数据管理的主界面中,用户能够通过双击实验数据库中的实验记录来...
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值