Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

https://github.com/kcl-lang/kcl

KCL Programming Language (CNCF Sandbox Project). https://kcl-lang.io
https://github.com/kcl-lang/kcl

cloud-native compiler configuration configuration-language configuration-management devops functional infrastructure-as-code kubernetes language platform-engineering policy programming-language record rust schema shift-left validation

Last synced: about 1 month ago
JSON representation

KCL Programming Language (CNCF Sandbox Project). https://kcl-lang.io

Lists

README

        

KCL: 基于约束的记录及函数语言


English | 简体中文



介绍 | 特性 | 场景 | 安装 | 快速开始 | 文档 | 贡献 | 路线规划









## 介绍

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



## 场景

您可以将 KCL 用于

+ [生成静态配置数据](https://kcl-lang.io/docs/user_docs/guides/configuration)如 JSON, YAML 等,或者[与已有的数据进行集成](https://kcl-lang.io/docs/user_docs/guides/data-integration)
+ [使用 Schema 对配置数据进行抽象建模](https://kcl-lang.io/docs/user_docs/guides/schema-definition)并减少配置数据中的样板文件
+ [为配置数据定义带有规则约束](https://kcl-lang.io/docs/user_docs/guides/validation)的 Schema 并对数据进行自动验证
+ [通过梯度自动化方案和 GitOps](https://kcl-lang.io/docs/user_docs/guides/automation)无副作用地组织、简化、统一和管理庞大的配置
+ 通过[分块编写配置数据](https://kcl-lang.io/docs/reference/lang/tour#config-operations)为不同的环境可扩展地管理庞大的配置
+ 通过与[云原生配置工具](https://kcl-lang.io/docs/user_docs/guides/working-with-k8s/)集成直接编辑或校验存量 Kubernetes 资源
+ 与 [KusionStack](https://kusionstack.io) 一起,用作平台工程语言来交付现代应用程序

## 特性

+ **简单易用**:源于 Python、Golang 等高级语言,采纳函数式编程语言特性,低副作用
+ **设计良好**:独立的规范驱动的语法、语义、运行时和系统库设计
+ **快速建模**:[开箱即用的模型库](https://artifacthub.io/packages/search?org=kcl&sort=relevance&page=1)和以 [Schema](https://kcl-lang.io/docs/reference/lang/tour#schema) 为中心的配置类型及模块化抽象
+ **功能完备**:基于 [Config](https://kcl-lang.io/docs/reference/lang/tour#config-operations)、[Schema](https://kcl-lang.io/docs/reference/lang/tour#schema)、[Lambda](https://kcl-lang.io/docs/reference/lang/tour#function)、[Rule](https://kcl-lang.io/docs/reference/lang/tour#rule) 的配置及其模型、逻辑和策略编写
+ **可靠稳定**:依赖[静态类型系统](https://kcl-lang.io/docs/reference/lang/tour/#type-system)、[约束](https://kcl-lang.io/docs/reference/lang/tour/#validation)和[自定义规则](https://kcl-lang.io/docs/reference/lang/tour#rule)的配置稳定性
+ **强可扩展**:通过独立配置块[自动合并机制](https://kcl-lang.io/docs/reference/lang/tour/#-operators-1)保证配置编写的高可扩展性
+ **易自动化**:[CRUD APIs](https://kcl-lang.io/docs/reference/lang/tour/#kcl-cli-variable-override),[多语言 SDK](https://kcl-lang.io/docs/reference/xlang-api/overview),[语言插件](https://github.com/kcl-lang/kcl-plugin) 构成的梯度自动化方案
+ **极致性能**:使用 Rust & C,[LLVM](https://llvm.org/) 实现,支持编译到本地代码和 [WASM](https://webassembly.org/) 的高性能编译时和运行时
+ **API 亲和**:原生支持 [OpenAPI](https://github.com/kcl-lang/kcl-openapi)、 Kubernetes CRD, Kubernetes Resource Model (KRM) 等 API 生态规范
+ **开发友好**:[语言工具](https://kcl-lang.io/docs/tools/cli/kcl/) (Format,Lint,Test,Vet,Doc 等)、[包管理工具](https://github.com/kcl-lang/kpm)和 [IDE 插件](https://github.com/kcl-lang/vscode-kcl) 构建良好的研发体验
+ **安全可控**:面向领域,不原生提供线程、IO 等系统级功能,低噪音,低安全风险,易维护,易治理
+ **多语言 SDK**:[Go](https://github.com/kcl-lang/kcl-go),[Python](https://github.com/kcl-lang/kcl-py) 和 [Java](https://github.com/kcl-lang/kcl-java) SDK 满足不同场景和应用使用需求
+ **生态集成**:通过 [Kubectl KCL 插件](https://github.com/kcl-lang/kubectl-kcl)、[Kustomize KCL 插件](https://github.com/kcl-lang/kustomize-kcl)、[Helm KCL 插件](https://github.com/kcl-lang/helm-kcl) 、[KPT KCL SDK](https://github.com/kcl-lang/kpt-kcl) 或者 [Crossplane KCL 函数](https://github.com/kcl-lang/crossplane-kcl) 直接编辑、校验或者抽象资源

+ **生产可用**:广泛应用在蚂蚁集团平台工程及自动化的生产环境实践中

## 如何选择

简单的答案:

+ 如果你需要编写结构化的静态的 K-V,或使用 Kubernetes 原生的技术工具,建议选择 YAML
+ 如果你希望引入编程语言便利性以消除文本(如 YAML、JSON) 模板,有良好的可读性,或者你已是 Terraform 的用户,建议选择 HCL
+ 如果你希望引入类型功能提升稳定性,维护可扩展的配置文件,建议选择 CUE
+ 如果你希望以现代语言方式编写复杂类型和建模,维护可扩展的配置文件,原生的纯函数和策略,和生产级的性能和自动化,建议选择 KCL

更详细的功能和场景对比参考[这里](https://kcl-lang.io/docs/user_docs/getting-started/intro)。

## 安装

有关安装的更多信息,请查看 KCL 官网的[安装指南](https://kcl-lang.io/docs/user_docs/getting-started/install/)

## 快速开始

`./samples/kubernetes.k` 是一个生成 Kubernetes 资源的例子

```python
apiVersion = "apps/v1"
kind = "Deployment"
metadata = {
name = "nginx"
labels.app = "nginx"
}
spec = {
replicas = 3
selector.matchLabels = metadata.labels
template.metadata.labels = metadata.labels
template.spec.containers = [
{
name = metadata.name
image = "${metadata.name}:1.14.2"
ports = [{ containerPort = 80 }]
}
]
}
```

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

```bash
kcl ./samples/kubernetes.k
```

YAML 输出

```yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx
labels:
app: nginx
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.14.2
ports:
- containerPort: 80
```

> 更多例子可以在[这里](https://github.com/kcl-lang/kcl-lang.io/tree/main/examples)找到

## 文档

更多文档请访问[KCL 网站](https://kcl-lang.io/)

## 贡献

参考[开发手册](./docs/dev_guide/1.about_this_guide.md)。您也可以直接在 GitHub Codespaces 中打开该项目开始贡献。

[![用 GitHub Codespaces 打开](https://github.com/codespaces/badge.svg)](https://codespaces.new/kcl-lang/kcl)

## 路线规划

参考[KCL 路线规划](https://github.com/kcl-lang/kcl/issues/29)

## 社区

欢迎访问 [社区](https://github.com/kcl-lang/community) 加入我们。