Стендап Сьогодні 📢 Канал в Telegram @stendap_sogodni

🤖🚫 AI-free content. This post is 100% written by a human, as is everything on my blog. Enjoy!

06.02.2024

Pkl - нова мова конфігураційних файлів від Apple

Нещодавно Apple випустила Pkl - мову програмування для генерації конфігураційних файлів. Взагалі ця тема мене займає, бо найкращі з моїх рішень — це шаблони jq для JSON та YAML з шаблонами Go - я б щасливий був замінити. Тим паче побачив [відгук] про те, що Pkl - один з найкращих внутрішніх інструментів Apple.

Що ж воно таке? Сама мова чимсь нагадує за базовим синтаксисом Terraform (тобто HCL). В ній є як повноцінні засоби програмування (навіть класи імпорти), так і типізація. Єдине, що через семантику конфігурації трохи заплутано зрозуміти, де що (наприклад, обʼєкт може успадкувати інший обʼєкт.)

Все це потрібно, щоб на виході згенерувати або JSON, або YAML, або ще декілька форматів. Тобто ідея в тому, що наш скрипт Pkl буде створювати конфігурацію для іншої системи. А система можна навіть нічого про Pkl не знати, а спокійно споживати традиційні конфігураційні формати.

Звідки скрипт бере дані? Раджу роздивитись документацію про ресурси. Наприклад, зі змінних оточення. Або навіть з запитів HTTP (наприклад, з метаданих ECS). Додати до цього повну по Тюрінгу мову, та можна реально замінити мій генератор YAML на Go. (Або генератор JSON з jq на Баші, який ще складніше підтримувати.)

До речі, про інтеграцію з Go (одну з офіційних інтеграцій.) Інтеграція дозволяє завантажувати дані прямо з файлів Pkl у структури. Тобто використати Pkl як конфігураційну частину свого сервісу. Пропонується кодогенерація, проте вона генерує тільки структурні типи. Решта коду інтерпретується — тож інтеграція Pkl тягне за собою цілий інтерпретатор. Тут я поки не бачу сенсу (хоча може з досвідом зʼявиться.)