3 คะแนน โดย GN⁺ 2024-08-12 | 1 ความคิดเห็น | แชร์ทาง WhatsApp
  • Rust ได้รับเลือกให้เป็น "ภาษาการเขียนโปรแกรมที่ผู้คนอยากใช้มากที่สุด" มาเป็นเวลา 8 ปี และหลายคนก็อยากเขียนโปรแกรม GUI ด้วย Rust
  • ผู้เขียนแบ่งปันแนวทางที่ใช้ Flutter และ flutter_rust_bridge
  • ข้อดี
    • Flutter เป็นแพลตฟอร์มยอดนิยมและเติบโตเต็มที่ มีนักพัฒนาจำนวนมากและแบรนด์ดังใช้งานอยู่ พร้อมมีอีโคซิสเต็มขนาดใหญ่ ทำให้สามารถสร้างฟีเจอร์ที่ต้องการได้ง่าย
    • ฟีเจอร์ "hot reload" ช่วยให้พัฒนา UI ได้รวดเร็ว และรองรับครอสแพลตฟอร์ม จึงสามารถรันบนหลายแพลตฟอร์มด้วยโค้ดเบสเดียวกันได้
  • ข้อเสีย
    • แนวทางนี้ไม่ใช่ Rust ล้วน 100%
      • แต่ก็คล้ายกับ Rust UI อื่น ๆ อีกมาก ที่ใช้แมโครหรือใช้ภาษาอื่นอย่าง HTML/CSS/Slint เพื่อเขียน DSL แบบกำหนดเอง
    • มีเสียงวิจารณ์เกี่ยวกับแพลตฟอร์มเว็บ
      • เหมาะกับ "แอป" บนเว็บและแพลตฟอร์มอื่น ๆ มากกว่าหน้าเว็บแบบสแตติก (เช่น Google Earth, โปรแกรมแก้ไขแอนิเมชันของ Rive เป็นต้น)
    • Flutter ต้องใช้โค้ด boilerplate จำนวนมาก

flutter_rust_bridge คืออะไร?

  • สร้างบริดจ์ระหว่างสองภาษาให้ทำงานได้ราวกับเป็นภาษาเดียวกัน
  • แปลงชนิดข้อมูลหลากหลายรูปแบบ, &mut, async, trait, result, closure ฯลฯ ได้โดยอัตโนมัติ
  • นอกจากใช้สร้าง Rust GUI ด้วย Flutter แล้ว ยังมีกรณีใช้งานอื่น ๆ อีกมาก
    = เช่น ใช้ไลบรารี Rust ใด ๆ ใน Flutter หรือเขียนโค้ดอย่างอัลกอริทึมด้วย Rust แล้วเขียนส่วนอื่นด้วย Flutter เป็นต้น

