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

代码转载自:https://pan.quark.cn/s/8ce4326d996e 对于在 CentOS 7 系统中修改网卡配置文件后无法使设置生效的情况,经过实践验证,可以通过使用 nmcli 命令来进行调整。完成修改之后,需要重新启动虚拟机以使改生效,这样操作流程即告完成。如果设置仍然无法生效,则表明虚拟机在启动过程中所获取的 IP 地址配置并非针对 eth0,此时可以对其它网卡的配置文件进行修改或将其移除。在 CentOS 7 系统中,网络配置的管理机制与早期版本存在差异,主要体现为采用了 Network Manager 服务来负责网络接口的管理。在某些情形下,尽管修改了 `/etc/sysconfig/network-scripts` 目录下的 `ifcfg-eth0` 文件,但网络配置却未能即时生效。此类问题的发生通常源于 CentOS 7 采用了不同于以往的配置读取方法。接下来将具体阐述如何借助 nmcli 命令来处理这一挑战。 以 root 用户身份登录系统并打开终端界面。nmcli 是 Network Manager 提供的命令行界面工具,它支持在命令行环境下执行网络连接的建立、编辑、查询及管理任务。针对修改 eth0 网卡配置的需求,可以遵循以下步骤进行操作: 1. 导航至 `/etc/sysconfig/network-scripts` 目录: ``` cd /etc/sysconfig/network-scripts ``` 2. 检查该目录内是否存在 `ifcfg-eth0.bak` 文件,该备份文件可能是先前调整配置时遗留下来的,若存在可能造成冲突。若发现该文件,可以选择将其删除: ``` [root@localhost netw...
代码转载自:https://pan.quark.cn/s/46fd08fb879c 网管教程 从入门到精通软件篇 ★一。★详尽的xp修复控制台指令及其应用!!! 放入xp(2000)的光盘,安装时选择R,执行修复! Windows XP(涵盖 Windows 2000)的控制台指令是在系统遭遇某些意外状况时的一种极具效用的诊断、检测以及恢复系统功能的工具。笔者确实一直期望能够将这方面的指令进行归纳,此次由老范辛苦整理了这份极具价值的秘籍。 Bootcfg bootcfg 命令用于启动配置与故障恢复(对大多数计算机而言,即 boot.ini 文件)。 带有特定参数的 bootcfg 命令仅在运用故障恢复控制台时方可使用。能够在命令行界面下运用带有不同参数的 bootcfg 命令。 用法: bootcfg /default 设定默认引导选项。 bootcfg /add 向引导清单中增添 Windows 安装。 bootcfg /rebuild 重复整个 Windows 安装流程并让用户选择需添加的项目。 注意:运用 bootcfg /rebuild 之前,应先借助 bootcfg /copy 命令备份 boot.ini 文件。 bootcfg /scan 探查用于 Windows 安装的全部磁盘并展示结果。 注意:这些结果被静态存储,并用于当前会话。若在当前会话期间磁盘配置发生变动,为获取新的探查结果,必须先重启计算机,然后再次探查磁盘。 bootcfg /list 列示引导清单中已有的项目。 bootcfg /disableredirect 在启动引导程序中禁用重定向。 bootcfg /redirect [ PortBaudRrate] |[ useBio...
代码下载链接: https://pan.quark.cn/s/fc524f791b68 AA制程,即Active Alignment,被理解为主动对准,是一种用于确定零部件装配中相对位置的方法。在摄像头封装阶段,涉及图像传感器、镜座、马达、镜头、线路板等多个部件的重复组装,而传统的封装设备如CSP及COB等,均是依据设备设定的参数进行零部件的移动装配,因而零部件的叠加误差会逐渐增大,最终在摄像头上表现为拍照最清晰的位置可能偏离画面中心、四边清晰度不均等现象。伴随智能手机和其他高端电子产品的普及,摄像头模组的性能正日益受到重视。高分辨率、卓越的低光表现以及稳定视频输出是现代用户所期望的。在摄像头模组的制造环节,各部件的精准定位对成像质量具有决定性作用。因此,一种名为“AA制程”(Active Alignment)的前沿技术被开发出来,成为摄像头精密对准的核心技术。 AA制程,即Active Alignment,是一种在摄像头封装过程中应用的主动对准方法。该方法在多个组件装配阶段发挥作用,涵盖图像传感器、镜座、马达、镜头和线路板等部件。传统的封装方式,例如CSP(Chip Scale Package)和COB(Chip On Board),依赖于设备预设的参数进行组装,但随着组件数量的增加,误差也会累积,最终影响摄像头的表现。例如在成像质量上可能出现中心位置偏移、四角清晰度不一致等问题。 AA制程技术的核心在于实时监测与主动调整。在组装过程中,它借助先进的检测设备持续监控半成品的状态,并根据实时信息对组装部件进行精确修正,从而显著降低装配误差。通过这种技术,能够确保摄像头模组中各组件的相对位置准确无误,从而使得最终的成像效果加稳定,特别是在中心区域和四角的清晰度上...
内容概要:本文介绍了一套基于Matlab实现的光子晶体90度弯曲波导的二维时域有限差分法(2D FDTD)仿真代码,旨在通过数值模拟手段深入研究光子晶体波导中的光传播特性。该资源聚焦于电磁场与光子学领域的仿真技术应用,系统实现了FDTD算法在复杂介质结构中的建模过程,涵盖空间网格剖分、时间步进迭代、完美匹配层(UPML)边界条件处理、总场散射场(TFSF)激励源设置、介电常数分布定义及电磁场演化可视化等核心模块,能够有效分析光在90度弯曲波导中的传输效率、模式分布与反射损耗等关键性能指标。; 适合人群:具备电磁场理论基础和Matlab编程能力的研究生、科研人员以及从事光子晶体器件设计与仿真的工程技术人员。; 使用场景及目标:①用于教学演示FDTD方法的基本原理与算法流程,帮助理解麦克斯韦方程的离散化求解过程;②支撑科研工作中对光子晶体弯曲波导结构的传输特性进行仿真分析与性能优化;③作为开发复杂光子集成器件(如分束器、滤波器)数值仿真工具的基础框架; 阅读建议:建议使用者结合经典FDTD教材(如Taflove著作)深入理解算法理论,并在Matlab环境中逐模块调试代码,重点关注电场与磁场的交替新过程、UPML吸收边界的设计实现以及TFSF源的引入方式,从而全面提升对时域电磁仿真机制的掌握与应用能力。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值