Hệ sinh thái Rust đã chào đón một framework mới có tên là Shelgon, được thiết kế để xây dựng các ứng dụng REPL (Read-Eval-Print Loop) tương tác và các shell tùy chỉnh. Mặc dù framework này cung cấp các tính năng đầy hứa hẹn như thực thi lệnh an toàn về kiểu dữ liệu và khả năng giao diện terminal phong phú, cuộc thảo luận của cộng đồng đã nhanh chóng tập trung vào các lựa chọn kiến trúc—đặc biệt là về việc triển khai runtime bất đồng bộ và phương pháp xử lý lỗi.
Các tính năng chính của Framework Shelgon
- Thực thi lệnh an toàn về kiểu dữ liệu
- Tích hợp Runtime bất đồng bộ (hiện tại dựa trên Tokio)
- Khả năng TUI được hỗ trợ bởi ratatui
- Xử lý đầu vào phong phú bao gồm:
- Lịch sử lệnh
- Di chuyển con trỏ
- Hoàn thành tab
- Xử lý Ctrl+C/Ctrl+D
- Hỗ trợ Context tùy chỉnh
- Hỗ trợ STDIN cho đầu vào nhiều dòng
Phụ thuộc vào Runtime bất đồng bộ gây tranh cãi
Quyết định của framework về việc kết hợp với Tokio làm runtime bất đồng bộ đã tạo ra nhiều thảo luận đáng kể giữa những người dùng tiềm năng. Một số nhà phát triển đã đặt câu hỏi tại sao chức năng bất đồng bộ lại là yêu cầu cốt lõi thay vì một tính năng tùy chọn. Một bình luận đặc biệt sâu sắc đã nêu bật những lo ngại về việc buộc người dùng phải áp dụng một runtime cụ thể:
Tại sao tôi lại muốn thêm tokio như một dependency nếu tôi không sử dụng nó?
Quan điểm này phản ánh một sở thích rộng rãi hơn trong cộng đồng Rust đối với các thư viện không phụ thuộc vào runtime cụ thể hoặc cung cấp các giải pháp thay thế đồng bộ. Người tạo ra framework, được xác định trong các bình luận là cat-whisperer, đã ghi nhận những lo ngại này, giải thích rằng triển khai hiện tại cho phép người dùng hoặc là chặn hoặc lên lịch các hoạt động bằng cách truyền vào một runtime, cung cấp cho các nhà phát triển khả năng kiểm soát đồng thời. Họ cũng đề cập đến việc cân nhắc làm cho hỗ trợ bất đồng bộ trở thành một tính năng tùy chọn trong các phiên bản tương lai.
Phương pháp xử lý lỗi bị đặt câu hỏi
Một điểm tranh cãi khác là việc Shelgon sử dụng crate anyhow
để xử lý lỗi trong API công khai của nó. Nhiều nhà phát triển đề xuất rằng các thư viện nên định nghĩa các kiểu lỗi riêng của họ hoặc sử dụng thiserror
thay vì dựa vào anyhow
, thứ thường được coi là phù hợp hơn cho mã ứng dụng hơn là thư viện. Người tạo đã phản hồi rằng mặc dù họ có kế hoạch triển khai thiserror
và error-stack
trong các bản cập nhật trong tương lai, họ đã chọn anyhow
ban đầu vì nó cung cấp một giao diện đơn giản hơn cho phép người dùng tập trung vào logic nghiệp vụ thay vì xử lý lỗi.
Yêu cầu về trình diễn trực quan
Mặc dù Shelgon quảng cáo các khả năng TUI đẹp mắt được hỗ trợ bởi crate ratatui
, một số người bình luận đã lưu ý về việc thiếu các ảnh chụp màn hình hoặc video minh họa các tính năng này. Nhiều người dùng yêu cầu các ví dụ trực quan, với đề xuất sử dụng các công cụ như asciinema để trình diễn khả năng giao diện của framework. Phản hồi này nhấn mạnh tầm quan trọng của việc trình diễn trực quan khi quảng bá các thư viện tập trung vào UI.
Những mối quan ngại của cộng đồng
- Runtime bất đồng bộ: Sự phụ thuộc bắt buộc vào Tokio bị đặt câu hỏi
- Xử lý lỗi: Sử dụng anyhow thay vì các kiểu lỗi đặc thù cho thư viện
- Tài liệu: Thiếu các ví dụ trực quan mặc dù tập trung vào giao diện người dùng
- Đặt tên: Một số quan ngại về việc sử dụng tên của Pokémon ( Shelgon )
So sánh với các giải pháp hiện có
Cuộc thảo luận cũng đề cập đến việc Shelgon so sánh như thế nào với các giải pháp thay thế đã được thiết lập trong hệ sinh thái Rust, chẳng hạn như rustyline và reedline. Người tạo đã ghi nhận sự hỗ trợ rộng rãi của rustyline đối với tương tác người dùng nhưng giải thích rằng Shelgon nhằm mục đích cung cấp một sự trừu tượng hóa hạn chế hơn nhưng mạnh mẽ thông qua phương pháp dựa trên trait, cung cấp khả năng kiểm soát chính xác các khía cạnh của shell trong khi vẫn duy trì khả năng chia sẻ trạng thái.
Khi Shelgon tiếp tục phát triển, người tạo ra dường như tiếp nhận phản hồi từ cộng đồng, thể hiện sự cởi mở đối với các đóng góp và gợi ý rằng framework vẫn đang trong quá trình phát triển tích cực. Đối với các nhà phát triển quan tâm đến việc xây dựng môi trường REPL tùy chỉnh trong Rust, Shelgon đại diện cho một lựa chọn mới thú vị, mặc dù các lựa chọn kiến trúc của nó có thể ảnh hưởng đến việc áp dụng tùy thuộc vào cách chúng phù hợp với các yêu cầu dự án khác nhau.
Tham khảo: Shelgon: A Rust Framework for Building Interactive REPL Applications