1 ความคิดเห็น

 
GN⁺ 2024-08-12
ความคิดเห็นจาก Hacker News
  • ใช้มันระหว่างพัฒนาแอปมาหลายปีแล้ว และโดยรวมก็พอใจมาก

    • การอัปเกรดจาก v1 ไป v2 ไม่ได้ยาก และ v2 ก็เปลี่ยนไปมากด้วยฟีเจอร์ที่มีประโยชน์หลายอย่าง ประสบการณ์การสร้างโค้ดที่ดีขึ้น รวมถึงการรองรับ async ของ tokio
    • การเขียน business logic ด้วย Rust และใช้ Dart เป็นฟรอนต์เอนด์มีประสิทธิภาพมาก
    • คิดว่า Flutter/Dart เข้าใจง่ายกว่า React
    • ขอขอบคุณ @fzyzcjy สำหรับงานที่ทำกับ FRB
  • ไม่ค่อยแน่ใจว่าข้อดีของการเขียน UI ด้วย Dart แทน Rust คืออะไร แต่เป็นแฟนของ flutter_rust_bridge

    • งานที่ fzyzcjy และคอมมูนิตี้ทำเพื่อให้เรียกโค้ด Rust จาก Dart ได้อย่างราบรื่นเป็นทรัพย์สินสำคัญมากสำหรับแอป Flutter
    • ใช้เวลาช่วงสุดสัปดาห์สร้าง ImageOptim ขึ้นใหม่ด้วย Flutter และสามารถสร้างแอปที่ทรงพลังและเร็วขึ้นได้โดยใช้ไลบรารีจัดการรูปภาพของ Rust
    • ด้วยการรวม Rust เข้าไป ทำให้แอปมีความสามารถมากขึ้นและทำงานได้เร็วขึ้น
  • เป็นความพยายามที่น่าชื่นชม ตอนนี้กำลังใช้ Tauri อยู่ และสงสัยเกี่ยวกับข้อดีข้อเสียของทั้งสองแบบ

  • ใช้ Flutter สำหรับเดสก์ท็อป UI และใช้ Rust สำหรับแบ็กเอนด์

    • แยกสองส่วนออกจากกันด้วย gRPC แทนการใช้ bridge
    • คิดว่าแนวทางนี้ไม่ผูกกับภาษาใดภาษาหนึ่ง และให้อินเทอร์เฟซที่สะอาดกว่าในการ mock แบ็กเอนด์จากฝั่งฟรอนต์เอนด์
    • สามารถวาง UI และแบ็กเอนด์ไว้คนละอุปกรณ์เพื่อทำสถาปัตยกรรม client/server อย่างแท้จริงได้
    • ข้อเสียคืออินเทอร์เฟซอาจยืดยาวกว่า
  • ทำได้ดี ได้ยินแต่เรื่องดี ๆ เกี่ยวกับ rust_flutter_bridge

    • สงสัยว่า Flutter หนักแค่ไหนเมื่อเทียบกับ mobile native (Java, Swift) ทั้งในแง่ขนาดแอปสุดท้ายและประสิทธิภาพของ UI
  • ชอบแนวทางการสร้าง UI ของ Flutter แต่ไม่ค่อยชอบ Dart

    • เลยคิดว่าในทางทฤษฎีเราน่าจะสร้างภาษาโปรแกรมที่มีไว้สำหรับ UI โดยเฉพาะได้หรือไม่
    • เป็นภาษาที่เชื่อมต่อกับภาษาโปรแกรมหลักได้ เช่น รูปแบบ IDL ของ protobuf แต่แทนที่จะนิยามข้อมูล ก็ใช้ประกาศส่วนติดต่อผู้ใช้
    • นึกถึง QT กับ XAML แต่ QT ไม่ได้เป็นโอเพนซอร์ส และ XAML ก็ดูเหมือนจะไม่ได้ถูกใช้งานมานานแล้ว
  • คิดว่า Material Design ของ Google และเอฟเฟกต์ระเบิดวิบวับดูไม่ใช่หน้าตาที่ดีที่สุด

  • สงสัยเกี่ยวกับการรองรับ accessibility (a11y)

    • หาข้อมูลเรื่องนี้ในเอกสารไม่เจอ แต่ก็จินตนาการไม่ออกว่าจะมีการเปิดตัว GUI toolkit ในปี 2024 โดยไม่รองรับ accessibility จึงสงสัยว่าทำไมถึงไม่พูดถึงเรื่องนี้
  • ดีกว่าการพึ่งพา Chrome shell หรือ web widget มาก ขอชื่นชมในความพยายาม

  • น่าสนใจ IIUC สงสัยว่าสิ่งนี้ทำขึ้นโดยใช้การแปลข้ามซอร์สหรือไม่

    • เอกสารเขียนได้ชัดเจนมากสำหรับผู้ใช้ จนน่าประทับใจ
    • อยากรู้เกี่ยวกับแนวทางนี้และการเปรียบเทียบกับ Rust web framework ที่อิง wasm
    • ข้อดีอย่างหนึ่งของการรวม Rust กับ Flutter คือ Flutter เป็นเฟรมเวิร์กครบชุดอยู่แล้ว และสามารถแชร์โค้ดกับโครงสร้างข้อมูลระหว่างฝั่งเซิร์ฟเวอร์และไคลเอนต์ได้