אפל מפרסמת את Pkl, שפת תכנות לתצורה

אפל הפיכה את שפת התכנות Pkl לקוד פתוח, שנועדה להגדיר תצורה ולקדם את מודל "תצורה כקוד". ערכת הכלים הקשורה ל-Pkl כתובה ב-Kotlin ומתפרסמת תחת רישיון Apache. תוספים לעבודה עם קוד Pkl הוכנו עבור סביבות הפיתוח IntelliJ, Visual Studio Code ו-Neovim. בקרוב צפוי להתפרסם מטפל LSP (Language Server Protocol).

Pkl משלבת את התכונות של שפה הצהרתית קלה להבנה עם היכולות המתקדמות של שפות לשימוש כללי. השפה תומכת בהערות סוג, מחלקות, פונקציות, ביטויים חישוביים, תנאים ולולאות. ניתן להשתמש ב-Pkl הן ליצירת תצורות סטטיות בפורמטים שונים, כגון JSON, YAML ו-XML, והן ליצירת מודולים לעיבוד פורמטי תצורה ספציפיים ביישומים בשפות תכנות שונות.

קישורים לשילוב Pkl ביישומים מוכנים עבור Java, Kotlin, Go ו-Swift. מודול לשילוב עם framework Spring מוצע בנפרד. קישורים מאפשרים, בהתבסס על התצורה בשפת Pkl, ליצור חבילות ומודולים מוכנים עם מחלקות לעבודה עם התצורה המתוארת באפליקציה. חבילות עם תיאור תצורה ניתנות לפרסום במאגרים ולייבוא כתלות, מה שמאפשר שימוש משותף בקוד Pkl בין פרויקטים שונים.

השפה מספקת אמצעים גמישים להגדרת תנאים ולבדיקת נכונות הערכים, מה שמאפשר לזהות שגיאות בתצורה הסופית לפני שהיא מיושמת על היישום. לדוגמה, ניתן להגדיר טווח ערכים מקובל ("port: Int(this > 1000)" או "age: Int(isBetween(0, 130))"), מילוי חובה או אופציונלי, ופורמט ("zipCode: String(matches(Regex("\\d{5}")))"). אם מוקצה ערך שאינו תואם את התנאי, המאמת יציג שגיאה (לדוגמה, בעת ניסיון להקצות את הערך 1001 לפרמטר המוגדר כ-"Int(this > 1000)").

לדוגמה, בשפת Pkl ניתן לכתוב את המודול Application.pkl עם תבנית תצורת חיבור של 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»

בשלב הבא, ניתן ליצור קובץ תצורה ישירות המשתמש במודול זה כדי לבדוק את נכונות הערכים: amends "Application.pkl" hostname = "localhost" port = 3599 environment = "dev" database { host = "localhost" port = 5786 username = "admin" password = read("env:DATABASE_PASSWORD") dbName = "myapp" }

וגם לכתוב מחולל שיאפשר שינוי אוטומטי של מספר הפורט עבור ארבעה מערכות ניהול נתונים שונות: 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 } } }

אם תרצו, תוכלו לייצא את התצורה בפורמט אחר, לדוגמה, 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

ניתן גם להמיר את סכימת התצורה של Pkl למחלקות או מבנים לצורך הטמעה בקוד אפליקציה. לדוגמה, ניתן ליצור binding עבור 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 } }

מקור: OpenNet.ru

קנה אירוח אמין לאתרים עם הגנת DDoS, שרתי VPS VDS 🔥 קנה אחסון אתרים אמין עם הגנת DDoS, שרתי VPS VDS | ProHoster