10 pontos por GN⁺ 2024-02-04 | 2 comentários | Compartilhar no WhatsApp
  • Pkl (pronuncia-se Pickle) é uma linguagem de programação para gerar configurações, e a Apple anunciou a primeira versão após abrir o código de algo que usava internamente
    • "Configuration that is Programmable, Scalable, and Safe"

  • Linguagens estáticas como JSON, YAML e Property Lists têm limitações quando a complexidade aumenta
  • O Pkl busca um equilíbrio entre linguagens estáticas e linguagens de programação de propósito geral

Tour rápido pelo Pkl

  • Inclui recursos como classes, funções, loops e anotações de tipo para oferecer uma sintaxe familiar aos desenvolvedores e facilitar o aprendizado
  • Arquivos Pkl são usados para definir esquemas de configuração e também para definir outros dados de configuração
  • Programas Pkl podem ser facilmente renderizados em formatos comuns como YAML, JSON e XML

Validação embutida

  • Os dados precisam ser válidos, e no Pkl a validação é alcançada com o uso de anotações de tipo
  • As anotações de tipo podem definir restrições, e restrições que falham geram erros de avaliação

Compartilhamento de pacotes

  • O Pkl oferece recursos para publicar pacotes e importá-los como dependências em projetos
  • É possível criar e publicar pacotes facilmente com GitHub Releases, além de gerenciar dependências por meio do projeto

Bindings de linguagem

  • O Pkl pode gerar configurações como saída de texto e também pode ser incorporado como biblioteca em outras linguagens
  • Esquemas Pkl podem ser gerados como classes/structs na linguagem de destino, com suporte a Swift, Go, Java, Kotlin e outras

Suporte a editores

  • O objetivo é tornar a experiência de escrita em Pkl a melhor possível
  • Oferece suporte robusto para editores da JetBrains, incluindo um plugin para IntelliJ
  • Fornece recursos como autocompletar, navegação e validação, com planos de oferecer suporte ao Language Server Protocol

Próximos passos

  • Recomenda consultar o guia detalhado do Pkl, a referência da linguagem e a comunicação via GitHub Discussions
  • Também recomenda um repositório de exemplos de uso do Pkl, o download da CLI e a instalação de plugins de editor

Opinião do GN⁺:

  • O Pkl é uma nova linguagem de programação criada para resolver a complexidade do gerenciamento de configurações e parece ser útil para desenvolvedores
  • Os recursos de validação embutida e compartilhamento de pacotes podem melhorar a reutilização e a manutenibilidade do código
  • Os bindings para várias linguagens e o suporte a editores permitem aplicar o Pkl em mais ambientes de desenvolvimento, ajudando desenvolvedores a gerenciar configurações com mais facilidade.

2 comentários

 
secret3056 2024-02-05

Eu até imaginei isso, mas tem binding para Go. Parece que a Apple também usa bastante Go.
apple/pkl-go: Bindings de Pkl para a linguagem de programação Go

 
GN⁺ 2024-02-04
Opiniões no Hacker News
  • Resumo dos comentários do Hacker News:
    • Há 25 anos, a maioria dos programas oferecia recursos de configuração e ajuda por meio de GUI. As configurações eram armazenadas em arquivos ini ou no registro do Windows, e também podiam ser editadas manualmente. Hoje, é preciso usar uma linguagem de programação em forma de binário de 87 MB para gerar arquivos de configuração, e para executar essa própria linguagem também é necessário criar manualmente um arquivo de configuração. Nesse ritmo, parece que vai ser necessário um framework de 500 GB, e ele será para uma linguagem de programação que gera arquivos de configuração. Parece que os desenvolvedores modernos trabalham criando problemas.
    • Pkl era uma das melhores ferramentas usadas internamente na Apple, e é ótimo que agora tenha sido liberada como open source. Uma equipe migrou com sucesso vários kloc de configuração de k8s para pkl e usou pkl para escrever configurações para duas ferramentas de monitoramento, gerar um site de documentação estático e definir alertas conectando tudo isso. É uma ferramenta recomendável, e é empolgante poder usá-la de novo.
    • Pkl foi construído usando o framework GraalVM Truffle e oferece suporte a compilação em tempo de execução usando a projeção de Futamura. Esse trabalho vem sendo feito com a Apple há muito tempo, e é muito bom finalmente poder ver o código-fonte. (Comentário de um desenvolvedor do GraalVM)
    • Buscar recursos HTTP, ler arquivos do sistema de arquivos e ter completude de Turing são capacidades inesperadas em uma linguagem de configuração. Fica a dúvida se essa complexidade se justifica.
    • Depois de ler um pouco da documentação, parece que houve foco excessivo na ideia de criar uma linguagem para definição de schema e passagem mínima de valores. Há preocupação com modos de falha inesperados causados por uso excessivo. Mas talvez essa seja a funcionalidade central: qualquer pessoa que adicione pkl ao software acaba participando do monstro de configuração que será gerado. A ideia parece se basear na suposição de que um sistema unificado é menos ruim do que um caos sem estrutura.
    • Há plugins e extensões para IntelliJ, Visual Studio Code e Neovim, e em breve será adicionado suporte a Language Server Protocol. Não dá para entender por que não implementaram LSP primeiro (ou apenas ele). Todos os editores já oferecem suporte embutido a LSP, então não teria sido necessário manter implementações separadas.
    • Depois de muito pensar sobre linguagens de configuração e passar por uma relação de amor e ódio com schemas, a conclusão foi que não se quer tipos ricos em configuração. Usa-se uma linguagem de programação estaticamente tipada, mas na linguagem de configuração só se querem strings, arrays e hashmaps como tipos, empurrando toda a validação de tipos para a etapa de parsing.
    • É parecido com Cue, mas mais primitivo, menos guiado por princípios e escrito em Java.
    • É difícil entender qual problema o Pkl tenta resolver. Ao ler o título, parecia que Pkl seria uma linguagem de configuração nova e melhor, como TOML, mas ao ler o artigo, a impressão é que Pkl é uma linguagem para gerar configuração. Pkl parece ser mais uma ferramenta de abstração para ajudar a construir e reutilizar configurações de maneira mais padronizada, e não o arquivo de configuração em si. Por exemplo, quando há configurações de Terraform ou Cloudformation que se quer compartilhar ou repetir entre vários projetos, a forma mais fácil costuma ser copiar e colar em outro projeto e alterar algumas linhas. A dúvida é se o Pkl ajuda a resolver esse tipo de problema ou se há algo mais que não está sendo entendido.