3 poin oleh GN⁺ 2024-03-29 | 1 komentar | Bagikan ke WhatsApp

Dioxus 0.5: penulisan ulang signals, penghapusan lifetime, hot reloading CSS, dan lainnya

  • Di Dioxus Labs ada aturan tidak resmi yang hanya mengizinkan satu penulisan ulang per tahun.
  • Dioxus adalah library untuk membangun GUI dengan Rust, yang awalnya dimulai sebagai penulisan ulang dari Yew.
  • Dioxus 0.5 diubah ke arah yang lebih sederhana, kokoh, dan rapi sesuai permintaan komunitas.

Fitur baru

  • Penulisan ulang penuh dioxus-core yang menghapus semua kode unsafe.
  • Beralih ke API berbasis Signal tanpa clone tanpa menggunakan use_state dan use_ref.
  • Menghapus semua lifetime dan status cx: Scope.
  • Memperkenalkan satu fungsi launch untuk memulai aplikasi di semua platform.
  • Hot reloading aset yang mendukung Tailwind dan Vanilla CSS.
  • Penulisan ulang event yang memungkinkan akses ke tipe event dasar WebSys di tiap platform.
  • Ekstensi komponen untuk menambahkan atribut elemen (contoh: Link menerima semua atribut <a/>).
  • Error boundary terintegrasi serta integrasi server future dan Suspense.
  • Kecepatan rekonsiliasi desktop meningkat 5x dan custom asset handler untuk byte streaming.
  • Streaming server function dan hot reloading full-stack.
  • Banyak peningkatan QoL, perbaikan bug, dan lainnya.

Masalah lifetime

  • Untuk membuat Dioxus lebih sederhana, semua lifetime dihapus.
  • Masalah lifetime mudah membuat pemula Rust takut, dan bahkan membingungkan developer Rust yang berpengalaman.
  • Dioxus 0.5 menghapus lifetime dan Scope serta memperkenalkan signals, solusi manajemen state Copy.

Penghapusan scope dan lifetime

  • Pada versi baru, scope dan lifetime 'bump dihapus.
  • Deklarasi komponen dan penggunaan fungsi runtime di dalam komponen menjadi jauh lebih mudah.

Semua kode unsafe dihapus

  • Dengan penghapusan lifetime 'bump dan scope, banyak kode unsafe ikut dihapus.
  • dioxus-core 0.5 tidak memiliki kode unsafe.

Signals

  • Signals diperkenalkan sebagai elemen state inti komponen.
  • Signal<T> bersifat Copy meskipun nilai internal T bukan.
  • Signals menyediakan subscription yang lebih cerdas, sehingga hanya komponen yang membaca signal yang akan dirender ulang.

Hot reloading CSS

  • Mendukung hot reloading file CSS, dengan dx CLI memantau file dan langsung melakukan streaming pembaruan ke aplikasi.

Penulisan ulang sistem event

  • dioxus 0.5 mengekspos tipe event dasar di tiap platform dan memperkenalkan trait yang menyediakan API lintas platform.

Rilis lintas platform

  • Melalui API lintas platform baru, beberapa platform dapat dengan mudah ditargetkan dengan aplikasi yang sama.

Sistem aset beta

  • Sistem aset baru, manganis, terintegrasi dengan CLI untuk memeriksa, membundel, dan mengoptimalkan aset dalam aplikasi.

Kecepatan rendering desktop meningkat 5x

  • Berbagai optimasi diterapkan untuk meningkatkan kecepatan rendering.

Ekstensi atribut

  • Berguna saat memberikan fungsi tambahan pada elemen tertentu.

Singkatan atribut

  • Dapat menggunakan sintaks singkatan atribut saat meneruskan atribut ke elemen dan komponen.

Penggabungan atribut multi-baris

  • Menambahkan fitur penggabungan atribut agar atribut kondisional lebih mudah dibuat.

Streaming server function

  • Mendukung agar server function dapat melakukan streaming data ke klien.

Platform CLI full-stack

  • Aplikasi full-stack dapat disajikan menggunakan perintah dx.

Dukungan router LiveView

  • Router langsung berfungsi di aplikasi LiveView.

Custom asset handler

  • Di desktop, custom asset handler didukung agar data dapat di-streaming ke browser secara efisien.

Penanganan file native

  • Di desktop, file drop kini didukung dengan benar.

Penanganan error

  • Error dalam aplikasi dapat ditangani dengan mudah menggunakan error boundary dan trait throw.

Hot reloading sebagai default dan mode "development" untuk desktop

  • Hot reloading diaktifkan secara default, sangat meningkatkan pengalaman pengembangan aplikasi desktop.

Pembaruan template dioxus

  • Anggota tim inti baru, Miles, merombak dokumentasi dan template secara besar-besaran.

Dioxus-Community dan Dioxus-std

  • Dioxus Community memperbarui crate ekosistem penting agar sesuai dengan rilis 0.5.

Fitur yang akan segera hadir

  • Stabilisasi dan integrasi sistem aset, bundle splitting untuk .wasm, Islands dan interaksi yang dapat dilanjutkan, server components, developer tools yang ditingkatkan, serta perombakan mobile dan full-stack.

