Apple għandha implimentazzjoni b'sors miftuħ tal-lingwa tal-konfigurazzjoni Pkl, li tippromwovi mudell ta 'konfigurazzjoni bħala kodiċi. L-għodda relatata mal-Pkl hija miktuba f'Kotlin u ppubblikata taħt il-liċenzja Apache. Il-plugins biex jaħdmu bil-kodiċi fil-lingwa Pkl huma ppreparati għall-ambjenti ta 'żvilupp IntelliJ, Visual Studio Code u Neovim. Il-pubblikazzjoni tal-handler LSP (Language Server Protocol) hija mistennija fil-futur qarib.
Pkl jgħaqqad il-proprjetajiet ta 'lingwa dikjarattiva faċli biex tinftiehem mal-karatteristiċi avvanzati ta' lingwi għal skopijiet ġenerali. Il-lingwa tappoġġja annotazzjonijiet tat-tip, klassijiet, funzjonijiet, espressjonijiet komputazzjonali, kundizzjonijiet, u loops. Pkl jista 'jintuża kemm biex jiġġenera konfigurazzjonijiet statiċi f'diversi formati, bħal JSON, YAML u XML, kif ukoll biex jiġġenera moduli għall-ipproċessar ta' formati ta 'konfigurazzjoni speċifikati f'applikazzjonijiet f'diversi lingwi ta' programmar.
L-irbit għall-integrazzjoni ta' Pkl fl-applikazzjonijiet huma ppreparati għal Java, Kotlin, Go u Swift. Modulu għall-integrazzjoni mal-qafas tar-Rebbiegħa huwa propost separatament. L-irbit jippermettu, abbażi tal-konfigurazzjoni fil-lingwa Pkl, li jinħolqu pakketti lesti u moduli bi klassijiet biex jaħdmu bil-konfigurazzjoni deskritta fl-applikazzjoni. Il-pakketti tal-konfigurazzjoni jistgħu jiġu ppubblikati fir-repożitorji u importati bħala dipendenzi, li jippermettu li l-kodiċi Pkl jinqasam bejn proġetti differenti.
Il-lingwa tipprovdi għodod flessibbli biex tiddefinixxi l-kundizzjonijiet u tiċċekkja l-korrettezza tal-valuri, li tippermettilek tidentifika żbalji fil-konfigurazzjoni finali qabel ma tintuża fl-applikazzjoni. Pereżempju, tista' tiddefinixxi l-firxa valida ta' valuri ("port: Int(dan > 1000)" jew "età: Int(isBetween(0, 130))"), kemm jekk hija meħtieġa jew le, u l-format ("zipCode: String(taqbel(Regex( "\\d{5}")))")). Jekk tassenja valur li ma jissodisfax il-kundizzjoni, il-validatur se jarmi żball (pereżempju, jekk tipprova tassenja l-valur 1001 għal parametru definit bħala "Int(dan > 1000)").
Pereżempju, fil-lingwa Pkl tista’ tikteb il-modulu Application.pkl b’mudell ta’ konfigurazzjoni għall-konnessjoni ma’ DBMS: modulu Applikazzjoni hostname: String port: ambjent UInt16: Environment database: Database class Database { username: String password: String host: String port: UInt16 dbName: String } typealias Environment = "dev"|"qa"|"prod"
Sussegwentement, tista 'toħloq direttament fajl ta' konfigurazzjoni li juża dan il-modulu biex tivverifika l-korrettezza tal-valuri: temenda "Application.pkl" hostname = "localhost" port = 3599 ambjent = "dev" database { host = "localhost" port = 5786 username = "admin" password = aqra ("env:DATABASE_PASSWORD") dbName = "myapp" }
U wkoll ikteb ġeneratur biex awtomat it-tibdil tan-numru tal-port għal erba' DBMSs differenti: importazzjoni "Application.pkl" moħbija db: Application.Database = ġdid { host = "localhost" username = "admin" password = aqra ("env:DATABASE_PASSWORD" ) dbName = "myapp" } sidecars { għal (offset fil-Lista (0, 1, 2, 3)) { (db) { port = 6000 + offset } } }
Jekk mixtieq, tista' tesporta l-konfigurazzjoni f'format differenti, pereżempju, YAML: 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
Id-dijagramma tal-konfigurazzjoni Pkl tista 'wkoll tiġi kkonvertita fi klassijiet jew strutturi għall-inkorporazzjoni fil-kodiċi tal-applikazzjoni. Pereżempju, tista' tiġġenera rabta għal Kotlin: import kotlin.Int import kotlin.Long import kotlin.String data class Applikazzjoni (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"); override gost toString () = valur } }
Sors: opennet.ru
