10 คะแนน โดย GN⁺ 2024-02-04 | 2 ความคิดเห็น | แชร์ทาง WhatsApp
  • Pkl (ออกเสียงว่า Pickle) เป็นภาษาโปรแกรมสำหรับสร้างการตั้งค่า โดย Apple ได้นำสิ่งที่ใช้ภายในองค์กรมาทำเป็นโอเพนซอร์สและประกาศรีลีสแรก
    • "Configuration that is Programmable, Scalable, and Safe"

  • ภาษาคงที่อย่าง JSON, YAML และ Property Lists มีข้อจำกัดเมื่อความซับซ้อนเพิ่มขึ้น
  • Pkl มีเป้าหมายเพื่อสร้างความลงตัวระหว่างภาษาคงที่กับภาษาโปรแกรมเอนกประสงค์

ทัวร์ด่วนของ Pkl

  • มีฟีเจอร์อย่างคลาส ฟังก์ชัน ลูป และ type annotations เพื่อให้ไวยากรณ์คุ้นเคยสำหรับนักพัฒนาและเรียนรู้ได้ง่าย
  • ไฟล์ Pkl ใช้กำหนดสคีมาของการตั้งค่า และใช้กำหนดข้อมูลการตั้งค่าอื่น ๆ
  • โปรแกรม Pkl สามารถเรนเดอร์ออกมาเป็นฟอร์แมตทั่วไปอย่าง YAML, JSON, XML ได้อย่างง่ายดาย

การตรวจสอบความถูกต้องในตัว

  • ข้อมูลต้องถูกต้อง และใน Pkl ใช้ type annotations เพื่อทำให้เกิดการตรวจสอบความถูกต้อง
  • type annotations สามารถกำหนดข้อจำกัดได้ และหากข้อจำกัดไม่ผ่านจะทำให้เกิด evaluation error

การแชร์แพ็กเกจ

  • Pkl มีความสามารถในการเผยแพร่แพ็กเกจและนำเข้ามาเป็น dependency ในโปรเจ็กต์ได้
  • สามารถสร้างและเผยแพร่แพ็กเกจผ่าน GitHub Releases ได้อย่างง่ายดาย และจัดการ dependency ผ่านโปรเจ็กต์ได้

Language bindings

  • Pkl สามารถสร้างคอนฟิกเป็นผลลัพธ์แบบข้อความ และฝังเป็นไลบรารีในภาษาอื่นได้
  • สคีมาของ Pkl สามารถสร้างเป็นคลาส/สตรักต์ของภาษาเป้าหมายได้ โดยรองรับ Swift, Go, Java, Kotlin เป็นต้น

การรองรับเอดิเตอร์

  • มีเป้าหมายเพื่อทำให้ประสบการณ์การเขียน Pkl ดีที่สุด
  • ให้การรองรับอย่างครบถ้วนสำหรับเอดิเตอร์ของ JetBrains รวมถึงปลั๊กอิน IntelliJ
  • มีฟีเจอร์อย่าง autocomplete, การนำทาง, การตรวจสอบความถูกต้อง และมีแผนรองรับ Language Server Protocol

ขั้นตอนถัดไป

  • แนะนำคู่มืออย่างละเอียดสำหรับ Pkl, เอกสารอ้างอิงภาษา และการสื่อสารผ่าน GitHub Discussions
  • แนะนำให้ลองใช้ sample repository สำหรับตัวอย่างการใช้งาน Pkl, ดาวน์โหลด CLI และติดตั้งปลั๊กอินเอดิเตอร์

ความเห็นของ GN⁺:

  • Pkl เป็นภาษาโปรแกรมใหม่ที่สร้างขึ้นเพื่อแก้ปัญหาความซับซ้อนของการจัดการคอนฟิก และดูมีแนวโน้มว่าจะเป็นประโยชน์ต่อนักพัฒนา
  • ความสามารถด้านการตรวจสอบความถูกต้องในตัวและการแชร์แพ็กเกจสามารถช่วยเพิ่มการนำโค้ดกลับมาใช้ซ้ำและความสามารถในการบำรุงรักษาได้
  • การ bind เข้ากับหลายภาษาและการรองรับเอดิเตอร์จะช่วยให้ Pkl ถูกนำไปใช้กับสภาพแวดล้อมการพัฒนาได้หลากหลายขึ้น และช่วยให้นักพัฒนาจัดการคอนฟิกได้ง่ายขึ้น

2 ความคิดเห็น

 
secret3056 2024-02-05