Pratinjau kebangkitan Dioxus-Blitz

  • Dengan mengintegrasikan Servo sebagai "Blitz 2.0", rendering native dimungkinkan menggunakan WGPU dengan engine CSS yang sama yang digunakan untuk menjalankan Firefox.

Cara berkontribusi

  • Anda dapat berkontribusi melalui penerjemahan dokumentasi, mencoba "good first issue", memperbaiki dokumentasi, berkontribusi ke CLI, menjawab pertanyaan komunitas di Discord, dan lainnya.

Pendapat GN⁺

  • Dioxus 0.5 adalah pembaruan penting untuk pengembangan GUI berbasis Rust yang memberi developer lingkungan pengembangan yang lebih mudah dan aman.
  • Penghapusan lifetime dan scope mengurangi kompleksitas pengembangan Rust, dan API berbasis Signal membuat manajemen state menjadi lebih sederhana.
  • Hot reloading CSS dan perbaikan sistem event akan membantu meningkatkan produktivitas pengembangan frontend.
  • Hot reloading dan fitur peluncuran lintas platform memungkinkan developer mendapatkan pengalaman pengembangan yang konsisten di berbagai platform.
  • Perubahan ini diperkirakan akan berdampak positif pada komunitas Rust dan pengembangan web, khususnya bagi mereka yang membangun aplikasi web dan desktop dengan Rust.

1 komentar

 
GN⁺ 2024-03-29
Opini Hacker News
  • Pengalaman pengguna pertama terhadap perubahan di Dioxus 0.5

    • Tahun lalu, pengguna tersebut membuat klien Mastodon menggunakan Dioxus, dan secara keseluruhan pengalamannya baik, tetapi masih ada banyak bagian yang terasa kurang.
    • Perubahan di Dioxus 0.5 menghilangkan sebagian besar kompleksitas yang sebelumnya dihadapi pengembang, khususnya dengan dihapusnya lifetime dan terselesaikannya masalah cloning yang terus-menerus, sehingga diharapkan pengalaman pengembang menjadi lebih nyaman.
    • Pengguna itu belum mencoba versi barunya, tetapi menyampaikan selamat atas usaha tim tersebut.
  • Pertanyaan tentang dukungan SVG

    • Pengguna ingin tahu apakah SVG bisa diinteraksikan, misalnya menggambar sudoku dalam SVG lalu membuat setiap sel dapat diklik.
  • Rasa penasaran terhadap pemrograman Rust dan pertanyaan tentang cara kerja crate generational-box

    • Bukan seorang programmer Rust, tetapi pengguna meminta penjelasan tentang bagaimana crate generational-box dapat mempertahankan nilai tanpa penyalinan, dan apakah hal itu aman.
  • Pengalaman mengembangkan beranda Freenet dengan Dioxus

    • Pengguna sedang mengembangkan beranda terdistribusi Freenet menggunakan Dioxus, yaitu situs web terdistribusi pertama yang akan dilihat orang saat menyiapkan Freenet.
    • Pengguna mendapat kesan positif terhadap pengelolaan state yang mirip dengan Kweb, framework web Kotlin, serta pendekatan DSL yang memetakan HTML dari kode.
  • Kesan tentang faktor kesuksesan React dan inovasi di Dioxus

    • Pengguna sangat antusias karena Dioxus menangkap elemen-elemen yang membuat React sukses lalu menambahkan inovasi di atasnya, dan merilisnya dengan kecepatan yang sangat tinggi.
    • Pengguna menyampaikan selamat kepada tim dan menantikan untuk mencoba fitur signals di rilis ini.
  • Opini tentang RSX dibandingkan SwiftUI

    • Pengguna lebih menyukai sesuatu yang lebih dekat ke SwiftUI daripada RSX, dan menyatakan bahwa React/JSX tidak sesuai dengan visinya tentang seperti apa kode "UI reaktif" seharusnya terlihat pada 2024.
    • SwiftUI memang tidak sempurna, tetapi terasa membuat kode lebih rapi dan lebih terkotak dengan baik dibanding saat menggunakan React.
    • Manfaat utama menggunakan JSX adalah dapat memanfaatkan kembali pustaka yang sudah ada dan dibuat untuk web, tetapi pengguna berpendapat bahwa RSX hampir tidak memiliki "nilai yang bisa ditransfer" selain memungkinkan pengembang memindahkan pengetahuan konseptual mereka tentang JSX ke RSX.
    • Pengguna menyayangkan tidak adanya proyek "SwiftUI but cross-platform", menyebut Tokamak/TokamakUI, tetapi menilai proyek itu belum selesai dan tampaknya aktivitasnya telah berkurang.
  • Kekhawatiran tentang dihapusnya lifetime di Dioxus

    • Pengguna merasa bingung dengan solusi yang menghapus lifetime dari Dioxus, dan ingin tahu dampaknya terhadap performa.
  • Pertanyaan tentang integrasi dengan web component

    • Saat menggunakan Yew, pengguna mengalami kesulitan untuk membuat komponen Shoelace bekerja dengan baik, dan ingin mencoba kembali proyek tersebut dengan framework Rust lain.
  • Pertanyaan tentang cara rendering aplikasi native

    • Pengguna penasaran apakah cara Dioxus merender aplikasi native dilakukan di dalam instance browser.