Apple telah menjadikan implementasi bahasa pemrograman konfigurasi Pkl sebagai sumber terbuka, yang mempromosikan model konfigurasi sebagai kode. Toolkit terkait Pkl ditulis di Kotlin dan diterbitkan di bawah lisensi Apache. Plugin untuk bekerja dengan kode dalam bahasa Pkl disiapkan untuk lingkungan pengembangan IntelliJ, Visual Studio Code, dan Neovim. Publikasi pengendali LSP (Language Server Protocol) diharapkan dalam waktu dekat.
Pkl menggabungkan properti bahasa deklaratif yang mudah dipahami dengan fitur lanjutan dari bahasa tujuan umum. Bahasa ini mendukung anotasi tipe, kelas, fungsi, ekspresi komputasi, kondisi, dan loop. Pkl dapat digunakan baik untuk menghasilkan konfigurasi statis dalam berbagai format, seperti JSON, YAML dan XML, dan untuk menghasilkan modul untuk memproses format konfigurasi tertentu dalam aplikasi dalam berbagai bahasa pemrograman.
Binding untuk mengintegrasikan Pkl ke dalam aplikasi disiapkan untuk Java, Kotlin, Go dan Swift. Modul untuk integrasi dengan kerangka Spring diusulkan secara terpisah. Binding memungkinkan, berdasarkan konfigurasi dalam bahasa Pkl, untuk membuat paket dan modul siap pakai dengan kelas untuk bekerja dengan konfigurasi yang dijelaskan dalam aplikasi. Paket konfigurasi dapat dipublikasikan ke repositori dan diimpor sebagai dependensi, memungkinkan kode Pkl dibagikan antar proyek yang berbeda.
Bahasa ini menyediakan alat yang fleksibel untuk menentukan kondisi dan memeriksa kebenaran nilai, memungkinkan Anda mengidentifikasi kesalahan dalam konfigurasi akhir sebelum digunakan dalam aplikasi. Misalnya, Anda dapat menentukan rentang nilai yang valid (āport: Int(this > 1000)ā atau āage: Int(isBetween(0, 130))ā), pengisian wajib atau opsional, dan format (āzipCode : String(cocok(Regex( "\\d{5}")))"). Jika Anda menetapkan nilai yang tidak memenuhi ketentuan, validator akan memunculkan kesalahan (misalnya, jika Anda mencoba menetapkan nilai 1001 ke parameter yang ditentukan sebagai "Int(ini > 1000)").
Misalnya, dalam bahasa Pkl Anda dapat menulis modul Application.pkl dengan templat konfigurasi untuk menyambung ke DBMS: modul Nama host aplikasi: String port: UInt16 lingkungan: Basis data lingkungan: Kelas basis data Basis data { nama pengguna: Kata sandi string: Host string: Port string: UInt16 dbNama: String } typealias Lingkungan = "dev"|"qa"|"prod"
Selanjutnya, Anda dapat langsung membuat file konfigurasi yang menggunakan modul ini untuk memeriksa kebenaran nilainya: mengubah āApplication.pklā hostname = ālocalhostā port = 3599 environment = ādevā database { host = ālocalhostā port = 5786 nama pengguna = āadminā kata sandi = baca("env:DATABASE_PASSWORD") dbName = "aplikasi saya" }
Dan juga tulis generator untuk mengotomatisasi perubahan nomor port untuk empat DBMS yang berbeda: import āApplication.pklā db tersembunyi: Application.Database = new { host = ālocalhostā username = āadminā password = read(āenv:DATABASE_PASSWORDā ) dbName = "aplikasi saya" } sidecars { for (offset dalam Daftar(0, 1, 2, 3)) { (db) { port = 6000 + offset } } }
Jika diinginkan, Anda dapat mengekspor konfigurasi dalam format lain, misalnya YAML: sidecars: - nama pengguna: kata sandi admin: hunter2 host: localhost port: 6000 dbName: myapp - nama pengguna: kata sandi admin: hunter2 host: localhost port: 6001 dbName : aplikasi saya - nama pengguna: kata sandi admin: hunter2 host: localhost port: 6002 dbName: myapp ā nama pengguna: kata sandi admin: hunter2 host: localhost port: 6003 dbName: myapp
Diagram konfigurasi Pkl juga dapat diubah menjadi kelas atau struktur untuk disematkan dalam kode aplikasi. Misalnya, Anda dapat membuat pengikatan untuk Kotlin: import kotlin.Int import kotlin.Long import kotlin.String kelas data Aplikasi( val hostname: String, val port: Int, val environment: Environment, val database: Database ) { data class Basis data( nama pengguna val: String, kata sandi val: String, host val: String, port val: Int, val dbNama: String ) enum kelas Lingkungan( nilai val: String ) { DEV("dev"), QA("qa") , PROD( "prod"); ganti kesenangan toString() = nilai } }
Sumber: opennet.ru
