Apple publisearret Pkl, in konfiguraasjeprogrammearringstaal

Apple hat in ymplemintaasje fan 'e Pkl-konfiguraasjetaal iepen boarne, dy't in konfiguraasje-as-koade-model befoarderet. De Pkl-relatearre toolkit is skreaun yn Kotlin en publisearre ûnder de Apache-lisinsje. Plugins foar it wurkjen mei koade yn 'e Pkl-taal binne taret foar de ûntwikkelingsomjouwings IntelliJ, Visual Studio Code en Neovim. De publikaasje fan de LSP (Language Server Protocol) handler wurdt ferwachte yn de heine takomst.

Pkl kombinearret de eigenskippen fan in maklik te begripen deklarative taal mei de avansearre funksjes fan algemiene talen. De taal stipet typeannotaasjes, klassen, funksjes, berekkeningsútdrukkingen, betingsten en loops. Pkl kin brûkt wurde sawol foar it generearjen fan statyske konfiguraasjes yn ferskate formaten, lykas JSON, YAML en XML, en om modules te generearjen foar it ferwurkjen fan spesifisearre konfiguraasjeformaten yn applikaasjes yn ferskate programmeartalen.

Bindingen foar it yntegrearjen fan Pkl yn applikaasjes wurde taret foar Java, Kotlin, Go en Swift. In module foar yntegraasje mei it Spring-ramt wurdt apart foarsteld. Bindingen kinne, basearre op 'e konfiguraasje yn' e Pkl-taal, klearmakke pakketten en modules meitsje mei klassen foar it wurkjen mei de beskreaune konfiguraasje yn 'e applikaasje. Konfiguraasjepakketten kinne wurde publisearre nei repositories en ymporteare as ôfhinklikens, wêrtroch Pkl-koade kin wurde dield tusken ferskate projekten.

De taal biedt fleksibele ark foar it definiearjen fan betingsten en it kontrolearjen fan de krektens fan wearden, wêrtroch jo flaters yn 'e definitive konfiguraasje kinne identifisearje foardat it wurdt brûkt yn 'e applikaasje. Jo kinne bygelyks it jildich berik fan wearden definiearje ("poarte: Int (dit> 1000)" of "leeftyd: Int (isBetween(0, 130))"), al of net fereaske, en it formaat ("zipCode: String(matches(Regex( "\\d{5}")))")). As jo ​​tawize in wearde dy't net foldocht oan de betingst, de validator sil smyt in flater (Bygelyks, as jo besykje te jaan de wearde 1001 oan in parameter definiearre as "Int (dit> 1000)").

Bygelyks, yn 'e Pkl-taal kinne jo de Application.pkl-module skriuwe mei in konfiguraasjesjabloan foar ferbining mei in DBMS: module Applikaasje hostnamme: String poarte: UInt16 omjouwing: Miljeu databank: Database klasse Database { brûkersnamme: String wachtwurd: String host: String poarte: UInt16 dbName: String } typealias Environment = "dev"|"qa"|"prod"

Dêrnei kinne jo direkt in konfiguraasjetriem oanmeitsje dy't dizze module brûkt om de krektens fan 'e wearden te kontrolearjen: wiziget "Application.pkl" hostnamme = "localhost" poarte = 3599 environment = "dev" databank { host = "localhost" poarte = 5786 brûkersnamme = "admin" wachtwurd = read("env:DATABASE_PASSWORD") dbName = "myapp" }

En skriuw ek in generator om it feroarjen fan it poartenûmer foar fjouwer ferskillende DBMS's te automatisearjen: ymportearje "Application.pkl" ferburgen db: Application.Database = nij { host = "localhost" brûkersnamme = "admin" wachtwurd = lêzen ("env: DATABASE_PASSWORD" ) dbName = "myapp" } sidecars { foar (offset yn List(0, 1, 2, 3)) { (db) { port = 6000 + offset } } }

As jo ​​​​wolle, kinne jo de konfiguraasje eksportearje yn in oar formaat, bygelyks YAML: sidecars: - brûkersnamme: admin wachtwurd: hunter2 host: localhost poarte: 6000 dbName: myapp - brûkersnamme: admin wachtwurd: hunter2 host: localhost poarte: 6001 dbName : myapp - brûkersnamme: admin wachtwurd: hunter2 host: localhost poarte: 6002 dbName: myapp - brûkersnamme: admin wachtwurd: hunter2 host: localhost poarte: 6003 dbName: myapp

It Pkl-konfiguraasjediagram kin ek wurde omset yn klassen as struktueren foar ynbêde yn applikaasjekoade. Jo kinne bygelyks in bining generearje foar Kotlin: ymportearje kotlin.Int ymportearje kotlin.Long ymportearje kotlin.String data class Application( val hostnamme: String, val port: Int, val environment: Environment, val database: Database ) { data class Database( val brûkersnamme: String, val wachtwurd: String, val host: String, val port: Int, val dbName: String ) enum class Environment( val value: String ) { DEV("dev"), QA("qa") , PROD("prod"); override fun toString() = wearde } }

Boarne: opennet.ru

Keapje betroubere hosting foar siden mei DDoS-beskerming, VPS VDS-tsjinners 🔥 Keapje betroubere websidehosting mei DDoS-beskerming, VPS VDS-tsjinners | ProHoster