2 điểm bởi GN⁺ 2025-04-09 | 1 bình luận | Chia sẻ qua WhatsApp
  • Lux là một trình quản lý gói mới nhằm xây dựng một hệ sinh thái phù hợp cho Lua, phục vụ việc tạo, bảo trì và phân phối mã Lua
  • Lux cung cấp CLI đơn giản và trực quan, lấy cảm hứng từ những trình quản lý gói quen thuộc như cargo

Tính năng

  • Khả năng di chuyển hoàn toàn giữa các hệ thống
  • Hỗ trợ build và cài đặt song song 🚀
  • Tự động xử lý việc cài đặt header Lua
  • Có thể phơi bày Lua API thông qua crate lux-lib
  • Quản lý dự án thông qua tệp lux.toml
  • Tự động tạo rockspec
  • Hỗ trợ lockfile mạnh mẽ
  • Build và môi trường phát triển có thể tái lập hoàn toàn
  • Tích hợp định dạng mã và linting
  • Hỗ trợ chạy kiểm thử bằng busted
  • Có thể sử dụng Neovim làm trình thông dịch Lua
  • Thiết lập môi trường thuần khiết
  • Tương thích với hệ sinh thái luarocks

Động lực

Lua

  • Luarocks đã có lịch sử 20 năm nên không còn phù hợp với phát triển Lua hiện đại
  • Lux hướng tới một khởi đầu mới
    • Sử dụng TOML làm định dạng manifest chính để quản lý phụ thuộc
    • Có thể build và cài đặt dự án từ thư mục dự án bằng lệnh build
    • Bắt buộc tuân thủ SemVer
    • Hỗ trợ build song song

Neovim

  • Mức độ phổ biến tăng lên nhờ trình quản lý plugin Neovim rocks.nvim và việc lazy.nvim hỗ trợ Luarocks
  • Lux không mang tính phá hủy và không can thiệp vào cách phân phối plugin Neovim
  • Có thể cài đặt gói theo cấu trúc cây tương thích với Neovim bằng cờ --nvim

Nix

  • Khi plugin Neovim tồn tại dưới dạng gói Luarocks, nixpkgs sẽ sử dụng chúng
  • lux.lock của Lux lưu trữ nguồn và hash rockspec của từng phụ thuộc

Bước tiếp theo

  • Tập trung sửa lỗi và cải thiện thông báo lỗi
  • Dự kiến viết lại rocks.nvim dựa trên Lux
  • Nếu việc viết lại thành công, dự kiến sẽ tạo tác động tích cực đến hệ sinh thái Neovim

Tài liệu

  • Cung cấp tutorial và hướng dẫn trên website tài liệu của Lux
  • Có thể đặt câu hỏi và giải quyết vấn đề thông qua thảo luận GitHub và issue tracker

Giấy phép

  • Lux được cung cấp theo giấy phép MIT
  • Logo Lux được cung cấp theo giấy phép CC BY-NC-SA 4.0

1 bình luận

 
GN⁺ 2025-04-09
Bình luận trên Hacker News
  • Môi trường chạy của các ngôn ngữ kịch bản là một điểm yếu. Cá nhân tôi không dùng Neovim, nhưng tôi vẫn có cảm giác nó sẽ thúc đẩy sự phát triển của Lua. Bryan Cantrill từng gọi Javascript là "LISP mặc quần áo của C". Tôi cảm thấy Lua là điều ngược lại, và đó cũng là lý do tôi thích Lua (lưu ý: tôi chưa từng dùng nó trong công việc)
    • Các dự án như Koreader dùng Lua làm ngôn ngữ ứng dụng chính. Nếu có thể thuyết phục họ chuyển sang, điều đó sẽ tạo thêm niềm tin vào độ chín muồi và mức độ phổ biến của ý tưởng này
  • Dự án thú vị. Tôi muốn cùng làm việc để cải thiện hỗ trợ Lua trong Pixi (thông qua hệ sinh thái conda-forge). Chúng tôi đã đóng gói Lua và một số phần mở rộng C. Phần mở rộng C là cốt lõi của Pixi, nên có vẻ rất phù hợp
  • Nghe tuyệt vời. Tôi dùng Lua rất nhiều, nhưng luarocks quá áp đặt quan điểm nên gần như vô dụng. Nó không thể bắt đầu xử lý bất cứ thứ gì vượt quá "cài thư viện để chạy trực tiếp trên hệ thống cục bộ", hay những thứ xung quanh đó. Bạn có một môi trường scripting tích hợp hoạt động cùng các gói Lua, và muốn đóng gói script dùng trong đó cùng với dependencies? Hãy từ bỏ đi
    • Tôi không biết cái này có tốt hơn cho trường hợp sử dụng đó không, nhưng dù sao thì luarocks cũng rất khó dùng và gây bực bội
  • Cá nhân tôi phản đối mọi trình quản lý gói theo từng ngôn ngữ. Tôi cảm thấy đó không phải hướng đi đúng. Tôi nghĩ thứ như nix là cách tiếp cận tốt hơn nhiều
  • Trình quản lý gói cho Lua nhưng lại phụ thuộc vào Rust
  • Tốt đấy! Lua đã cần một thứ như thế này để việc tạo gói trở nên dễ dàng hơn
  • Hay. Tôi đã muốn có một cách tái lập được để cài các gói Lua trên nhiều thiết bị
  • Tại sao không dùng Lua cho cấu hình thay vì TOML? Nếu tôi nhớ không nhầm thì Lua ban đầu vốn là một ngôn ngữ lược đồ dữ liệu, nên sẽ rất phù hợp
  • Cảm ơn vì đã đối xử với hệ sinh thái Neovim như công dân hạng nhất. Khi phát triển plugin, tôi đã cảm thấy thiếu sự tiện lợi trong việc dùng các thư viện bên thứ ba như Rust và Typescript