Hoʻopuka ʻo Apple iā Pkl, he ʻōlelo hoʻonohonoho hoʻonohonoho

Ua wehe ʻo Apple i ka ʻōlelo papahana Pkl, i hoʻolālā ʻia no ka wehewehe ʻana i ka hoʻonohonoho ʻana a hoʻolaha i ke kumu hoʻohālike "configuration as code". Ua kākau ʻia ka toolchain e pili ana iā Pkl ma Kotlin a paʻi ʻia ma lalo o ka Laikini Apache. Ua hoʻomohala ʻia nā plugins no ka hana ʻana me ke code Pkl no nā wahi hoʻomohala IntelliJ, Visual Studio Code, a me Neovim. Manaʻo ʻia e hoʻokuʻu koke ʻia kahi mea lawelawe Language Server Protocol (LSP).

Hoʻohui ʻo Pkl i nā waiwai o kahi ʻōlelo hoʻolaha maʻalahi e hoʻomaopopo me nā hiki holomua o nā ʻōlelo kumu laulā. Kākoʻo ka ʻōlelo i nā hōʻike ʻano, nā papa, nā hana, nā hōʻike helu, nā kūlana, a me nā loops. Hiki ke hoʻohana ʻia ʻo Pkl e hana i nā hoʻonohonoho static i nā ʻano like ʻole, e like me JSON, YAML, a me XML, a e hana i nā modula no ka hana ʻana i nā ʻano hoʻonohonoho i kuhikuhi ʻia i nā noi i kākau ʻia ma nā ʻōlelo papahana like ʻole.

Loaʻa nā mea hoʻopaʻa no ka hoʻohui ʻana iā Pkl i loko o nā polokalamu no Java, Kotlin, Go, a me Swift. Loaʻa kahi module kaʻawale no ka hoʻohui ʻana me ka ʻōnaehana Spring. Hiki i kēia mau mea hoʻopaʻa iā ʻoe ke hana i nā pūʻolo a me nā module i hana mua ʻia me nā papa e pili ana i kahi hoʻonohonoho Pkl no ka hana ʻana me ka hoʻonohonoho i wehewehe ʻia i loko o kahi polokalamu. Hiki ke paʻi ʻia nā pūʻolo me nā wehewehe hoʻonohonoho i loko o nā waihona a lawe ʻia mai ma ke ʻano he mau hilinaʻi, e ʻae ana i ke code Pkl e kaʻana like ʻia ma nā papahana.

Hāʻawi ka ʻōlelo i nā ala maʻalahi no ka wehewehe ʻana i nā kūlana a me nā hōʻoia hōʻoia waiwai, e ʻae ana iā ʻoe e ʻike i nā hewa i ka hoʻonohonoho hope loa ma mua o ka hoʻopili ʻia ʻana i ka noi. No ka laʻana, hiki iā ʻoe ke wehewehe i kahi laulā waiwai i ʻae ʻia ("port: Int(this > 1000)" a i ʻole "age: Int(isBetween(0, 130))"), inā he koi ʻia kahi kahua a koho paha, a me ke ʻano ("zipCode: String(matches(Regex("\\d{5}")))"). Inā hāʻawi ʻia kahi waiwai i kū ʻole i ke kūlana, e hoʻolei ka mea hōʻoia i kahi hewa (no ka laʻana, i ka wā e hoʻāʻo ai e hāʻawi i ka waiwai 1001 i kahi palena i wehewehe ʻia ʻo "Int(this > 1000)").

No ka laʻana, ma ka ʻōlelo Pkl, hiki iā ʻoe ke kākau i ka module Application.pkl me kahi template no ka hoʻonohonoho ʻana i kahi pilina i kahi DBMS: module Application hostname: String port: UInt16 environment: Environment database: Database class Database { username: String password: String host: String port: UInt16 dbName: String } typealias Environment = "dev"|"qa"|"prod"

ʻO ka mea aʻe, hiki iā ʻoe ke hana pololei i kahi faila hoʻonohonoho e hoʻohana ana i kēia module e nānā i ka pololei o nā waiwai: hoʻololi "Application.pkl" hostname = "localhost" port = 3599 environment = "dev" database { host = "localhost" port = 5786 username = "admin" password = read("env:DATABASE_PASSWORD") dbName = "myapp" }

A e kākau pū i kahi mea hana e hoʻololi i ka helu awa no ʻehā mau DBMS like ʻole: 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) { port = 6000 + offset } } }

Inā makemake ʻia, hiki iā ʻoe ke hoʻokuʻu aku i ka hoʻonohonoho ʻana i kahi ʻano ʻē aʻe, no ka laʻana, YAML: sidecars: - inoa mea hoʻohana: admin ʻōlelo huna: hunter2 host: localhost port: 6000 dbName: myapp - inoa mea hoʻohana: admin ʻōlelo huna: hunter2 host: localhost port: 6001 dbName: myapp - inoa mea hoʻohana: admin ʻōlelo huna: hunter2 host: localhost port: 6002 dbName: myapp - inoa mea hoʻohana: admin ʻōlelo huna: hunter2 host: localhost port: 6003 dbName: myapp

Hiki ke hoʻololi ʻia kahi schema hoʻonohonoho Pkl i nā papa a i ʻole nā ​​​​struct no ka hoʻokomo ʻana i loko o ke code noi. No ka laʻana, hiki iā ʻoe ke hana i kahi nakinaki no 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 } }

Source: opennet.ru

E kūʻai i ka hoʻokipa hilinaʻi no nā pūnaewele me ka pale DDoS, nā kikowaena VPS VDS 🔥 E kūʻai i ka hoʻokipa pūnaewele hilinaʻi me ka pale DDoS, nā kikowaena VPS VDS | ProHoster