10 Punkte von GN⁺ 2024-02-04 | 2 Kommentare | Auf WhatsApp teilen
  • Pkl (ausgesprochen wie Pickle) ist eine Programmiersprache zur Erzeugung von Konfigurationen, die Apple intern verwendet und nun als Open Source mit dem ersten Release veröffentlicht hat
    • "Configuration that is Programmable, Scalable, and Safe"

  • Statische Sprachen wie JSON, YAML und Property Lists stoßen bei wachsender Komplexität an ihre Grenzen
  • Pkl zielt auf eine Balance zwischen statischen Sprachen und allgemeinen Programmiersprachen ab

Kurze Tour durch Pkl

  • Enthält Funktionen wie Klassen, Funktionen, Schleifen und Typannotationen für eine entwicklerfreundliche Syntax und leichte Erlernbarkeit
  • Pkl-Dateien definieren Konfigurationsschemas und werden verwendet, um andere Konfigurationsdaten zu definieren
  • Pkl-Programme können leicht in gängige Formate wie YAML, JSON und XML gerendert werden

Integrierte Validierung

  • Daten müssen gültig sein, und in Pkl wird Gültigkeit mithilfe von Typannotationen erreicht.
  • Typannotationen können Einschränkungen definieren; fehlschlagende Einschränkungen erzeugen einen Auswertungsfehler.

Paketfreigabe

  • Pkl bietet die Möglichkeit, Pakete zu veröffentlichen und sie in Projekten als Abhängigkeiten einzubinden
  • Pakete lassen sich einfach über GitHub Releases erstellen und veröffentlichen, und Abhängigkeiten können über Projekte verwaltet werden

Sprach-Bindings

  • Pkl kann Konfigurationen als Textausgabe erzeugen und als Library in andere Sprachen eingebettet werden.
  • Pkl-Schemas können als Klassen/Strukturen der Zielsprache generiert werden und unterstützen unter anderem Swift, Go, Java und Kotlin

Editor-Unterstützung

  • Ziel ist es, die Authoring-Erfahrung für Pkl optimal zu gestalten
  • Bietet umfangreiche Unterstützung für JetBrains-Editoren, einschließlich eines IntelliJ-Plugins
  • Bietet Funktionen wie Autovervollständigung, Navigation und Validierung; Unterstützung für das Language Server Protocol ist geplant

Nächste Schritte

  • Empfohlen werden ein ausführlicher Leitfaden zu Pkl, die Sprachreferenz und die Kommunikation über GitHub Discussions
  • Empfohlen werden außerdem ein Sample-Repository für Pkl-Anwendungsbeispiele, der Download der CLI und die Installation von Editor-Plugins

Meinung von GN⁺:

  • Pkl ist eine neue Programmiersprache, die geschaffen wurde, um die Komplexität des Konfigurationsmanagements zu lösen, und dürfte für Entwickler nützlich sein.
  • Die integrierte Validierung und die Paketfreigabe können Wiederverwendbarkeit und Wartbarkeit von Code verbessern.
  • Bindings für verschiedene Sprachen und Editor-Unterstützung machen Pkl in mehr Entwicklungsumgebungen einsetzbar und werden Entwicklern helfen, Konfigurationsmanagement einfacher umzusetzen.

2 Kommentare

 
secret3056 2024-02-05

