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: