Cộng đồng Ruby đang sôi nổi thảo luận về rv, một công cụ quản lý ngôn ngữ mới được xây dựng bằng Rust nhằm cách mạng hóa cách các nhà phát triển xử lý các phiên bản Ruby và các phụ thuộc. Được tạo ra bởi André Arko, một người duy trì Bundler lâu năm, rv hứa hẹn sẽ kết hợp chức năng của nhiều công cụ hiện có thành một giải pháp nhanh chóng và toàn diện.
Cộng đồng đặt câu hỏi về tính đầy đủ của các công cụ hiện tại
Nhiều nhà phát triển Ruby đang đặt câu hỏi liệu rv có giải quyết được các vấn đề thực sự hay tạo ra sự phức tạp không cần thiết. Không giống như hệ sinh thái phân mảnh của Python mà uv đã thống nhất thành công, Ruby đã có các công cụ trưởng thành và hoạt động tốt. Bundler xử lý quản lý phụ thuộc một cách hiệu quả, và các trình quản lý phiên bản khác nhau như rbenv và chruby hoạt động đáng tin cậy đối với hầu hết các nhà phát triển.
Sự hoài nghi lan sâu trong những người Ruby có kinh nghiệm, những người nhớ khi hệ sinh thái của họ đã giải quyết các vấn đề mà các nhà phát triển Python vẫn đang gặp khó khăn cho đến gần đây. Một số lo ngại rằng việc giới thiệu một công cụ khác có thể phân mảnh bối cảnh công cụ tương đối ổn định của Ruby, có khả năng tạo ra địa ngục trình quản lý phiên bản đã từng gây khó khăn cho các ngôn ngữ khác.
Các Công Cụ Thay Thế Được Cộng Đồng Đề Xuất
Trình quản lý đa ngôn ngữ:
- mise (trước đây là rtx) - Quản lý nhiều runtime ngôn ngữ với hỗ trợ file .tool-versions
- asdf - Trình quản lý phiên bản cho nhiều ngôn ngữ với hệ thống plugin
- Nix + direnv - Môi trường phát triển có thể tái tạo
Công cụ chuyên dụng cho Ruby:
- Bundler - Quản lý dependency (tiêu chuẩn hiện tại)
- rbenv - Quản lý phiên bản Ruby
- chruby - Chuyển đổi phiên bản Ruby nhẹ
- rvm - Quản lý phiên bản Ruby và gemset
Lợi ích về tốc độ và tích hợp thu hút sự quan tâm
Bất chấp những lo ngại, lời hứa của rv về việc cải thiện hiệu suất đáng kể đã thu hút sự chú ý. Công cụ này nhằm mục đích làm cho việc cài đặt Ruby và quản lý phụ thuộc trở nên nhanh chóng đến mức có thể chạy âm thầm trước mỗi lần thực thi lệnh. Sự tăng tốc này đến từ việc được viết bằng Rust, theo mô hình thành công đã được thiết lập bởi uv trong hệ sinh thái Python.
Khía cạnh tích hợp đặc biệt hấp dẫn các nhà phát triển hiện đang phải xoay xở với nhiều công cụ. Thay vì quản lý các trình quản lý phiên bản Ruby riêng biệt, Bundler cho phụ thuộc, và các công cụ cài đặt gem khác nhau, rv đề xuất xử lý mọi thứ thông qua một giao diện. Cách tiếp cận thống nhất này có thể đơn giản hóa việc đưa các nhà phát triển mới vào dự án và giảm gánh nặng nhận thức khi phải nhớ các cú pháp lệnh khác nhau.
Xu hướng ưa thích công cụ đa ngôn ngữ nổi lên
Một phần đáng kể của cuộc thảo luận tiết lộ rằng nhiều nhà phát triển ưa thích các công cụ phổ quát như mise (trước đây là rtx) hoặc asdf có thể quản lý đồng thời nhiều ngôn ngữ lập trình. Những nhà phát triển này làm việc trên các ngăn xếp công nghệ khác nhau và thấy các công cụ dành riêng cho ngôn ngữ có tính hạn chế.
Tôi cảm thấy loại công cụ này chỉ hữu ích nếu Ruby là ngôn ngữ duy nhất bạn sử dụng. Tôi phải quản lý nhiều runtime cho hầu hết các dự án.
Sự ưa thích này làm nổi bật một căng thẳng cơ bản trong công cụ dành cho nhà phát triển: các công cụ chuyên biệt thường cung cấp các tính năng dành riêng cho ngôn ngữ tốt hơn, trong khi các công cụ phổ quát mang lại tính nhất quán trên các dự án và công nghệ khác nhau.
Giai đoạn đầu làm dấy lên lo ngại về triển khai
Những hạn chế hiện tại của rv đã làm giảm bớt một số sự nhiệt tình. Công cụ hiện chỉ hỗ trợ Ruby 3.4.1 và các phiên bản mới hơn, và nhiều tính năng cốt lõi vẫn chưa được triển khai. Một số nhà phát triển lo ngại về khả năng tương thích với các định dạng Gemfile.lock hiện có và liệu rv có xử lý đúng cách việc giải quyết phụ thuộc phức tạp mà Bundler đã tinh chỉnh qua nhiều năm hay không.
Việc lựa chọn viết rv bằng Rust thay vì chính Ruby đã khơi dậy các cuộc tranh luận triết học về việc liệu các công cụ hệ sinh thái có nên được xây dựng bằng ngôn ngữ đích của chúng hay không. Mặc dù Rust mang lại lợi ích về hiệu suất, nó có khả năng tạo ra rào cản cho các nhà phát triển Ruby muốn đóng góp vào việc phát triển công cụ.
rv Khả năng Hiện tại so với Tính năng Dự kiến
Hiện đang Hoạt động:
- Tự động chuyển đổi giữa các phiên bản Ruby đã cài đặt trong zsh
- Cài đặt Ruby 3.4.x đã biên dịch sẵn trên macOS và Ubuntu trong ~1 giây
- Quản lý phiên bản Ruby cơ bản
Tính năng Dự kiến:
rv exec
- Chạy các lệnh CLI với tự động cài đặt dependencyrv tool install
- Cài đặt gems như các công cụ CLI độc lập- Hỗ trợ script với thông tin phiên bản Ruby và dependency được nhúng
- Tương thích đầy đủ với Bundler và giải quyết dependency nhanh hơn
- Hỗ trợ các phiên bản Ruby cũ hơn
Kết luận
Dự án rv đại diện cho một nỗ lực đầy tham vọng nhằm hiện đại hóa bối cảnh công cụ của Ruby bằng cách học hỏi từ các đổi mới trong các hệ sinh thái khác. Tuy nhiên, phản ứng trái chiều của cộng đồng Ruby phản ánh sự hài lòng với các giải pháp hiện có và sự cảnh giác với sự phức tạp không cần thiết. Việc rv có được chấp nhận rộng rãi hay không phụ thuộc vào khả năng mang lại những lợi ích hấp dẫn vượt trội hơn chi phí chuyển đổi đối với các nhà phát triển đã cảm thấy thoải mái với các công cụ hiện tại.
Tham khảo: rv, a new kind of Ruby management tool