KCL 团队很高兴地宣布 0.4.4 版别现在现已可用!本次发布主要为 KCL 言语增加了自界说 YAML Manifests 输出的能力,用户能够经过编写代码并调用体系函数来自界说 YAML 输出的款式而无需理解复杂的 schema settings 语义;此外本次发布供给了最新的 KCL Python SDK 可用于 Python 用户对 KCL 直接集成;同时咱们大大下降了 KCL 安装包的体积,均匀安装包体积下降为之前版别的五分之一,并包含多项编译器报错信息优化和 bug 修正。您能够在 KCL 发布页面 取得更多具体发布信息和 KCL 二进制下载链接。

背景

KCL 是一个开源的基于束缚的记录及函数言语,希望经过老练的编程言语技术和实践来改善对大量繁杂装备和策略的编写,致力于构建围绕装备的更好的模块化、扩展性和稳定性,更简单的逻辑编写,以及更快的自动化集成和杰出的生态延展性。

本文将向读者介绍 KCL 社区的近期动态。

新增特性

自界说 YAML 格式输出

在过去的 KCL 版别中,YAML 输出的款式是在 KCL 编译器中是硬编码的,用户能够为 schema 的 __settings__ 元特点设置为不同的值来决议 YAML 输出款式,这带来了较高的复杂度和记忆本钱,因此在 0.4.4 版别中咱们供给了一个体系库函数用于开发人员更简单地自界说 YAML 输出款式,这个函数的签名如下:

manifests.yaml_stream(values: [any], opts: {str:} = {
    sort_keys = False
    ignore_private = True
    ignore_none = False
    sep = "---"
})

这个函数的功用是将 KCL 目标列表序列化为带 --- 分隔符的款式 YAML 输出,它具有两个参数:

  • values – 一个 KCL 目标列表
  • opts – YAML 序列化选项

    • sort_keys:是否按特点称号的字典序对序列化成果进行排序(默以为 False)。
    • ignore_private:是否疏忽称号以 _ 开头的特点序列化输出(默以为 True)。
    • ignore_none:是否疏忽值为 None 的特点(默以为 False)。
    • sep:在多个 YAML 文档之间选择怎样的分隔符(默以为 "---")。

下面咱们经过一个例子来说明:

import manifests
schema Deployment:
    apiVersion: str = "v1"
    kind: str = "Deployment"
    metadata: {str:} = {
        name = "deploy"
    }
    spec: {str:} = {
        replica = 2
    }
schema Service:
    apiVersion: str = "v1"
    kind: str = "Service"
    metadata: {str:} = {
         name = "svc"
    }
    spec: {str:} = {}    
deployments = [Deployment {}, Deployment {}]
services = [Service {}, Service {}]
manifests.yaml_stream(deployments + services)

首要咱们经过 import 关键字导入 manifests 模块并界说 2 个 Deployment 以及 2 个 Service 资源,当咱们想以 YAML stream 并以 --- 作为分隔符的格式依次输出这 4 个资源时,咱们能够将它们合并为一个 KCL 列表并作为 manifests.yaml_stream 函数的 values 形参进行传入 (如无特殊需求,opts 参数一般运用默认值即可),终究得到 YAML 输出为:

apiVersion: v1
kind: Deployment
metadata:
  name: deploy
spec:
  replica: 2
---
apiVersion: v1
kind: Deployment
metadata:
  name: deploy
spec:
  replica: 2
---
apiVersion: v1
kind: Service
metadata:
  name: svc
---
apiVersion: v1
kind: Service
metadata:
  name: svc

注:schema 的 __settings__ 元特点设置 YAML 输出款式的特性依然能够在 v0.4.4 版别中运用,大约后续两个小版别发布后在 KCL v0.4.6 版别中,咱们会移除这个特性

更多信息请参阅:github.com/KusionStack…

Python SDK

