当前位置: 首页 > 软件库 > 云计算 > 云原生 >

KCL

基于约束的记录及函数语言
授权协议 Apache
开发语言 C/C++ Rust
所属分类 云计算、 云原生
软件类型 开源软件
地区 国产
投 递 者 时衡虑
操作系统 跨平台
开源组织 蚂蚁金服
适用人群 未知
 软件概览

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

核心特性

  • 简单
    • 源于 Python、Golang,融入函数语言特性
    • 吸收语句、表达式、条件、循环等语言元素
    • 类型和数据分离,Schema 声明配置定义
  • 稳定
    • 强不可变约束
    • 编译时类型推导、类型检查
    • Rule 策略定义:以属性为中心的约束表达式、根据约束查询结果
    • 可测试:语言内置 assert 断言、print 打印和测试工具
  • 可扩展
    • 配置合并:编译时配置依赖图代换
    • 配置属性运算符:满足配置覆盖、合并、添加和删除等需求
    • 配置复用:丰富的内置数据结构和语法语义,轻松扩展同一份配置到不同场景
  • 工程化
    • Schema 单一继承和声明性模型复用和组装
    • 工具和API 粒度的配置自动化“增删改查”
    • 丰富的内置函数和系统库
    • 顶层数据动态导入
    • 代码组织:模块和包
    • 插件系统:复用通用编程语言生态。
    • OpenAPI 模型支持:Swagger 与 Schema 双向转换,Kubernetes CRD 转换为 Schema
  • 高性能
    • 配合 LLVM 优化器、支持编译到本地代码和 WASM 等格式并高效执行

安装 & 文档

如何安装

从 Github releases 页面下载,并且将 {install-location}/kclvm/bin 添加到您的环境变量中

快速开始

./samples/fib.k 是一个计算斐波那契数列的例子

schema Fib:
    n1: int = n - 1
    n2: int = n1 - 1
    n: int
    value: int

    if n <= 1:
        value = 1
    elif n == 2:
        value = 1
    else:
        value = Fib {n: n1}.value + Fib {n: n2}.value

fib8 = Fib {n: 8}.value

我们可以通过执行如下命令得到 YAML 输出

kcl ./samples/fib.k

YAML 输出

fib8: 21

文档

更多文档请访问 https://kusionstack.io

  • 这是困惑了本人很久的问题,最近得闲,去b站观光了部分的离散数学课程并参考了一些资料,对这个问题做个总结,也算是笔记吧。电路原理和离散数学都还没学完,小白一只,各位如有发现任何错误,恳请指出。 支路电流法解线性电路的一般方法 已知在求解线性电路的过程当中,可以列出n-1条kcl独立的kcl方程,b-(n-1)条kvl独立的方程,从而可以解出b条支路的电压电流参数。作为一般性的理论,在电路的求解过程当

 相关资料
  • 但是我还需要一个基于参数的约束,其中操作统一为操作,因此,只要我们可以在代数数据类型中使用内联记录构造函数,我们也应该可以在广义代数数据类型中使用它们,对吗? 但这不是一个有效的表格。我现在找到的解决方案是使规则也具有操作类型,例如: 但这种单同态仍然具有很强的限制性。我如何用共享约束对记录中的存在类型建模,以便在仍然可以对应用程序进行编译时检查的情况下,在不同的产品中有不同的返回类型(通过详尽的

  • 问题内容: 我有以下独特的约束 我正在尝试防止两个问题处于活动状态时具有相同的问题编号(IS_ACTIVE值= 1)。 一切似乎都很好,直到我第二次不得不提一个问题。 我需要仅在IS_ACTIVE = 1时应用约束 问题答案: 您可以创建一个基于函数的唯一索引 这利用了以下事实:Oracle b树索引不存储数据,而叶块数据将完全为NULL。

  • 由于 Rax 转小程序链路是通过 AST 语法转换的方式将使用 Rax JSX 语法的项目转换到小程序语法的项目,所以受限于实现,我们对开发者使用的语法进行了部分限制(随着转译器的能力增强,限制会越来越少,本篇文档也将持续更新)。 使用限制 静态资源 由于无法识别在 json 文件中配置的静态资源,所以开发者需要指定静态资源的目录,build.json 中的具体配置如下: { "plugins

  • 我有一个Postgres表,在多个列上有一个唯一的约束,其中一个可以为NULL。对于每个组合,我只希望允许该列中有一条空记录。 我有一个upsert查询,当它遇到col2、col3中具有相同值的记录时,我想更新col4: 但是当col3为空时,冲突不会触发。我读过关于使用触发器的文章。请问让冲突触发的最佳解决方案是什么?

  • 我观察到,运动流中存在一些记录,但KCL消费者应用程序尚未收到这些记录。发生这种情况的原因是什么?之前和之后的记录都很好。 所有异常都在我的应用程序中消耗,KCL不会收到。所以http://docs.aws.amazon.com/streams/latest/dev/troubleshooting-consumers.html#w1ab1c11c11c15b9的情况也没有发生。 一些细节:打开分片

  • 我有一个Oracle表,它有10列-col1、col2、COL3...COL10。我的要求是-对于col1、col2、col3的唯一值集,即(col1、col2、col3)只允许col4的唯一值,即使它是多次。例如:如果有10行COL1=3,COL2='A005',COL3=10,则所有10行的col4值应相同。 我如何在Oracle中放置此限制?

  • 我有一个很大的PL/SQL存储过程,在这里我们进行一些删除和插入一样长的操作。过程以语句开始 当我试图在子表中插入值,但父表中没有此条目时,会发生此错误吗? 还有,02292和02291有什么区别?