GUI แบบ Immediate Mode ได้รับความนิยมเพิ่มขึ้น หลังนักพัฒนาเปลี่ยนจาก Flutter ไปใช้ Framework egui ของ Rust

ทีมชุมชน BigGo
GUI แบบ Immediate Mode ได้รับความนิยมเพิ่มขึ้น หลังนักพัฒนาเปลี่ยนจาก Flutter ไปใช้ Framework egui ของ Rust

การตัดสินใจของนักพัฒนาคนหนึ่งที่ยกเลิกการใช้ Flutter เพื่อเปลี่ยนไปใช้ Framework egui ของ Rust ได้จุดประกายการอพยพอย่างกว้างขวางเกี่ยวกับข้อดีของการพัฒนา GUI แบบ immediate mode เทียบกับ retained mode การเปลี่ยนแปลงนี้เน้นย้ำถึงความหงุดหงิดที่เพิ่มขึ้นต่อความซับซ้อนของการใช้หลายภาษาและความน่าสนใจของแนวทางการพัฒนาที่เรียบง่ายกว่าสำหรับแอปพลิเคชันบางประเภท

การลดความซับซ้อนขับเคลื่อนการย้าย Framework

แรงจูงใจหลักในการเปลี่ยนแปลงมุ่งเน้นไปที่การกำจัดความซับซ้อนที่ไม่จำเป็น การจัดการสองภาษาโปรแกรมมิ่ง - Dart สำหรับ Flutter และ Rust สำหรับตรรกะ backend - สร้างภาระงานที่มากผ่าน FFI (Foreign Function Interface) bindings เครื่องมือ flutter_rust_bridge แม้จะมีประสิทธิภาพ แต่ก็สร้างโค้ดที่อ่านไม่ออกหลายพันบรรทัดที่นักพัฒนาไม่สามารถเข้าใจหรือปรับปรุงได้อย่างง่ายดาย โค้ดที่สร้างขึ้นนี้มักจะเกินจำนวนโค้ดที่เขียนด้วยมือในโครงการขนาดเล็ก ทำให้เกิดภาระการบำรุงรักษาที่มากกว่าประโยชน์ของความสามารถ UI ที่ซับซ้อนของ Flutter

*FFI (Foreign Function Interface): กลไกที่อนุญาตให้โปรแกรมที่เขียนด้วยภาษาหนึ่งเรียกใช้ฟังก์ชันที่เขียนด้วยภาษาอื่น

การเขียนโปรแกรมแบบ Immediate Mode ทำให้การจัดการ State ง่ายขึ้น

แนวทาง immediate mode ของ Framework egui ช่วยขจัดปัญหาหลายอย่างในการพัฒนา UI ไม่เหมือนกับระบบ widget-based ของ Flutter ที่ต้องการการจัดการ state อย่างระมัดระวังผ่าน setState calls และ callback chains ที่ซับซ้อน GUI แบบ immediate mode จะวาดอินเทอร์เฟซทั้งหมดใหม่ทุกเฟรม แนวทางนี้ช่วยขจัดความจำเป็นในการใช้ state management frameworks และป้องกันบั๊กที่น่าหงุดหงิดที่องค์ประกอบ UI ไม่อัปเดตอย่างถูกต้อง การอภิปรายในชุมชนเผยให้เห็นว่านักพัฒนาชื่นชมเป็นพิเศษที่ไม่ต้องเรียนรู้ meta-frameworks เพิ่มเติมอย่าง Provider, Bloc หรือ GetX เพียงเพื่อจัดการการอัปเดต state พื้นฐาน

ข้อดีข้อเสียระหว่าง Immediate Mode กับ Retained Mode

ข้อดีของ Immediate Mode:

  • การจัดการสถานะที่เรียบง่าย
  • ไม่มีความซับซ้อนของ callback
  • การพัฒนาด้วยภาษาเดียว
  • การสร้างต้นแบบที่รวดเร็ว

ข้อเสียของ Immediate Mode:

  • การสนับสนุน accessibility ที่จำกัด
  • ภาระการวาดใหม่อย่างต่อเนื่อง
  • การปรับแต่งภาพลักษณ์ที่น้อยกว่า
  • เน้นไปที่เดสก์ท็อปเป็นหลัก

ข้อดีของ Retained Mode:

  • การรวม accessibility ที่ดีกว่า
  • การอัปเดตการเรนเดอร์ที่มีประสิทธิภาพ
  • การสนับสนุนแอนิเมชันที่หลากหลาย
  • การสนับสนุนมือถือข้ามแพลตฟอร์ม

ข้อเสียของ Retained Mode:

  • การจัดการสถานะที่ซับซ้อน
  • ปัญหาการรวมภาษาหลายภาษา
  • เส้นทางการเรียนรู้ที่สูงชัน
  • การผูกติดกับเฟรมเวิร์ก

