I-Apple ine-open-sourced ukuphunyezwa kolwimi loqwalaselo lwe-Pkl, olukhuthaza imodeli yoqwalaselo-njengekhowudi. Isixhobo esinxulumene nePkl sibhalwe eKotlin kwaye sipapashwe phantsi kwelayisensi yeApache. Iiplagi zokusebenza kunye nekhowudi kulwimi lwePkl zilungiselelwe i-IntelliJ, iKhowudi yeVisual Studio kunye neendawo zophuhliso ze-Neovim. Ukupapashwa komphathi we-LSP (iProtocol yeSeva yoLwimi) kulindeleke kungekudala kwixa elizayo.
I-Pkl idibanisa iimpawu zolwimi oluchazayo ekulula ukuluqonda kunye neempawu eziphambili zeelwimi ezijoliswe ngokubanzi. Ulwimi luxhasa uhlobo lwezichasiselo, iiklasi, imisebenzi, iintetho zokubala, iimeko, kunye neeluphu. I-Pkl ingasetyenziswa zombini ukwenza ulungelelwaniso olungatshintshiyo kwiifomati ezahlukeneyo, ezifana ne-JSON, YAML kunye ne-XML, kunye nokuvelisa iimodyuli zokusetyenzwa kweefomathi zoqwalaselo ezikhankanyiweyo kwizicelo kwiilwimi ezahlukeneyo zokucwangcisa.
Izibophelelo zokudibanisa iPkl kwizicelo zilungiselelwe iJava, iKotlin, iGo kunye neSwift. Imodyuli yokudityaniswa nesakhelo seNtwasahlobo icetywa ngokwahlukeneyo. Izibophelelo zivumela, ngokusekelwe kuqwalaselo kulwimi lwePkl, ukwenza iipakethe esele zenziwe kunye neemodyuli ezineeklasi zokusebenza ngoqwalaselo oluchaziweyo kwisicelo. Iipakethe zoqwalaselo zinokupapashwa kwiindawo zokugcina kwaye zingeniswe kumazwe angaphandle njengabaxhomekeke, ukuvumela ikhowudi yePkl ukuba kwabelwane ngayo phakathi kweeprojekthi ezahlukeneyo.
Ulwimi lubonelela ngezixhobo eziguquguqukayo zokuchaza iimeko kunye nokujonga ukuchaneka kwamaxabiso, kukuvumela ukuba uchonge iimpazamo kuqwalaselo lokugqibela ngaphambi kokuba lusetyenziswe kwisicelo. Umzekelo, ungachaza uluhlu olusebenzayo lwamaxabiso (“izibuko: Int(le> 1000)” okanye “ubudala: Int(isBetween(0, 130))”), nokuba iyafuneka okanye ayifunwa, kunye nefomathi. (“iKhowudi yezip: Umtya(iingqangi(Regex( "\\d{5}")))"). Ukuba unika ixabiso elingahambelani nomqathango, umqinisekisi uya kuphosa impazamo (umzekelo, ukuba uzama ukunika ixabiso 1001 kwiparameter echazwe njenge "Int(le> 1000)").
Umzekelo, kulwimi lwePkl ungabhala iSicelo.pkl imodyuli enethempleyithi yoqwalaselo yokuqhagamshela kwi-DBMS: imodyuli yegama lomamkeli wesicelo: Umtya wezibuko: UInt16 okusingqongileyo: Idatabase yendalo esingqongileyo: IDatha yeDatha yeDatabase { igama lomsebenzisi: Igama lokugqitha: Umtya womtya: Izibuko lomtya: UInt16 dbName: Intambo } typealias Environment = "dev"|"qa"|"prod"
Okulandelayo, ungenza ngokuthe ngqo ifayile yoqwalaselo esebenzisa le modyuli ukujonga ukuchaneka kwamaxabiso: ilungisa "Application.pkl" hostname = "localhost" port = 3599 environment = "dev" database {host = "localhost" port = 5786 igama lomsebenzisi = "admin" password = read("env:DATABASE_PASSWORD") dbName = "myapp"}
Kwaye ubhale kwakhona ijenereyitha ukuguqula inombolo yezibuko kwiiDBMS ezine ezahlukeneyo: ngenisa "Isicelo.pkl" idb efihliweyo: Isicelo.Database = entsha {inginginya = "localhost" igama lomsebenzisi = "admin" password = read ("env:DATABASE_PASSWORD" ) dbName = "myapp" } ii-sidecars { ze (offset kuLuhlu (0, 1, 2, 3)) { (db) { port = 6000 + offset }}}
Ukuba uyanqwena, ungathumela ngaphandle uqwalaselo kwifomati eyahlukileyo, umzekelo, YAML: iimoto ezisecaleni: - igama lomsebenzisi: igama eliyimfihlo lomlawuli: hunter2 umamkeli: izibuko lehostela: 6000 dbName: myapp - igama lomsebenzisi: igama eliyimfihlo: hunter2 host: porthost port: 6001 dbName : myapp - igama lomsebenzisi: igama eligqithisiweyo lomlawuli: hunter2 umamkeli: i-localhost port: 6002 dbName: myapp — igama lomsebenzisi: igama eliyimfihlo lomlawuli: hunter2 host: porthost port: 6003 dbName: myapp
Umzobo woqwalaselo lwePkl nawo unokuguqulwa ube ziiklasi okanye izakhiwo zokuzinzisa kwikhowudi yesicelo. Umzekelo, ungenza isibophelelo seKotlin: rhweba ngaphandle kotlin.Int yorhweba kotlin.Ukungenisa ixesha elide kotlin.Udidi lwedatha yedata Isicelo (igama lenginginya: Intambo, izibuko le-val: Int, indawo engqongileyo, isiseko sedatha: Isiseko sedatha) { iklasi yedatha Isiseko sedatha ( igama lomsebenzisi le-val: Intambo, igama eligqithisiweyo le-val: Intambo, inginginya yeval: Umtya, izibuko le-val: Int, i-val dbName: Umtya ) iklasi ye-Enum Imekobume ( ixabiso le-val: Umtya ) { DEV("dev"), QA("qa") , PROD( "prod"); bhala ngaphezulu ulonwabo kuString() = ixabiso } }
umthombo: opennet.ru