除了已有的 KCL Go SDK, 本次发布还新增了 KCL Python SDK,运用 Python SDK 要求您本地具备高于 3.7.3 的 Python 版别和 pip 包管理东西,能够经过如下指令进行安装并取得帮助信息

$ python3 -m pip install kclvm && python3 -m kclvm --help

指令行东西

编写名为 main.k 的 KCL 文件:

name = "kcl"
age = 1
schema Person:
    name: str = "kcl"
    age: int = 1
x0 = Person {}
x1 = Person {
    age = 101
}

履行如下指令并取得输出:

$ python3 -m kclvm hello.k
name: kcl
age: 1
x0:
  name: kcl
  age: 1
x1:
  name: kcl
  age: 101

API

此外,咱们还能够经过 Python 代码完成对 KCL 文件的履行

编写名为 main.py 的 python 文件:

import kclvm.program.exec as kclvm_exec
import kclvm.vm.planner as planner
print(planner.plan(kclvm_exec.Run(["hello.k"]).filter_by_path_selector()))

履行如下指令并取得输出:

$ python3 main.py
name: kcl
age: 1
x0:
  name: kcl
  age: 1
x1:
  name: kcl
  age: 101

能够看出经过指令行东西和 API 能够取得相同的输出。

现在 KCL Python SDK 还处于前期预览版别,后续 KCL 团队会继续更新并供给更丰富的功用,更多信息请参阅:github.com/KusionStack…

安装体积优化

在新的 KCL 版别中,咱们将 KCL 内置的 Python3 剥离,使得 KCL 二进制压缩包的体积从均匀 200M 下降为 35M,用户能够更快地下载并运用 KCL,而且 Python Plugin 成为一个可选项,假如您想启用 KCL Python 插件,一个额定要求是需求您本地具备高于 3.7.3 版别的 Python 以及 pip 包管理东西,更多详情请参阅 github.com/KusionStack…

过错修正

函数调用过错信息优化

在 0.4.4 版别中,KCL 优化了当函数参数个数不匹配时的过错信息输出,支撑显现函数称号以及参数不匹配个数

schema Foo[x: int]:
    bar?: int = x
f = lambda x {
    x + 1
}
foo = Foo(1,2,3)  # Error: "Foo" takes 1 positional argument but 3 were given
f(1,2)  # Error: "f" takes 1 positional argument but 2 were given

更多信息请参阅:github.com/KusionStack…

插值三引号字符串格式化过错修正

在之前的 KCL 版别中,对如下代码进行格式化会过错将带着字符串插值的三引号格式化为单引号字符串并导致编译过错,在 0.4.4 版别中咱们进行了修正

# Before KCL v0.4.4, variable "bar" will be formatted as:
#
# foo = 1
# bar = "
# ${foo}
# "
foo = 1
bar = """
${foo}
"""

更多信息请参阅:github.com/KusionStack…

其他过错修正

更多过错修正详见:github.com/KusionStack…

文档

KCL 网站 开始建立,并完善 Kubernetes 场景相关文档.

更多网站信息详见 kcl-lang.github.io/

社区动态

KCL 社区新增三名外部奉献者 @my-vegetable-has-exploded, @possible-fqz, @orangebees, 感谢他们热心并积极地参与奉献

下一步方案

估计 2023 年 1 月底,咱们将发布 KCL v0.4.5 版别,预期要点演进包括

  • 言语用户界面继续优化,体会继续提升和用户痛点处理
  • 更多场景和生态如 Kubernetes 和 CI/CD Pipeline 场景 KCL 支撑和文档更新
  • KCL Windows 版别支撑
  • KCL 包管理东西 kpm 发布
  • KCL 新版 playground 支撑

更多详情请参阅 KCL v0.4.5 Milestone

常见问题及回答

常见问题及回答详见:kcl-lang.github.io/docs/user_d…

其他资源

  • KCL 网站
  • Kusion 网站
  • KCL 库房
  • Kusion 库房
  • Konfig 库房

欢迎参加咱们的社区进行交流 :github.com/KusionStack…