10 điểm bởi GN⁺ 2024-02-04 | 2 bình luận | Chia sẻ qua WhatsApp
  • Pkl (đọc là Pickle) là một ngôn ngữ lập trình để tạo cấu hình, được Apple mã nguồn mở từ công cụ họ từng dùng nội bộ và công bố bản phát hành đầu tiên
    • "Configuration that is Programmable, Scalable, and Safe"

  • Các ngôn ngữ tĩnh như JSON, YAML, Property Lists có những giới hạn khi độ phức tạp tăng lên
  • Pkl hướng tới sự dung hòa giữa ngôn ngữ tĩnh và ngôn ngữ lập trình đa dụng

Dạo nhanh về Pkl

  • Bao gồm các tính năng như lớp, hàm, vòng lặp, chú thích kiểu để có cú pháp quen thuộc với lập trình viên và dễ học
  • Tệp Pkl được dùng để định nghĩa schema cấu hình và để định nghĩa dữ liệu cấu hình khác
  • Chương trình Pkl có thể dễ dàng được render sang các định dạng phổ biến như YAML, JSON, XML

Kiểm tra hợp lệ tích hợp sẵn

  • Dữ liệu phải hợp lệ, và trong Pkl điều này đạt được thông qua chú thích kiểu.
  • Chú thích kiểu có thể định nghĩa các ràng buộc, và các ràng buộc không đạt sẽ tạo ra lỗi khi đánh giá.

Chia sẻ gói

  • Pkl cung cấp khả năng phát hành gói và nhập chúng vào dự án dưới dạng phụ thuộc
  • Có thể dễ dàng tạo và phát hành gói thông qua GitHub Releases, đồng thời quản lý phụ thuộc trong dự án

Language binding

  • Pkl có thể tạo cấu hình dưới dạng đầu ra văn bản, đồng thời có thể được nhúng như một thư viện trong các ngôn ngữ khác.
  • Schema Pkl có thể được sinh thành lớp/cấu trúc của ngôn ngữ đích, hỗ trợ Swift, Go, Java, Kotlin...

Hỗ trợ trình soạn thảo

  • Mục tiêu là mang lại trải nghiệm viết Pkl tốt nhất có thể
  • Cung cấp hỗ trợ phong phú cho các trình soạn thảo JetBrains, bao gồm plugin IntelliJ
  • Cung cấp các tính năng như tự động hoàn thành, điều hướng, kiểm tra hợp lệ, và có kế hoạch hỗ trợ Language Server Protocol

Các bước tiếp theo

  • Đề xuất xem hướng dẫn chi tiết, tài liệu tham chiếu ngôn ngữ và trao đổi qua GitHub Discussions về Pkl
  • Khuyến nghị kho mẫu ví dụ sử dụng Pkl, tải CLI và cài plugin cho trình soạn thảo

Ý kiến của GN⁺:

  • Pkl là một ngôn ngữ lập trình mới được tạo ra để giải quyết sự phức tạp của quản lý cấu hình, và có vẻ sẽ hữu ích cho các lập trình viên.
  • Tính năng kiểm tra hợp lệ tích hợp sẵn và chia sẻ gói có thể cải thiện khả năng tái sử dụng và tính dễ bảo trì của mã nguồn.
  • Binding sang nhiều ngôn ngữ và hỗ trợ trình soạn thảo đa dạng sẽ giúp Pkl được áp dụng trong nhiều môi trường phát triển hơn, từ đó giúp lập trình viên quản lý cấu hình dễ dàng hơn.

2 bình luận

 
secret3056 2024-02-05

