3 คะแนน โดย GN⁺ 2024-03-29 | 1 ความคิดเห็น | แชร์ทาง WhatsApp

Dioxus 0.5: เขียนระบบสัญญาณใหม่, ถอด lifetimes ออก, รองรับ CSS hot reloading และอื่น ๆ

  • Dioxus Labs มีกฎไม่เป็นทางการว่าอนุญาตให้มีการเขียนใหม่ครั้งใหญ่ได้เพียงปีละครั้ง
  • Dioxus เป็นไลบรารีสำหรับสร้าง GUI ด้วย Rust ซึ่งเดิมเริ่มต้นจากการเขียน Yew ขึ้นมาใหม่
  • Dioxus 0.5 ปรับเปลี่ยนไปในทิศทางที่เรียบง่าย แข็งแรง และประณีตยิ่งขึ้นตามคำขอของชุมชน

ฟีเจอร์ใหม่

  • เขียน dioxus-core ใหม่ทั้งหมดและลบโค้ด unsafe ออกทั้งหมด
  • เปลี่ยนไปใช้ API แบบ Signal ที่ไม่ต้อง clone โดยไม่ใช้ use_state และ use_ref
  • ลบ lifetimes ทั้งหมดและสถานะ cx: Scope
  • เพิ่มฟังก์ชัน launch เพียงตัวเดียวสำหรับเริ่มแอปบนทุกแพลตฟอร์ม
  • รองรับ asset hot reloading สำหรับ Tailwind และ Vanilla CSS
  • เขียนระบบอีเวนต์ใหม่เพื่อให้เข้าถึงชนิดอีเวนต์ WebSys พื้นฐานของแต่ละแพลตฟอร์มได้
  • ขยายคอมโพเนนต์ให้เพิ่มแอตทริบิวต์ของ element ได้ เช่น Link รับพร็อพทั้งหมดของ <a/>
  • รวม error boundary แบบเป็นหนึ่งเดียวและผสาน server futures เข้ากับ Suspense
  • เพิ่มความเร็วในการปรับจูนเดสก์ท็อป 5 เท่า และมี custom asset handler สำหรับ byte streaming
  • รองรับการสตรีมของ server function และ full-stack hot reloading
  • มีการปรับปรุง QoL, แก้บั๊ก และอื่น ๆ อีกมาก

ปัญหาเรื่อง lifetimes

  • เพื่อลดความซับซ้อนของ Dioxus จึงลบ lifetimes ทั้งหมดออก
  • ปัญหาเรื่อง lifetimes มักทำให้ผู้เริ่มต้น Rust รู้สึกกลัวได้ง่าย และแม้แต่นักพัฒนา Rust ที่มีประสบการณ์ก็ยังสับสนได้
  • Dioxus 0.5 ลบ lifetimes และ Scope ออก แล้วนำระบบสัญญาณซึ่งเป็นโซลูชันจัดการสถานะแบบ Copy เข้ามาใช้

การลบ scope และ lifetimes

  • ในเวอร์ชันใหม่ scope และ lifetime 'bump ถูกลบออก
  • การประกาศคอมโพเนนต์และการใช้ฟังก์ชันรันไทม์ภายในคอมโพเนนต์ทำได้ง่ายขึ้นมาก

ลบโค้ด Unsafe ทั้งหมด

  • การลบ lifetime 'bump และ scope ช่วยให้ลบโค้ด unsafe ออกได้จำนวนมาก
  • dioxus-core 0.5 ไม่มีโค้ด unsafe

สัญญาณ (Signals)

  • เพิ่ม signals เป็นหน่วยพื้นฐานของสถานะแกนหลักในคอมโพเนนต์
  • Signal<T> เป็น Copy แม้ว่าค่าภายใน T จะไม่ใช่ก็ตาม
  • signals ให้การ subscribe ที่ฉลาดกว่า ทำให้มีการ re-render เฉพาะคอมโพเนนต์ที่อ่านสัญญาณนั้นเท่านั้น

CSS hot reloading

  • รองรับ hot reloading ของไฟล์ CSS โดย dx CLI จะเฝ้าดูไฟล์และสตรีมการอัปเดตเข้าแอปทันที

เขียนระบบอีเวนต์ใหม่

  • dioxus 0.5 เปิดเผยชนิดอีเวนต์พื้นฐานของแต่ละแพลตฟอร์ม และเพิ่ม trait ที่ให้ API ข้ามแพลตฟอร์ม

เปิดตัวแบบข้ามแพลตฟอร์ม

  • API ข้ามแพลตฟอร์มใหม่ช่วยให้กำหนดเป้าหมายหลายแพลตฟอร์มด้วยแอปเดียวกันได้ง่าย

ระบบ asset รุ่นเบตา

  • ระบบ asset ใหม่ชื่อ manganis ผสานเข้ากับ CLI เพื่อช่วยตรวจสอบ bundle และปรับแต่ง asset ภายในแอปให้เหมาะสม

