Skip to main content

· 阅读需要 1 分钟

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

本栏目将会双周更新 KCL 语言社区最新动态,包括功能、官网更新和最新的社区动态等,帮助大家更好地了解 KCL 社区!

KCL 官网:https://kcl-lang.io

内容概述

感谢所有贡献者过去一段时间 (2024 02.02 - 2024.02.22) 的杰出工作,以下是重点内容概述

📦 模型更新

  • JSON Schema 库发布 0.0.4 版本,修复类型定义错误, 可以执行如下命令更新或添加依赖
kcl mod add jsonschema:0.0.4

🏄 语言更新

KCL 发布 0.8.0 预览版本,主要包含如下更新

  • 新增 file 系统库用于读取 KCL 模块信息和系统文件,包含 read, glob, workdirmodpath 函数,详见 Issue: https://github.com/kcl-lang/kcl/issues/1049
  • 优化非预期 token 的语法错误提示
  • 去除 Schema 对象内部非预期的内置类型属性通过 print 输出
  • 修复非预期的字典生成表达式中的 key 与循环变量相同时的变量计算
  • 修复 schema 内部诸如 "$if" 的字符串标识符定义找不到的错误

🔧 工具链更新

  • kcl run 支持使用 -H 参数输出以 _ 开头的隐藏字段
  • kcl run 支持直接运行远端 Git 仓库代码
  • kcl mod 新增 kcl mod graph 子命令输出模块依赖图
  • kcl fmt 修复 else 块中存在 if 语句时的格式化错误

💻 IDE 更新

  • 优化了内置函数和系统库的补全以及悬停文档提升
  • 修复了配置块内部 if 语句符号不能跳转和补全的问题
  • 增加变量引用错误时的快速修复功能

🎁 API 更新

  • OverrideFile API 新增诸如 a["b"].c 的 path 对配置进行查询和修改

🚀 插件系统更新

除了使用 Python 为 KCL 插件函数,现在支持使用 Go 为 KCL 编写插件函数,使用方式非常简单。

  • 定义插件 (以一个包含 add 函数的 hello 插件作为示例)
package hello_plugin

import (
"kcl-lang.io/kcl-go/pkg/plugin"
)

func init() {
plugin.RegisterPlugin(plugin.Plugin{
Name: "hello",
MethodMap: map[string]plugin.MethodSpec{
"add": {
Body: func(args *plugin.MethodArgs) (*plugin.MethodResult, error) {
v := args.IntArg(0) + args.IntArg(1)
return &plugin.MethodResult{V: v}, nil
},
},
},
})
}
  • 使用插件
package main

import (
"fmt"

"kcl-lang.io/kcl-go/pkg/kcl"
"kcl-lang.io/kcl-go/pkg/native" // Import the native API
_ "kcl-lang.io/kcl-go/pkg/plugin/hello_plugin" // Import the hello plugin
)

func main() {
// Note we use `native.MustRun` here instead of `kcl.MustRun`, because it needs the cgo feature.
yaml := native.MustRun("main.k", kcl.WithCode(code)).GetRawYamlResult()
fmt.Println(yaml)
}

const code = `
import kcl_plugin.hello

name = "kcl"
three = hello.add(1,2) # 3
`

🚢 集成更新

  • 发布 Ansible KCL 模块初始版本,支持基本的运行 KCL 代码功能,其他功能完善中
  • KCL FluxCD Controller 优化 Git Source 功能,OCI Source 功能支持中

特别鸣谢

以下排名不分先后

  • 感谢 @octonawish-akcodes 和 @d4v1d03 对 KCL FAQ 文档和 KCL IDE 功能的持续贡献 🙌
  • 感谢 @octonawish-akcodes 对 Ansible KCL Module 的贡献
  • 感谢 @AkashKumar7902 和 @Vanshikav123 对 KCL 包管理工具功能的贡献 🙌
  • 感谢 @StevenLeiZhang 对 KCL 文档和 KCL 插件的贡献
  • 感谢 @TheChinBot, @Evgeny Shepelyuk, @yonas, @steeling, @vtomilov, @Fdall, @CloudZero357, @bozaro, @starkers, @MrGuoRanDuo 和 @FLAGLORD 等在近段时间使用 KCL 过程中提供的宝贵建议与反馈 🙌