ประโยชน์ด้านประสิทธิภาพและความเร็วในการพัฒนา

แม้จะมีความกังวลเกี่ยวกับการวาดใหม่อย่างต่อเนื่อง แต่การใช้งาน immediate mode สมัยใหม่อย่าง egui จะรีเฟรชเฉพาะเมื่อจำเป็น - โดยทั่วไปเมื่อมีการป้อนข้อมูลจากผู้ใช้หรือแอนิเมชันกำลังทำงาน แนวทางภาษาเดียวยังปรับปรุงประสิทธิภาพในกรณีเฉพาะนี้ ช่วยขจัดภาระงานจากการเรียก FFI และการจัดการข้อมูลระหว่าง Dart และ Rust นักพัฒนารายงานว่าแอปพลิเคชัน egui รู้สึกตอบสนองมากกว่า แม้ว่าสิ่งนี้อาจแตกต่างกันไปขึ้นอยู่กับกรณีการใช้งานเฉพาะและคุณภาพการใช้งาน

การเข้าถึงและการสนับสนุนมือถือยังคงเป็นความท้าทาย

การอภิปรายในชุมชนเผยให้เห็นความกังวลที่สำคัญเกี่ยวกับการสนับสนุนการเข้าถึงของ GUI แบบ immediate mode ไม่เหมือนกับ frameworks แบบดั้งเดิมที่รวมเข้ากับคุณสมบัติการเข้าถึงของระบบปฏิบัติการได้ดี frameworks แบบ immediate mode มักจะมีปัญหากับ screen readers และเทคโนโลยีช่วยเหลืออื่นๆ นอกจากนี้ egui และ frameworks ที่คล้ายกันมุ่งเป้าไปที่แอปพลิเคชันเดสก์ท็อปเป็นหลัก ขาดการสนับสนุนแพลตฟอร์มมือถือที่ทำให้ Flutter น่าสนใจสำหรับการพัฒนาข้ามแพลตฟอร์ม

การเปรียบเทียบ Rust GUI Framework

Framework โหมด รองรับมือถือ คุณสมบัติหลัก
egui Immediate ไม่รองรับ Game overlays, แอปเดสก์ท็อปง่ายๆ
Iced Retained ไม่รองรับ Hot reloading, สถาปัตยกรรม Elm
Slint Retained รองรับจำกัด Native widgets, รองรับระบบฝังตัว
Flutter (Dart) Retained รองรับ ข้ามแพลตฟอร์ม, แอนิเมชันที่หลากหลาย

ระบบนิเวศของตัวเลือก GUI ของ Rust ที่เติบโต

การสนทนาได้เน้นย้ำถึงภูมิทัศน์ที่ขยายตัวของ Rust GUI frameworks นอกเหนือจาก egui นักพัฒนากำลังสำรวจทางเลือกอื่นๆ เช่น Iced (retained mode framework ที่มี hot reloading), Slint (ที่เสนอ widgets ที่ดูเป็นธรรมชาติ) และโครงการทดลองอย่าง Xilem แต่ละ framework มุ่งเป้าไปที่กรณีการใช้งานที่แตกต่างกัน ตั้งแต่ game overlays ไปจนถึงแอปพลิเคชันเดสก์ท็อปเต็มรูปแบบ ซึ่งบ่งบอกว่าระบบนิเวศของ Rust กำลังพัฒนาไปสู่การสนับสนุนความต้องการการพัฒนา GUI ที่หลากหลาย

ประสบการณ์ของนักพัฒนาแสดงให้เห็นว่าการเลือก framework ควรสอดคล้องกับความต้องการของโครงการและความสามารถของทีม ในขณะที่ Flutter เป็นเลิศสำหรับแอปพลิเคชันข้ามแพลตฟอร์มที่ขัดเกลาและมีนักออกแบบ UI เฉพาะ frameworks แบบ immediate mode อย่าง egui เสนอข้อได้เปรียบที่น่าสนใจสำหรับนักพัฒนาที่ให้ความสำคัญกับความเรียบง่ายและ codebase แบบรวม มากกว่าความซับซ้อนทางภาพ

อ้างอิง: Why I Switched from Flutter + Rust to Rust + egui

อินเทอร์เฟซการวิเคราะห์ AI ที่แสดงการรวมเทคโนโลยีในการพัฒนาแอปพลิเคชัน เป็นตัวแทนของระบบนิเวศที่เติบโตของเฟรมเวิร์ก GUI ของ Rust
อินเทอร์เฟซการวิเคราะห์ AI ที่แสดงการรวมเทคโนโลยีในการพัฒนาแอปพลิเคชัน เป็นตัวแทนของระบบนิเวศที่เติบโตของเฟรมเวิร์ก GUI ของ Rust