Apple vydáva Pkl, konfiguračný programovací jazyk

Spoločnosť Apple vytvorila implementáciu konfiguračného jazyka Pkl s otvoreným zdrojom, ktorý podporuje model konfigurácie ako kódu. Súprava nástrojov súvisiaca s Pkl je napísaná v Kotline a publikovaná pod licenciou Apache. Pre vývojové prostredia IntelliJ, Visual Studio Code a Neovim sú pripravené pluginy pre prácu s kódom v jazyku Pkl. Zverejnenie obslužného programu LSP (Language Server Protocol) sa očakáva v blízkej budúcnosti.

Pkl kombinuje vlastnosti ľahko zrozumiteľného deklaratívneho jazyka s pokročilými funkciami univerzálnych jazykov. Jazyk podporuje typové anotácie, triedy, funkcie, výpočtové výrazy, podmienky a cykly. Pkl je možné použiť ako na generovanie statických konfigurácií v rôznych formátoch, ako sú JSON, YAML a XML, tak aj na generovanie modulov na spracovanie špecifikovaných konfiguračných formátov v aplikáciách v rôznych programovacích jazykoch.

Pre Java, Kotlin, Go a Swift sú pripravené väzby pre integráciu Pkl do aplikácií. Samostatne je navrhnutý modul pre integráciu s rámcom Spring. Väzby umožňujú na základe konfigurácie v jazyku Pkl vytvárať hotové balíčky a moduly s triedami pre prácu s opísanou konfiguráciou v aplikácii. Konfiguračné balíčky môžu byť publikované do repozitárov a importované ako závislosti, čo umožňuje zdieľanie kódu Pkl medzi rôznymi projektmi.

Jazyk poskytuje flexibilné nástroje na definovanie podmienok a kontrolu správnosti hodnôt, čo vám umožňuje identifikovať chyby vo finálnej konfigurácii pred jej použitím v aplikácii. Môžete napríklad definovať platný rozsah hodnôt („port: Int(this > 1000)“ alebo „age: Int(isBetween(0, 130))“), či je to potrebné alebo nie, a formát („ZipCode: String(zhoduje sa(Regex( "\\d{5}")))"). Ak priradíte hodnotu, ktorá nespĺňa podmienku, validátor vyvolá chybu (napríklad ak sa pokúsite priradiť hodnotu 1001 parametru definovanému ako „Int(toto > 1000)“).

Napríklad v jazyku Pkl môžete napísať modul Application.pkl s konfiguračnou šablónou na pripojenie k DBMS: modul Názov hostiteľa aplikácie: Port reťazca: UInt16 prostredie: Databáza prostredia: Trieda databázy Databáza { meno používateľa: Heslo reťazca: Hostiteľ reťazca: Port reťazca: UInt16 dbName: String } typealias Prostredie = "dev"|"qa"|"prod"

Ďalej môžete priamo vytvoriť konfiguračný súbor, ktorý používa tento modul na kontrolu správnosti hodnôt: doplňuje “Application.pkl” hostname = “localhost” port = 3599 prostredie = “dev” database { host = “localhost” port = 5786 používateľské meno = heslo „admin“ = read("env:DATABASE_PASSWORD") dbName = "moja aplikácia" }

A tiež napíšte generátor na automatizáciu zmeny čísla portu pre štyri rôzne DBMS: importujte “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 } } }

Ak chcete, môžete exportovať konfiguráciu v inom formáte, napríklad YAML: sidecars: - používateľské meno: heslo správcu: hunter2 hostiteľ: localhost port: 6000 dbName: myapp - používateľské meno: heslo správcu: hunter2 hostiteľ: localhost port: 6001 dbName : myapp - používateľské meno: heslo správcu: hunter2 hostiteľ: localhost port: 6002 dbName: myapp — používateľské meno: heslo správcu: hunter2 host: localhost port: 6003 dbName: myapp

Konfiguračný diagram Pkl možno tiež previesť na triedy alebo štruktúry na vloženie do kódu aplikácie. Môžete napríklad vygenerovať väzbu pre Kotlin: import kotlin.Int import kotlin.Long import kotlin.String data class Application( val hostname: String, val port: Int, val environment: Environment, val database: Database ) { data class Database( val username: String, val password: String, val host: String, val port: Int, val dbName: String ) enum class Environment( val value: String ) { DEV("dev"), QA("qa") , PROD( "prod"); prepísať fun toString() = hodnota } }

Zdroj: opennet.ru

Kúpte si spoľahlivý hosting pre stránky s DDoS ochranou, VPS VDS servery 🔥 Kúpte si spoľahlivý webhosting s ochranou DDoS, VPS VDS servery | ProHoster