Tôi cũng đang định thử thì thấy có binding cho Go rồi. Có vẻ Apple cũng dùng Golang khá nhiều.
apple/pkl-go: Pkl bindings for the Go programming language

 
GN⁺ 2024-02-04
Ý kiến trên Hacker News
  • Tóm tắt bình luận trên Hacker News:
    • 25 năm trước, phần lớn chương trình đều cung cấp chức năng cấu hình và trợ giúp thông qua GUI. Cấu hình được lưu trong file ini hoặc Windows Registry, và cũng có thể chỉnh sửa thủ công. Còn hiện nay, người ta phải dùng một ngôn ngữ lập trình ở dạng nhị phân nặng 87MB để tạo file cấu hình, và để chạy chính ngôn ngữ đó thì cũng phải tự tay tạo file cấu hình trước. Với đà này có lẽ sẽ còn cần tới một framework 500GB, dành cho ngôn ngữ lập trình dùng để tạo file cấu hình. Có vẻ như các lập trình viên hiện đại đang làm nghề tạo ra vấn đề.
    • Pkl là một trong những công cụ nội bộ tốt nhất từng được dùng tại Apple, và thật vui khi giờ đây nó đã được mã nguồn mở. Một nhóm đã di chuyển thành công vài nghìn dòng cấu hình k8s sang pkl, đồng thời dùng pkl để viết cấu hình cho hai công cụ giám sát, tạo một trang tài liệu tĩnh và định nghĩa cảnh báo để liên kết mọi thứ lại với nhau. Tôi muốn khuyến nghị công cụ này và rất hào hứng vì lại có thể sử dụng nó.
    • Pkl được xây dựng bằng framework GraalVM Truffle và hỗ trợ biên dịch lúc chạy bằng phép chiếu Futamura. Tôi đã làm việc này cùng Apple trong thời gian dài và vô cùng vui vì cuối cùng cũng được xem mã nguồn. (ý kiến từ một nhà phát triển GraalVM)
    • Khả năng tải tài nguyên HTTP, đọc file từ hệ thống tệp và tính Turing đầy đủ là những tính năng không ngờ tới trong một ngôn ngữ cấu hình. Tôi tự hỏi liệu mức độ phức tạp này có thực sự chính đáng hay không.
    • Sau khi đọc qua tài liệu, tôi có cảm giác họ quá say mê ý tưởng tạo ra một ngôn ngữ vừa để định nghĩa schema vừa để truyền giá trị mặc định. Tôi lo ngại về các kiểu lỗi bất ngờ do bị lạm dụng quá mức. Nhưng có lẽ đây cũng chính là tính năng cốt lõi: bất kỳ ai thêm pkl vào phần mềm của mình cuối cùng cũng sẽ tham gia tạo ra một con quái vật cấu hình. Điều này dựa trên giả định rằng một hệ thống thống nhất sẽ còn đỡ tệ hơn sự hỗn loạn không có cấu trúc.
    • Có plugin và extension cho IntelliJ, Visual Studio Code và Neovim, và hỗ trợ Language Server Protocol sẽ sớm được bổ sung. Tôi không hiểu vì sao họ không triển khai LSP trước tiên (hoặc là duy nhất). Mọi trình soạn thảo đều đã hỗ trợ LSP tích hợp, nên đã không cần các triển khai riêng biệt.
    • Sau thời gian dài suy nghĩ về ngôn ngữ cấu hình, và sau khi trải qua mối quan hệ yêu/ghét với schema, tôi đi đến kết luận rằng mình không muốn kiểu dữ liệu phong phú trong cấu hình. Tôi muốn dùng một ngôn ngữ lập trình kiểu tĩnh, còn trong ngôn ngữ cấu hình thì chỉ dùng chuỗi, mảng và hash map làm kiểu dữ liệu, rồi đẩy toàn bộ việc kiểm tra kiểu sang giai đoạn parsing.
    • Nó giống Cue nhưng nguyên thủy hơn, ít nguyên tắc hơn và được viết bằng Java.
    • Tôi gặp khó khăn trong việc hiểu vấn đề mà Pkl đang cố giải quyết. Sau khi đọc tiêu đề, tôi tưởng Pkl là một ngôn ngữ cấu hình mới và tốt hơn kiểu như TOML, nhưng đọc bài xong thì tôi lại có ấn tượng rằng Pkl là một ngôn ngữ để tạo cấu hình. Pkl có vẻ không phải là bản thân file cấu hình, mà là một công cụ trừu tượng giúp xây dựng và tái sử dụng cấu hình theo cách chuẩn hóa hơn. Ví dụ, khi có cấu hình Terraform hoặc Cloudformation muốn dùng chung hoặc lặp lại giữa nhiều dự án, cách dễ nhất thường là sao chép rồi dán từ dự án khác, sau đó chỉnh vài dòng cho phù hợp. Tôi tự hỏi liệu Pkl có phải để giúp giải quyết kiểu vấn đề đó hay không, hay là tôi đang bỏ sót điều gì khác.