10 points par GN⁺ 2024-02-04 | 2 commentaires | Partager sur WhatsApp
  • Pkl (prononcé Pickle) est un langage de programmation destiné à générer des configurations, dont Apple a annoncé la première version après l’avoir open sourcé alors qu’il était utilisé en interne
    • "Configuration that is Programmable, Scalable, and Safe"

  • Les langages statiques comme JSON, YAML et Property Lists montrent leurs limites lorsque la complexité augmente
  • Pkl vise un équilibre entre les langages statiques et les langages de programmation généralistes

Tour rapide de Pkl

  • Il inclut des fonctionnalités comme les classes, fonctions, boucles et annotations de type pour offrir une syntaxe familière aux développeurs et facile à apprendre
  • Les fichiers Pkl servent à définir des schémas de configuration ainsi que d’autres données de configuration
  • Les programmes Pkl peuvent être facilement rendus dans des formats courants comme YAML, JSON ou XML

Validation intégrée

  • Les données doivent être valides, et Pkl s’appuie sur les annotations de type pour assurer cette validation.
  • Les annotations de type peuvent définir des contraintes, et toute contrainte non respectée provoque une erreur d’évaluation.

Partage de packages

  • Pkl permet de publier des packages et de les importer comme dépendances dans un projet
  • Il est possible de créer et publier facilement des packages via les releases GitHub, puis de gérer les dépendances dans le projet

Liaisons de langage

  • Pkl peut générer des configurations sous forme de sortie texte et être intégré comme bibliothèque dans d’autres langages.
  • Les schémas Pkl peuvent être générés en classes/structures du langage cible, avec prise en charge de Swift, Go, Java, Kotlin, etc.

Support éditeur

  • L’objectif est d’offrir la meilleure expérience possible pour l’écriture de Pkl
  • Il propose un support riche pour les éditeurs JetBrains, y compris un plugin IntelliJ
  • Il offre l’autocomplétion, la navigation, la validation, etc., et prévoit de prendre en charge le Language Server Protocol

Prochaines étapes

  • Il recommande de consulter le guide détaillé, la référence du langage et les échanges via GitHub Discussions pour en savoir plus sur Pkl
  • Il encourage à essayer le dépôt d’exemples, à télécharger la CLI et à installer le plugin d’éditeur

Avis de GN⁺

  • Pkl est un nouveau langage de programmation conçu pour résoudre la complexité de la gestion de configuration, et il semble pouvoir être utile aux développeurs.
  • La validation intégrée et le partage de packages peuvent améliorer la réutilisabilité et la maintenabilité du code.
  • Les liaisons vers plusieurs langages et le support des éditeurs permettent d’appliquer Pkl à davantage d’environnements de développement, aidant ainsi les développeurs à gérer plus facilement leurs configurations.

2 commentaires

 
secret3056 2024-02-05

Je me posais la question, et il y a bien des bindings Go. Apple semble aussi beaucoup utiliser Go.
apple/pkl-go: Pkl bindings for the Go programming language

 
GN⁺ 2024-02-04
Avis Hacker News
  • Résumé des commentaires Hacker News :
    • Il y a 25 ans, la plupart des programmes proposaient des options de configuration et une aide via une interface graphique. Les réglages étaient stockés dans des fichiers ini ou dans le registre Windows, et pouvaient aussi être modifiés manuellement. Aujourd’hui, il faut utiliser un langage de programmation sous forme de binaire de 87 Mo pour générer des fichiers de configuration, et il faut même créer manuellement un fichier de configuration pour exécuter ce langage lui-même. À ce rythme, on finira sans doute par avoir besoin d’un framework de 500 Go, cette fois pour le langage de programmation qui génère les fichiers de configuration. On a l’impression que les développeurs modernes travaillent à créer des problèmes.
    • Pkl était l’un des meilleurs outils utilisés en interne chez Apple, et je suis ravi qu’il soit maintenant publié en open source. Une équipe a migré avec succès plusieurs KLOC de configuration k8s vers pkl, et a utilisé pkl pour écrire la configuration de deux outils de monitoring, générer un site de documentation statique, ainsi que les définitions d’alertes qui relient le tout. Je recommande cet outil et je suis enthousiaste à l’idée de pouvoir à nouveau l’utiliser.
    • Pkl a été construit à l’aide du framework GraalVM Truffle et prend en charge la compilation à l’exécution via les projections de Futamura. Je travaille avec Apple sur ce projet depuis longtemps, et je suis très heureux de pouvoir enfin voir le code source. (Commentaire d’un développeur GraalVM)
    • La possibilité de récupérer des ressources HTTP, de lire des fichiers sur le système de fichiers, ainsi que le fait que le langage soit Turing-complet, sont des fonctionnalités inattendues pour un langage de configuration. Je me demande si cette complexité est réellement justifiée.
    • Après avoir parcouru un peu la documentation, j’ai l’impression qu’ils sont trop obsédés par l’idée de créer un langage pour définir des schémas et transmettre des valeurs minimales. Je crains des modes de défaillance inattendus dus à une utilisation excessive. Mais c’est peut-être justement la fonctionnalité centrale : toute personne qui ajoute pkl à son logiciel participe au final au monstre de configuration qui sera produit. Cela repose sur l’hypothèse qu’un système unifié vaudra toujours mieux qu’un chaos non structuré.
    • Des plugins et extensions sont proposés pour IntelliJ, Visual Studio Code et Neovim, et la prise en charge du Language Server Protocol doit arriver prochainement. Je ne comprends pas pourquoi ils n’ont pas commencé par implémenter le LSP (ou ne l’ont pas fait exclusivement). Tous les éditeurs prennent déjà en charge le LSP, donc il n’aurait pas été nécessaire de développer des implémentations séparées.
    • Après avoir longuement réfléchi aux langages de configuration et après une relation amour/haine avec les schémas, j’en suis arrivé à la conclusion que je ne veux pas de types riches dans la configuration. J’utilise un langage de programmation à typage statique, et dans le langage de configuration je veux me limiter aux chaînes, tableaux et tables de hachage, en repoussant toute validation de type à l’étape de parsing.
    • C’est similaire à Cue, mais plus primitif, moins rigoureux dans ses principes, et écrit en Java.
    • J’ai du mal à comprendre le problème que Pkl cherche à résoudre. En lisant le titre, j’ai pensé qu’il s’agissait d’un nouveau langage de configuration, meilleur, à la manière de TOML, mais après lecture de l’article j’ai plutôt eu l’impression que Pkl est un langage destiné à générer de la configuration. Pkl ne semble pas être le fichier de configuration lui-même, mais plutôt un outil d’abstraction qui aide à construire et réutiliser la configuration de façon plus standardisée. Par exemple, lorsqu’on a une configuration Terraform ou Cloudformation que l’on veut partager ou répéter entre plusieurs projets, la méthode la plus simple consiste souvent à la copier-coller dans un autre projet, puis à modifier quelques lignes pour l’adapter. Je me demande si Pkl aide à résoudre ce problème, ou si quelque chose m’échappe.