其他资源

预计 2024 年 2 月底会发布 0.8 正式版本,感谢所有 KCL 用户和社区小伙伴在社区中提出的宝贵反馈与建议。后续我们会发布更多 KCL 技术和案例文章,敬请期待! 查看 KCL 社区 加入我们。

更多其他资源请参考:

· 阅读需要 1 分钟

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

KCL 官网:https://kcl-lang.io\ KCL Github 仓库:https://github.com/kcl-lang

对云原生、平台工程、语言编译器、语言包管理工具和语言 IDE 感兴趣的小伙伴,我们邀请你申请 KCL 的 2024 春季 Linux 基金会 LFX Mentorship 项目,完成项目有最低 3000 美金的奖励哦!快来申请吧!

LFX Mentorship 项目

我们有三个 Mentorship 项目,内容涵盖包管理工具,语言编译器和语言 IDE 三个方面。

1. 为 KCL 包管理工具添加版本管理支持

KCL 目前的包管理工具(kpm)目前支持上传,下载等分发 KCL 包的功能,不支持 KCL 包的版本管理。在使用 kpm 为 KCL 添加三方库依赖的过程中,kpm 会根据依赖关系自动下载全部的三方库依赖,如果在下载的过程中出现相同包的不同版本,应该根据包版本管理策略提供对应的选择策略,选择合适的版本下载。

在此项目中,你需要为 kpm 增加包版本管理部分的功能,使 kpm 在管理三方库的过程中能够根据依赖情况,选择合适的三方库进行下载,确保编译过程的正常进行。

2. KCL IDE 的快速修复

为 KCL IDE 开发快速修复功能,当 KCL 程序在 IDE 中出现编译错误时,Quick Fix 功能能够根据用户的错误类型,在 KCL 程序错误的位置提供快速的问题修复。

在此项目中,你需要根据 KCL 程序的错误类型,为用户 IDE 开发不同的 Quick Fix 功能,降低用户开发门槛。

3. KCL IDE 自动加载 KCL 三方库。

KCL IDE 作为 KCL 用户最直接的开发界面,要想提供良好的用户体验,除了提供语言的高亮,跳转,补全等基本功能外,还需要保证编译过程的稳定。但是目前 KCL 的 IDE 经常会因为三方库找不到而导致编译错误,目前 KCL 的包管理工具 kpm 已经提供了自动下载和更新三方库的能力,但是仍然需要用户通过命令行的方式更新三方库,这使得用户的开发体验受到影响,因此 KCL IDE 需要与 KCL 的包管理工具 kpm 进行集成,通过 kpm 为 IDE 提供三方库的自动下载更新的能力。

在此项目中,你需要借助 kpm 的能力,实现 IDE 中常见的如:加载 KCL 包自动下载三方库,kcl.mod 变更时自动更新三方库和 Quick Fix 触发三方库自动下载等功能,保证 KCL IDE 在包管理工具的支持下能够提供更加完整流畅的开发体验。

4. 如何申请

在 LFX mentorship 平台上申请你钟意的项目,你可以通过以下链接访问 LFX mentorship 平台。申请从2024年1月29日开始,到2月13日结束。

有任何的问题,欢迎直接到对应的 issue 中获取更多内容或者与我们讨论:

5. 项目时间节点

事件开始日期结束日期
学员申请开放January 29February 13, 5:00 PM PDT
申请审查/录取决定/人力资源文书工作February 13February 27, 5:00 PM PDT
导师计划开始并分配初始工作March 4 (Week 1)
中期学员评估 / 第一笔津贴支付April 10 (Week 6)
最终学员评估到期 / 学员反馈提交到期 / 批准第二笔和最后一笔津贴支付May 22, 5:00 PM PST (Week 12)
学期最后一天May 31