Ich dachte mir schon, aber es gibt tatsächlich Go-Bindings. Apple scheint ebenfalls viel Go zu verwenden.
apple/pkl-go: Pkl bindings for the Go programming language

 
GN⁺ 2024-02-04
Hacker-News-Kommentare
  • Zusammenfassung der Hacker-News-Kommentare:
    • Vor 25 Jahren boten die meisten Programme Konfiguration über eine GUI und Hilfetexte an. Die Einstellungen wurden in ini-Dateien oder in der Windows-Registry gespeichert und konnten auch manuell bearbeitet werden. Heute muss man eine 87 MB große binäre Programmiersprache verwenden, um Konfigurationsdateien zu erzeugen, und um diese Sprache selbst auszuführen, muss man ebenfalls manuell eine Konfigurationsdatei erstellen. In dieser Lage scheint bald ein 500-GB-Framework nötig zu sein – für eine Programmiersprache, die Konfigurationsdateien erzeugt. Es wirkt, als würden moderne Entwickler davon leben, Probleme zu erschaffen.
    • Pkl war intern bei Apple eines der besten Tools im Einsatz, und es freut sehr, dass es nun als Open Source veröffentlicht wurde. Ein Team hat mehrere kLOC an k8s-Konfiguration erfolgreich nach pkl migriert und mit pkl außerdem Konfigurationen für zwei Monitoring-Tools, eine statische Dokumentations-Website sowie Alert-Definitionen erstellt, die alles miteinander verbinden. Das Tool ist sehr empfehlenswert, und es ist aufregend, es wieder nutzen zu können.
    • Pkl wurde auf dem GraalVM-Truffle-Framework aufgebaut und unterstützt Runtime-Kompilierung mit Futamura-Projektionen. Man habe lange zusammen mit Apple daran gearbeitet und freue sich sehr, nun endlich den Quellcode sehen zu können. (Aussage eines GraalVM-Entwicklers)
    • HTTP-Ressourcen abrufen zu können, Dateien aus dem Dateisystem zu lesen und zugleich Turing-Vollständigkeit zu haben, sind für eine Konfigurationssprache unerwartete Eigenschaften. Es stellt sich die Frage, ob diese Komplexität gerechtfertigt ist.
    • Nach etwas Lektüre der Dokumentation wirkt es so, als sei man zu sehr von der Idee besessen, eine Sprache für Schema-Definitionen und als Träger minimaler Werte zu schaffen. Es gibt Bedenken wegen unerwarteter Fehlermodi durch exzessiven Einsatz. Vielleicht ist genau das aber die Kernfunktion: Jeder, der pkl zu einer Software hinzufügt, beteiligt sich letztlich an dem entstehenden Konfigurationsmonster. Dahinter steht die Annahme, dass ein vereinheitlichtes System weniger schlecht ist als strukturloses Chaos.
    • Es gibt Plugins und Erweiterungen für IntelliJ, Visual Studio Code und Neovim, und Unterstützung für das Language Server Protocol soll bald folgen. Es ist schwer nachvollziehbar, warum nicht zuerst – oder ausschließlich – LSP implementiert wurde. Alle Editoren unterstützen LSP integriert, sodass keine separaten Implementierungen nötig gewesen wären.
    • Nach langem Nachdenken über Konfigurationssprachen und einer Liebe-Hass-Beziehung zu Schemas lautet das Fazit: In Konfigurationen möchte man keine reichen Typen. Stattdessen will man eine statisch typisierte Programmiersprache verwenden und in der Konfigurationssprache nur Strings, Arrays und Hashmaps als Typen zulassen, während sämtliche Typvalidierung in die Parsing-Phase verschoben wird.
    • Ähnlich wie Cue, aber primitiver, mit weniger klaren Prinzipien und in Java geschrieben.
    • Es fällt schwer zu verstehen, welches Problem Pkl eigentlich lösen soll. Nach der Überschrift klang es zunächst wie eine neue, bessere Konfigurationssprache ähnlich TOML, doch nach dem Lesen des Artikels entsteht eher der Eindruck, dass Pkl eine Sprache ist, um Konfiguration zu erzeugen. Pkl scheint also nicht die Konfigurationsdatei selbst zu sein, sondern eher ein abstrahiertes Werkzeug, das hilft, Konfigurationen standardisierter aufzubauen und wiederzuverwenden. Wenn man zum Beispiel Terraform- oder Cloudformation-Konfigurationen projektübergreifend teilen oder wiederholen möchte, ist der einfachste Weg meist, sie in andere Projekte zu kopieren, ein paar Zeilen zu ändern und sie anzupassen. Die Frage ist, ob Pkl genau dieses Problem lösen soll oder ob dabei etwas übersehen wurde.