เร็วขึ้น 5 เท่าในการเรนเดอร์บนเดสก์ท็อป

  • มีการทำ optimization หลายอย่างเพื่อเพิ่มความเร็วในการเรนเดอร์

การขยายแอตทริบิวต์

  • มีประโยชน์เมื่อให้ความสามารถเพิ่มเติมกับ element บางประเภท

การย่อแอตทริบิวต์

  • สามารถใช้ไวยากรณ์ย่อแอตทริบิวต์เมื่อส่งพร็อพไปยัง element และคอมโพเนนต์ได้

การรวมแอตทริบิวต์หลายบรรทัด

  • เพิ่มฟังก์ชันรวมแอตทริบิวต์เพื่อให้สร้างแอตทริบิวต์แบบมีเงื่อนไขได้ง่าย

การสตรีม server function

  • รองรับให้ server function สามารถสตรีมข้อมูลไปยังไคลเอนต์ได้

แพลตฟอร์ม CLI แบบ full-stack

  • สามารถใช้คำสั่ง dx เพื่อให้บริการแอป full-stack ได้

รองรับ LiveView router

  • router ใช้งานได้ทันทีในแอป LiveView

custom asset handler

  • รองรับ custom asset handler บนเดสก์ท็อปเพื่อสตรีมข้อมูลไปยังเบราว์เซอร์ได้อย่างมีประสิทธิภาพ

การจัดการไฟล์แบบเนทีฟ

  • รองรับการลากไฟล์มาวางบนเดสก์ท็อปได้อย่างถูกต้อง

การจัดการข้อผิดพลาด

  • ใช้ error boundary และ trait สำหรับ throw เพื่อจัดการข้อผิดพลาดในแอปได้ง่าย

hot reloading เป็นค่าเริ่มต้นและโหมด "development" สำหรับเดสก์ท็อป

  • เปิดใช้ hot reloading เป็นค่าเริ่มต้น และปรับปรุงประสบการณ์พัฒนาแอปเดสก์ท็อปอย่างมาก

อัปเดตเทมเพลต dioxus

  • Miles สมาชิกใหม่ของ core team ได้ยกเครื่องเอกสารและเทมเพลตครั้งใหญ่

Dioxus-Community และ Dioxus-std

  • Dioxus Community ได้อัปเดต ecosystem crates ที่สำคัญให้สอดรับกับรีลีส 0.5

ฟีเจอร์ที่กำลังจะมา

  • การทำให้ระบบ asset เสถียรและผสานรวมมากขึ้น, การทำ bundle splitting สำหรับ .wasm, Islands และการโต้ตอบที่กลับมาทำงานต่อได้, server components, developer tools ที่ดีขึ้น, รวมถึงการยกเครื่องฝั่งมือถือและ full-stack

พรีวิวการกลับมาของ Dioxus-Blitz

  • ใน "Blitz 2.0" มีการผสาน Servo ทำให้สามารถเรนเดอร์แบบเนทีฟด้วย WGPU โดยใช้เอนจิน CSS เดียวกับที่ขับเคลื่อน Firefox ได้

วิธีมีส่วนร่วม

  • สามารถช่วยแปลเอกสาร, ลองทำ "good first issue", ปรับปรุงเอกสาร, มีส่วนร่วมกับ CLI, หรือตอบคำถามในชุมชน Discord ได้

