Mae Apple wedi agor yr iaith raglennu Pkl, sydd wedi'i chynllunio ar gyfer diffinio ffurfweddiad ac yn hyrwyddo'r model "ffurfweddiad fel cod". Mae'r gadwyn offer sy'n gysylltiedig â Pkl wedi'i hysgrifennu yn Kotlin a'i chyhoeddi o dan Drwydded Apache. Mae ategion ar gyfer gweithio gyda chod Pkl wedi'u datblygu ar gyfer amgylcheddau datblygu IntelliJ, Visual Studio Code, a Neovim. Disgwylir rhyddhau trinwr Protocol Gweinydd Iaith (LSP) yn fuan.
Mae Pkl yn cyfuno priodweddau iaith ddatganiadol hawdd ei deall â galluoedd uwch ieithoedd at ddibenion cyffredinol. Mae'r iaith yn cefnogi anodiadau math, dosbarthiadau, swyddogaethau, mynegiadau cyfrifiadurol, amodau a dolenni. Gellir defnyddio Pkl i gynhyrchu ffurfweddiadau statig mewn amrywiol fformatau, fel JSON, YAML ac XML, ac i greu modiwlau ar gyfer prosesu fformatau ffurfweddiad penodedig mewn cymwysiadau a ysgrifennwyd mewn amrywiol ieithoedd rhaglennu.
Mae rhwymiadau ar gyfer integreiddio Pkl i gymwysiadau ar gael ar gyfer Java, Kotlin, Go, a Swift. Mae modiwl ar wahân ar gael ar gyfer integreiddio â fframwaith Spring. Mae'r rhwymiadau hyn yn caniatáu ichi greu pecynnau a modiwlau parod gyda dosbarthiadau yn seiliedig ar gyfluniad Pkl ar gyfer gweithio gyda'r cyfluniad a ddisgrifir mewn cymhwysiad. Gellir cyhoeddi pecynnau gyda disgrifiadau cyfluniad mewn ystorfeydd a'u mewnforio fel dibyniaethau, gan ganiatáu i god Pkl gael ei rannu ar draws prosiectau.
Mae'r iaith yn darparu dulliau hyblyg ar gyfer diffinio amodau a gwiriadau dilysu gwerthoedd, gan ganiatáu ichi ganfod gwallau yn y ffurfweddiad terfynol cyn iddo gael ei gymhwyso i'r rhaglen. Er enghraifft, gallwch ddiffinio ystod gwerthoedd derbyniol ("porthladd: Int(this > 1000)" neu "oedran: Int(isBetween(0, 130))"), a yw maes yn ofynnol neu'n ddewisol, a'r fformat ("codzip: llinyn(cyfatebiaethau(Regex("\\d{5}")))"). Os caiff gwerth ei aseinio nad yw'n bodloni'r amod, bydd y dilysydd yn taflu gwall (er enghraifft, wrth geisio aseinio'r gwerth 1001 i baramedr a ddiffinnir fel "Int(this > 1000)").
Er enghraifft, yn yr iaith Pkl, gallwch ysgrifennu'r modiwl Application.pkl gyda thempled ar gyfer ffurfweddu cysylltiad â DBMS: modiwl Enw gwesteiwr y cais: Llinyn porthladd: UInt16 amgylchedd: Amgylchedd cronfa ddata: Dosbarth cronfa ddata Database { enw defnyddiwr: Llinyn cyfrinair: Llinyn gwesteiwr: Llinyn porthladd: UInt16 enw'r db: Llinyn } mathelias Amgylchedd = "dev"|"qa"|"prod"
Nesaf, gallwch greu ffeil ffurfweddu'n uniongyrchol sy'n defnyddio'r modiwl hwn i wirio cywirdeb y gwerthoedd: amends "Application.pkl" hostname = "localhost" port = 3599 environment = "dev" database { host = "localhost" port = 5786 username = "admin" password = read("env:DATABASE_PASSWORD") dbName = "myapp" }
A hefyd ysgrifennu generadur i awtomeiddio newid rhif y porthladd ar gyfer pedwar DBMS gwahanol: 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) { porthladd = 6000 + offset } } }
Os dymunir, gallwch allforio'r cyfluniad mewn fformat arall, er enghraifft, 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
Gellir trosi cynllun ffurfweddu Pkl yn ddosbarthiadau neu strwythurau i'w hymgorffori mewn cod cymhwysiad hefyd. Er enghraifft, gallwch gynhyrchu rhwymiad ar gyfer 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"); override fun toString() = value } }
Ffynhonnell: opennet.ru
