Команда KCL рада сообщить, что теперь доступна версия 0.4.4! В этом выпуске в основном добавлена ​​возможность настраивать вывод манифестов YAML для KCL. Пользователи могут настроить стиль вывода YAML, написав код и вызвав системные функции, не понимая семантику сложных настроек схемы. Кроме того, этот выпуск содержит последнюю версию KCL Python SDK, которую пользователи Python могут использовать для прямой интеграции KCL. В то же время мы значительно уменьшили размер установочного пакета KCL. Средний размер установочного пакета был уменьшен до одной пятой по сравнению с предыдущей версией. Он также включает оптимизацию сообщений об ошибках компилятора и исправление ошибок. Вы можете посетить страницу выпуска KCL, чтобы получить более подробную информацию о выпуске и ссылку для загрузки двоичного файла KCL.

Фон

KCL — это язык записи и функциональный язык с открытым исходным кодом, основанный на ограничениях. KCL улучшает написание большого количества сложных конфигураций с помощью технологии и практики зрелых языков программирования и стремится к созданию лучшей модульности, масштабируемости и стабильности конфигурации, более простого написания логики, быстрой автоматизации и хорошей экологической расширяемости.

Этот блог будет знакомить читателей с последними разработками сообщества KCL.

Особенности

Настроить вывод манифеста YAML

В предыдущих версиях KCL стиль вывода YAML жестко запрограммирован в компиляторе KCL, и пользователи могут устанавливать метаатрибут __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: следует ли игнорировать атрибут со значением «Нет» (значение по умолчанию — 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 и определяем два ресурса развертывания и два ресурса службы. Когда мы хотим вывести эти четыре ресурса в формате потока YAML с --- в качестве разделителя, мы можем поместить их в список 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

Для получения дополнительной информации см. https://github.com/KusionStack/KCLVM/issues/94.

Python SDK

В дополнение к существующему KCL Go SDK в этом выпуске также добавлен KCL Python SDK. Для использования Python SDK требуется локальная версия Python выше 3.7.3 и локальный инструмент управления пакетами pip. Вы можете использовать следующую команду для установки и получения полезной информации.

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

Инструмент командной строки

Подготовьте файл KCL с именем main.k

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

Кроме того, мы также можем выполнять файлы KCL через код Python.

Подготовьте файл KCL с именем main.py

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 продолжит обновлять и предоставлять больше функций в будущем. Для получения дополнительной информации см. https://github.com/KusionStack/kclvm-py

Оптимизация размера установки

В новой версии KCL мы разделили встроенный Python 3 KCL, уменьшив средний размер пакета сжатия двоичных файлов KCL с 200 МБ до 35 МБ. Пользователи могут загружать и использовать KCL быстрее, а подключаемый модуль Python становится опцией. Если вы хотите включить подключаемый модуль KCL Python, дополнительным требованием является наличие инструментов управления пакетами Python и pip версии выше 3.7.3. Подробнее см. https://github.com/KusionStack/kcl-plugin.

Исправление

Оптимизация информации об ошибках вызова функций

В версии 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

Для получения дополнительной информации см. https://github.com/KusionStack/KCLVM/issues/299.

Ошибка форматирования интерполированной строки из трех кавычек

В предыдущих версиях KCL форматирование следующего кода приводило к неправильному преобразованию трех кавычек с интерполяцией строк в одинарные кавычки и вызывало ошибки компиляции. В версии 0.4.4 мы исправили проблему.

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

Для получения дополнительной информации см. https://github.com/KusionStack/KCLVM/issues/294.

Другие вопросы

Для получения дополнительных сведений см. https://github.com/KusionStack/KCLVM/milestone/2?closed=1.

Документы

Веб-сайт KCL предварительное создание и доработка сценария Kubernetes сопутствующие документы.

Для получения дополнительной информации см. https://kcl-lang.github.io/

Сообщество

Три внешних участника @my-vegetable-has-exploded, @possible-fqz, @orangebees приняли участие в сообществе KCL, спасибо им за их энтузиазм и активное участие в содействии.

Далее

Предполагается, что к концу января 2023 года мы выпустим KCL v0.4.5, и ожидается, что ключевая эволюция будет включать

  • Непрерывная оптимизация пользовательского интерфейса KCL, улучшение опыта и проблем пользователей.
  • Дополнительные сценарии и экологическая интеграция, например сценарии Kubernetes и CI/CD Pipeline.
  • Поддержка версии KCL для Windows.
  • Средство управления пакетами KCL, выпуск kpm.
  • Новая версия игровой площадки KCL.

Для получения дополнительной информации см. KCL v0.4.5 Milestone.

Часто задаваемые вопросы

Для получения дополнительной информации см. https://kcl-lang.github.io/docs/user_docs/support/.

Дополнительные ресурсы

Смотрите сообщество для способов присоединиться к нам. 👏👏👏