ความเห็นของ GN⁺

  • Dioxus 0.5 เป็นอัปเดตสำคัญสำหรับการพัฒนา GUI บนฐาน Rust ที่มอบสภาพแวดล้อมการพัฒนาที่ง่ายและปลอดภัยยิ่งขึ้นให้แก่นักพัฒนา
  • การลบ lifetimes และ scope ช่วยลดความซับซ้อนของการพัฒนา Rust และ API แบบ Signal ก็ทำให้การจัดการสถานะง่ายขึ้นมาก
  • การปรับปรุง CSS hot reloading และระบบอีเวนต์จะช่วยเพิ่มผลิตภาพของการพัฒนาฟรอนต์เอนด์
  • ฟีเจอร์ hot reloading และการเปิดแอปแบบข้ามแพลตฟอร์มช่วยให้นักพัฒนามีประสบการณ์ที่สม่ำเสมอบนหลายแพลตฟอร์ม
  • คาดว่าการเปลี่ยนแปลงเหล่านี้จะส่งผลเชิงบวกต่อชุมชน Rust และการพัฒนาเว็บ โดยเฉพาะผู้ที่พัฒนาแอปเว็บและเดสก์ท็อปด้วย Rust

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

 
GN⁺ 2024-03-29
ความคิดเห็นจาก Hacker News
  • ประสบการณ์ของผู้ใช้คนแรกเกี่ยวกับการเปลี่ยนแปลงใน Dioxus 0.5

    • เมื่อปีที่แล้วผู้ใช้ได้สร้างไคลเอนต์ Mastodon ด้วย Dioxus ซึ่งโดยรวมเป็นประสบการณ์ที่ดี แต่ก็ยังมีส่วนที่ขาดอยู่อีกมาก
    • การเปลี่ยนแปลงใน Dioxus 0.5 ได้ช่วยขจัดความซับซ้อนส่วนใหญ่ที่นักพัฒนาเคยต้องเผชิญ โดยเฉพาะการนำ lifetimes ออกและการแก้ปัญหาการ clone อยู่ตลอด ทำให้คาดหวังประสบการณ์การพัฒนาที่ราบรื่นยิ่งขึ้น
    • แม้ยังไม่ได้ลองเวอร์ชันใหม่ แต่ก็ขอแสดงความยินดีกับความพยายามของทีม
  • คำถามเกี่ยวกับการรองรับ SVG

    • ผู้ใช้สงสัยว่าสามารถโต้ตอบกับ SVG ได้หรือไม่ เช่น วาด Sudoku ด้วย SVG แล้วคลิกแต่ละช่องได้หรือไม่
  • ความอยากรู้อยากเห็นเกี่ยวกับการเขียนโปรแกรม Rust และคำถามเกี่ยวกับวิธีการทำงานของ crate generational-box

    • แม้จะไม่ใช่นักพัฒนา Rust แต่ผู้ใช้ขอคำอธิบายว่า crate generational-box ทำงานอย่างไรจึงเก็บค่าไว้ได้โดยไม่ต้องคัดลอก และสิ่งนี้ปลอดภัยหรือไม่
  • ประสบการณ์พัฒนาโฮมเพจของ Freenet ด้วย Dioxus

    • ผู้ใช้กำลังพัฒนาโฮมเพจแบบกระจายศูนย์ของ Freenet ด้วย Dioxus ซึ่งจะเป็นเว็บไซต์แบบกระจายศูนย์แห่งแรกที่ผู้คนเห็นเมื่อเริ่มตั้งค่า Freenet
    • ผู้ใช้ประทับใจกับการจัดการสถานะและแนวทาง DSL ที่แมปจากโค้ดไปเป็น HTML ซึ่งคล้ายกับ Kweb เฟรมเวิร์กเว็บของ Kotlin
  • ความประทับใจต่อองค์ประกอบความสำเร็จของ React และนวัตกรรมของ Dioxus

    • ผู้ใช้ตื่นเต้นมากที่ Dioxus จับองค์ประกอบความสำเร็จของ React ได้ และต่อยอดด้วยนวัตกรรมพร้อมออกรุ่นอย่างรวดเร็วมาก
    • พร้อมแสดงความยินดีกับทีม และตั้งตารอจะลองใช้ฟีเจอร์ signals ในรีลีสนี้
  • ความเห็นเกี่ยวกับ RSX เมื่อเทียบกับ SwiftUI

    • ผู้ใช้ชอบสิ่งที่ใกล้เคียงกับ SwiftUI มากกว่า RSX และมองว่า React/JSX ไม่ตรงกับวิสัยทัศน์ของตนว่าโค้ด "reactive UI" ในปี 2024 ควรมีหน้าตาอย่างไร
    • แม้ SwiftUI จะไม่สมบูรณ์แบบ แต่รู้สึกว่าโค้ดถูกจัดระเบียบและแบ่งส่วนได้สะอาดกว่าตอนใช้ React
    • ผู้ใช้แย้งว่าข้อดีหลักของการใช้ JSX คือการนำไลบรารีเดิมที่สร้างมาเพื่อเว็บกลับมาใช้ซ้ำได้ แต่ RSX แทบไม่มี "คุณค่าที่ถ่ายโอนได้" นอกจากช่วยให้นักพัฒนานำความเข้าใจเชิงแนวคิดเกี่ยวกับ JSX มาใช้กับ RSX
    • ผู้ใช้เสียดายที่ยังไม่มีโปรเจกต์แนว "SwiftUI but cross-platform" โดยกล่าวถึง Tokamak/TokamakUI ว่ายังไม่เสร็จสมบูรณ์และดูเหมือนกิจกรรมจะลดลงแล้ว
  • ความกังวลเกี่ยวกับการนำ lifetimes ออกจาก Dioxus

    • ผู้ใช้รู้สึกสับสนกับโซลูชันที่ Dioxus ใช้เพื่อนำ lifetimes ออก และสงสัยว่าสิ่งนี้ส่งผลต่อประสิทธิภาพอย่างไร
  • คำถามเกี่ยวกับการผสานรวมกับเว็บคอมโพเนนต์

    • ผู้ใช้เคยมีปัญหาในการทำให้คอมโพเนนต์ Shoelace ทำงานได้ดีเมื่อใช้ Yew และอยากลองทำโปรเจกต์อีกครั้งด้วยเฟรมเวิร์ก Rust ตัวอื่น
  • คำถามเกี่ยวกับวิธีเรนเดอร์แอปแบบเนทีฟ

    • ผู้ใช้สงสัยว่า Dioxus เรนเดอร์แอปแบบเนทีฟภายในอินสแตนซ์ของเบราว์เซอร์หรือไม่