Pkl, uma linguagem de programação para configuração
A Apple abriu o código do Pkl, uma linguagem de configuração tipada e programável, feita para gerar formatos como YAML e JSON enquanto adiciona templates, validação e ferramentas de IDE. Entusiastas destacam seu sucesso dentro da Apple, especialmente para lidar com configurações complexas de Kubernetes e Terraform, e a veem como uma alternativa mais sustentável a YAML com templates de strings e charts do Helm. Céticos questionam a necessidade de mais uma linguagem de configuração — especialmente uma Turing-completa, baseada em Java/GraalVM e sem bindings para Python/.NET — e debatem se DSLs de configuração mais ricas realmente resolvem mais problemas do que criam.
O que é o Pkl e suas principais funcionalidades
- Nova linguagem de “configuração como código”: dados declarativos mais construções de uso geral (tipos, condicionais, loops, imports).
- Gera outros formatos (JSON, YAML, XML, PLIST, etc.) e pode ser incorporada via bindings (atualmente Go, Java, Kotlin, Swift) ou usada via CLI.
- Tipagem estática forte e validação: restrições como intervalos, regex e templates/schemas mais ricos; podem ser compartilhados por meio de um “Pantry” de templates reutilizáveis.
- Construída sobre GraalVM/Truffle; implementação única usada pela CLI e pelos bindings da linguagem; planos para incorporação no estilo C/FFI.
Casos de uso relatados
- Uso intenso dentro da Apple por anos: manifests do Kubernetes, Terraform, alertas, config de infraestrutura, geração para múltiplos destinos (configs de monitoramento + documentação).
- Vários კომენტadores dizem que ela substituiu o Helm em suas empresas para k8s, evitando template de strings e problemas de indentação em YAML.
- Proposta para pipelines de configuração com múltiplas saídas (por exemplo, uma fonte Pkl → k8s, Prometheus, documentação, config da aplicação) e como alternativa mais segura a “config em Python/TypeScript”.
Comparações com ferramentas existentes
- Frequentemente comparada a: YAML/JSON (+ JSON Schema), Helm, Terraform/HCL, Jsonnet, Dhall, CUE, Nix, Starlark, Lua.
- Comparada a JSON/YAML: adiciona tipos, templates, validação, reutilização; evita template de strings frágil.
- Em relação ao Jsonnet: configuração programável semelhante, mas o Pkl é tipado e tem forte suporte de IDE; o Jsonnet é elogiado pela simplicidade e pelos bindings já existentes.
- Em relação ao CUE/Dhall: o Pkl é Turing-completo (mais expressivo, mais risco); CUE/Dhall enfatizam terminação e bases lógicas/tipadas mais principiadas.
- Em relação a “apenas usar Python/TypeScript”: defensores argumentam que isso traz dores de empacotamento/runtime e código arbitrário inseguro, sem sandbox; críticos dizem que introduzir uma nova DSL é pior do que usar uma linguagem geral familiar.
Ferramentas, ergonomia e preocupações de implementação
- Suporte a IDE: plugin nativo para IntelliJ, plugins básicos para VS Code/neovim; LSP “em breve”. Alguns questionam por que o LSP não foi a prioridade.
- Alguns se preocupam com runtime e tamanho do binário (binário nativo baseado em Graal ~100MB), dependência de Java e ausência de bindings para .NET/Python/Node.
- Outros elogiam a futura biblioteca C e observam que Graal/Truffle permitem forte otimização e incorporação poliglota.
Segurança, complexidade e Turing-completude
- Acesso embutido a HTTP/sistema de arquivos mais Turing-completude levantam preocupações de segurança e de “config lenta”; os mantenedores apontam flags e opções de sandboxing.
- Debate sobre se configurações deveriam ser Turing-completas: alguns querem poder total para transformações arbitrárias; outros preferem garantias de terminação e controle de fluxo muito limitado.
Entusiasmo vs. ceticismo
- Entusiastas: chamam de uma das melhores ferramentas internas da Apple, “encantadora” em comparação com Helm/YAML; gostam de config com segurança de tipos, reutilização, validação na IDE e compartilhamento entre linguagens.
- Céticos: veem como “mais uma linguagem de configuração”, temem que DSLs de config virem mini-programas ilegíveis, preferem YAML+JSON Schema, Jsonnet, Cue ou simplesmente usar linguagens reais.
- Alguns desconfiam do histórico de código aberto da Apple e questionam a simpatia da comunidade no longo prazo e o foco multiplataforma.
- A colisão de nome com o “pickle” do Python e arquivos
.pklé observada como potencialmente confusa.