Команда 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
- Список объектов KCLopts
— параметры сериализации YAMLsort_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/.
Дополнительные ресурсы
Смотрите сообщество для способов присоединиться к нам. 👏👏👏