Apples nye Pkl-språk kan erstatte både JSON og YAML

– Jeg vil faktisk bruke denne, sier Theo Brown.

Apple har lansert et nytt åpen kildekode-programmeringsspråk laget spesielt for å skrive konfigurasjonsfiler.

I en bloggpost skriver Apple at det nye programmeringsspråket Pkl (uttaltes "pickle") skal gjøre det enklere å skrive konfigurasjonsfiler, spesielt når konfigurasjonene blir veldig komplekse.

Pkl-teamet skriver at det å skrive konfigurasjoner i for eksempel JSON, YAML eller som "Property Lists" ofte innebærer at du må repetere kode. Det er også fort gjort å gjøre feil på grunn av at disse formatene ikke har noen innebygget form for validering.

Konfigurasjonsfiler med for-løkker og validering

Apple og Pkl-teamet skriver i bloggposten at de ønsker å ta det beste fra statiske konfigurasjonsfiler og generelle programmeringsspråk. De vil lage et nytt språk som er deklarativt og enkelt å lese og skrive, men ha muligheter du finner i generelle programmeringsspråk som Kotlin eller JavaScript.

– Vi skapte Pkl fordi vi mener at konfigurasjon er best uttrykt som en blanding av et statisk språk og et generelt programmeringsspråk, skriver Apple.

Når du skriver en konfigurasjonsfil i Pkl kan du blant annet:

  • Bruke for-løkker
  • Ha logikk og validering. For eksempel at et tall må være mellom x og y, eller bruke Regex for å validere en tekststreng.
  • Lese fra miljøvariabler
  • Filer kan deles opp, moduler kan importere andre moduler

Noe av det spesielle med Pkl er at det ikke er meningen at du skal bruke Pkl-konfigurasjonsfilene direkte, men at disse kan kjøres og gjøres om til formater som YAML, JSON eller XML.

Du kan for eksempel lage en for-løkke som dette:

import "Application.pkl"

hidden db: Application.Database = new {
  host = "localhost"
  username = "admin"
  password = read("env:DATABASE_PASSWORD")
  dbName = "myapp"
}

sidecars {
  for (offset in List(0, 1, 2, 3)) {
    (db) {
      port = 6000 + offset
    }
  }
}

Og få generert dette som JSON:

{
  "sidecars": [
    {
      "username": "admin",
      "password": "hunter2",
      "host": "localhost",
      "port": 6000,
      "dbName": "myapp"
    },
    {
      "username": "admin",
      "password": "hunter2",
      "host": "localhost",
      "port": 6001,
      "dbName": "myapp"
    },
    {
      "username": "admin",
      "password": "hunter2",
      "host": "localhost",
      "port": 6002,
      "dbName": "myapp"
    },
    {
      "username": "admin",
      "password": "hunter2",
      "host": "localhost",
      "port": 6003,
      "dbName": "myapp"
    }
  ]
}

Integrert med kodeeditorer og språk

Pkl har integrasjoner mot programmeringsspråk som Swift, Java, Kotlin og Go, med blant annet automatisk kodegenerering fra Pkl-konfigurasjonsfiler.

Det er også tillegg for blant annet VS Code, IntelliJ og Neovim.

Theo Browne har tatt en kikk på Pkl, og virker temmelig overbevist.

– Jeg hadde ikke trodd at dette skulle være så kult, sier Browne.

Se hva han synes her: