3 điểm bởi GN⁺ 2024-08-12 | 1 bình luận | Chia sẻ qua WhatsApp
  • Rust đã được chọn là "ngôn ngữ lập trình được yêu thích nhất" trong 8 năm, và nhiều người muốn viết chương trình GUI bằng Rust.
  • Chia sẻ một cách tiếp cận sử dụng Flutter và flutter_rust_bridge
  • Ưu điểm
    • Flutter là một nền tảng phổ biến và trưởng thành, được nhiều nhà phát triển và các thương hiệu nổi tiếng sử dụng, có hệ sinh thái lớn nên có thể dễ dàng triển khai các tính năng mong muốn
    • Tính năng "hot reload" giúp phát triển UI nhanh chóng, đồng thời hỗ trợ đa nền tảng nên có thể chạy trên nhiều nền tảng với cùng một codebase
  • Nhược điểm
    • Cách tiếp cận này không phải là Rust thuần 100%
      • Tuy nhiên, điều này cũng tương tự như nhiều UI Rust khác vốn dùng macro hoặc viết DSL tùy biến bằng các ngôn ngữ khác như HTML/CSS/Slint
    • Có những chỉ trích về nền tảng web
      • Phù hợp hơn với các "ứng dụng" trên web và các nền tảng khác (ví dụ: Google Earth, trình biên tập hoạt ảnh của Rive, v.v.) hơn là các trang web tĩnh
    • Flutter cần khá nhiều mã boilerplate

flutter_rust_bridge là gì?

  • Tạo cầu nối giữa hai ngôn ngữ để chúng hoạt động như một ngôn ngữ duy nhất
  • Tự động chuyển đổi nhiều kiểu dữ liệu, &mut, async, trait, result, closure, v.v.
  • Ngoài việc hiện thực GUI Rust bằng Flutter, còn có nhiều trường hợp sử dụng khác
    = Chẳng hạn dùng bất kỳ thư viện Rust nào trong Flutter, hoặc viết phần như thuật toán bằng Rust và phần còn lại bằng Flutter

1 bình luận

 
GN⁺ 2024-08-12
Ý kiến trên Hacker News
  • Đã sử dụng khi phát triển ứng dụng trong vài năm và nhìn chung khá hài lòng

    • Việc nâng cấp từ v1 lên v2 không khó, và v2 mang lại nhiều thay đổi lớn như nhiều tính năng hữu ích, trải nghiệm sinh mã được cải thiện, hỗ trợ tokio async, v.v.
    • Viết logic nghiệp vụ bằng Rust và dùng Dart cho frontend rất hiệu quả
    • Cảm thấy Flutter/Dart dễ hiểu hơn React
    • Gửi lời cảm ơn đến @fzyzcjy vì công sức với FRB
  • Không rõ lợi ích của việc viết UI bằng Dart thay vì Rust, nhưng là fan của flutter_rust_bridge

    • Công sức của fzyzcjy và cộng đồng trong việc giúp gọi mã Rust mượt mà từ Dart là tài sản lớn cho các ứng dụng Flutter
    • Trong một cuối tuần đã dựng lại ImageOptim bằng Flutter, và có thể tạo ra một ứng dụng mạnh mẽ, nhanh hơn nhờ dùng thư viện xử lý ảnh của Rust
    • Nhờ tích hợp Rust mà ứng dụng hoạt động mạnh hơn và nhanh hơn
  • Đây là nỗ lực đáng khen. Hiện đang dùng Tauri và tò mò về ưu nhược điểm của hai bên

  • Dùng Flutter cho desktop UI và Rust cho backend

    • Tách hai phần bằng gRPC thay vì bridge
    • Cách tiếp cận này không phụ thuộc ngôn ngữ và theo họ cung cấp một giao diện gọn gàng hơn để mock backend từ frontend
    • Có thể đặt UI và backend trên các thiết bị khác nhau để triển khai kiến trúc client/server thực sự
    • Nhược điểm là giao diện có thể dài dòng hơn
  • Làm tốt lắm. Chỉ nghe những điều tích cực về rust_flutter_bridge

    • Tò mò Flutter cồng kềnh đến mức nào so với native mobile (Java, Swift) về kích thước ứng dụng cuối cùng và hiệu năng UI
  • Thích cách Flutter tiếp cận việc xây dựng UI, nhưng không thích Dart lắm

    • Tự hỏi về mặt lý thuyết liệu có thể tạo ra một ngôn ngữ lập trình chỉ dành cho UI hay không
    • Một ngôn ngữ có thể giao tiếp với các ngôn ngữ lập trình chính, ví dụ như một dạng IDL của protobuf nhưng thay vì định nghĩa dữ liệu thì khai báo giao diện người dùng
    • Điều này gợi nhớ đến QT và XAML, nhưng QT không phải mã nguồn mở và XAML có vẻ đã lâu không còn được dùng nhiều
  • Không nghĩ Material Design của Google và các hiệu ứng hào nhoáng là thứ trông đẹp nhất

  • Tò mò về hỗ trợ accessibility (a11y)

    • Không tìm thấy thông tin về điều này trong tài liệu, nhưng thật khó tưởng tượng việc phát hành một GUI toolkit vào năm 2024 mà không có hỗ trợ accessibility, nên thắc mắc vì sao lại không được nhắc đến
  • Tốt hơn nhiều so với việc phụ thuộc vào Chrome shell hay web widget, xin khen ngợi nỗ lực này

  • Thú vị. Nếu hiểu đúng thì đang tò mò liệu điều này có được thực hiện bằng dịch mã nguồn sang mã nguồn hay không

    • Tài liệu được viết rất rõ ràng cho người dùng nên khá ấn tượng
    • Muốn biết thêm về cách tiếp cận này và sự so sánh với các framework web Rust dựa trên wasm
    • Một lợi thế của việc kết hợp Rust và Flutter là Flutter vốn đã là một framework hoàn chỉnh, đồng thời có thể chia sẻ mã và cấu trúc dữ liệu giữa phía server và client