ผมนึกว่าไม่มี แต่มี Go bindings อยู่เหมือนกันนะครับ ดูเหมือนว่า Apple ก็ใช้ Go อยู่ไม่น้อยเหมือนกัน
apple/pkl-go: Pkl bindings for the Go programming language

 
GN⁺ 2024-02-04
ความคิดเห็นจาก Hacker News
  • สรุปความคิดเห็นใน Hacker News:
    • เมื่อ 25 ปีก่อน โปรแกรมส่วนใหญ่มีฟังก์ชันตั้งค่าผ่าน GUI และมีระบบช่วยเหลือ การตั้งค่าถูกเก็บไว้ในไฟล์ ini หรือ Windows Registry และยังแก้ไขด้วยมือได้ด้วย ปัจจุบันกลับต้องใช้ภาษาการเขียนโปรแกรมในรูปไบนารีขนาด 87MB เพื่อสร้างไฟล์ตั้งค่า และแม้แต่การรันภาษานี้เองก็ยังต้องสร้างไฟล์ตั้งค่าด้วยมือก่อนเสียอีก ในสภาพแบบนี้ดูเหมือนสุดท้ายเราคงต้องมีเฟรมเวิร์กขนาด 500GB สำหรับภาษาที่ใช้สร้างไฟล์ตั้งค่าเสียด้วยซ้ำ เหมือนนักพัฒนาสมัยใหม่กำลังทำงานเพื่อสร้างปัญหาขึ้นมาเอง
    • Pkl เป็นหนึ่งในเครื่องมือภายในที่ดีที่สุดที่ Apple เคยใช้ และดีใจที่ตอนนี้เปิดเป็นโอเพนซอร์สแล้ว ทีมหนึ่งย้ายการตั้งค่า k8s หลาย kloc มาเป็น pkl ได้สำเร็จ และยังใช้ pkl เขียนการตั้งค่าสำหรับเครื่องมือมอนิเตอร์ 2 ตัว สร้างเว็บไซต์เอกสารแบบสแตติก และนิยามการแจ้งเตือนที่เชื่อมทุกอย่างเข้าด้วยกัน อยากแนะนำเครื่องมือนี้มาก และตื่นเต้นที่จะได้กลับมาใช้อีกครั้ง
    • Pkl ถูกสร้างขึ้นบนเฟรมเวิร์ก GraalVM Truffle และรองรับการคอมไพล์ขณะรันด้วยการใช้ Futamura projection ทำงานนี้ร่วมกับ Apple มานานมาก และดีใจมากที่ในที่สุดก็ได้เห็นซอร์สโค้ดแล้ว (ความเห็นจากนักพัฒนา GraalVM)
    • ความสามารถในการดึงทรัพยากรผ่าน HTTP การอ่านไฟล์จากระบบไฟล์ และความเป็น Turing-complete เป็นฟังก์ชันที่ไม่คาดคิดในภาษาสำหรับการตั้งค่า จึงสงสัยว่าความซับซ้อนระดับนี้สมเหตุสมผลหรือไม่
    • หลังจากอ่านเอกสารไปเล็กน้อย รู้สึกว่าโครงการนี้หมกมุ่นกับแนวคิดการสร้างภาษาที่เป็นทั้งการนิยามสคีมาและตัวส่งผ่านค่าตั้งต้นมากเกินไป จึงกังวลถึงรูปแบบความล้มเหลวที่คาดไม่ถึงจากการใช้งานเกินขอบเขต แต่บางทีนี่อาจเป็นฟีเจอร์หลักก็ได้: ทุกคนที่เพิ่ม pkl เข้าไปในซอฟต์แวร์ สุดท้ายก็จะกลายเป็นผู้มีส่วนร่วมในสัตว์ประหลาดแห่งการตั้งค่าที่ถูกสร้างขึ้น โดยตั้งอยู่บนสมมติฐานว่าระบบที่เป็นหนึ่งเดียวคงแย่น้อยกว่าความโกลาหลที่ไร้โครงสร้าง
    • มีปลั๊กอินและส่วนขยายสำหรับ IntelliJ, Visual Studio Code และ Neovim และจะเพิ่มการรองรับ Language Server Protocol ในเร็ว ๆ นี้ แต่ไม่เข้าใจว่าทำไมถึงไม่ทำ LSP ก่อนตั้งแต่แรก (หรือทำแค่อย่างเดียวไปเลย) เพราะตัวแก้ไขแทบทั้งหมดรองรับ LSP ในตัวอยู่แล้ว จึงไม่น่าจำเป็นต้องทำส่วนรองรับแยกต่างหาก
    • หลังจากครุ่นคิดเรื่องภาษาการตั้งค่ามานาน และผ่านความสัมพันธ์แบบรัก/เกลียดกับสคีมา สุดท้ายก็ได้ข้อสรุปว่าไม่ต้องการ rich types ในการตั้งค่า ต้องการใช้ภาษาการเขียนโปรแกรมแบบ static type และในภาษาการตั้งค่าอยากให้มีเพียง string, array และ hashmap เป็นชนิดข้อมูล แล้วผลักการตรวจสอบชนิดทั้งหมดไปไว้ในขั้นตอน parsing
    • คล้ายกับ Cue แต่ดิบกว่า มีหลักการน้อยกว่า และเขียนด้วย Java
    • ยังเข้าใจได้ยากว่า Pkl พยายามแก้ปัญหาอะไร ตอนอ่านชื่อครั้งแรกคิดว่า Pkl เป็นภาษาการตั้งค่าแบบใหม่ที่ดีกว่า TOML แต่พออ่านบทความแล้วกลับได้ความรู้สึกว่า Pkl เป็นภาษาสำหรับ สร้าง การตั้งค่า ไม่ใช่ตัวไฟล์ตั้งค่าเอง แต่เป็นเครื่องมือเชิงนามธรรมที่ช่วยสร้างและนำการตั้งค่ากลับมาใช้ซ้ำในรูปแบบที่เป็นมาตรฐานมากขึ้น ตัวอย่างเช่น หากมีการตั้งค่า Terraform หรือ Cloudformation ที่อยากแชร์หรือใช้ซ้ำในหลายโปรเจกต์ วิธีที่ง่ายที่สุดคือคัดลอกไปวางในโปรเจกต์อื่น แล้วแก้ไม่กี่บรรทัดให้เข้ากับงานนั้น จึงสงสัยว่า Pkl ช่วยแก้ปัญหานี้ใช่ไหม หรือยังมีอะไรที่ตนเองพลาดไป