Karat dan perakitan web pada 2019

Kompilasi Karat ke WebAssembly harus menjadi opsi terbaik untuk mendapatkan kode yang cepat dan andal
untuk web. Selain itu, dengan cara yang sama bahwa Rust terintegrasi dengan panggilan C
konvensi dan perpustakaan pada target asli, Karat juga harus diintegrasikan dengan
JavaScript dan HTML5 di web. Ini adalah domain Rust dan WebAssembly.
nilai-nilai fundamental dari kelompok kerja.

Pada tahun 2018, kami mencapainya. mungkin untuk pembedahan menggantikan kinerja yang sensitif
JavaScript dengan rakitan web yang dibuat oleh Rust.

Saya mengusulkan agar kami membuat adopsi besar-besaran dari Rust dan WebAssembly
praktis di 2019.

# RustWasm2019: Untuk menyediakan beberapa konteks untuk entri blog ini,
Karat domain dan kelompok kerja WebAssembly meminta
Proposal untuk peta jalan 2019. Ini adalah proposal saya. Saya mendorong Anda untuk menambahkan
Suara Anda ke diskusi juga!

Air pasang mengangkat semua perahu

Kita harus membangun seperangkat alat perpustakaan yang digabungkan secara bebas yang membuat Rust dan
Pengembangan praktis majelis web. Jika Anda memasukkan dengan hati-hati kecil
modul wasm dalam sistem JavaScript yang ada, yang mendesain suatu isme besar
modul, atau ketika memulai aplikasi web lapangan hijau, perangkat ini harus
produktif

Orang menggunakan pustaka dan kerangka kerja tingkat tinggi daripada menggunakan API Web
secara langsung karena mereka ingin abstraksi yang dapat mereka ekspresikan secara alami
diri mereka sendiri Misalnya:

  • Saya lebih suka menggambarkan bagaimana saya ingin DOM melihat momen ini, bukan
    daftar daftar modifikasi yang akan mengubah status Anda saat ini menjadi
    keadaan yang saya inginkan
  • Saya lebih suka berpikir dalam hal tipe Rust, bukan mentah, byte bersambung
    dalam telah mampu pulihIsi respons HTTP atau di toko objek dalam basis data yang diindeks.

Untuk mencapai tingkat abstraksi itu, kita akan membutuhkan seperangkat yang berbeda
perpustakaan untuk beragam kapasitas yang dihadirkan oleh Web:

  • Jaringan, telah mampu pulihdan WebSockets
  • Bekerja dengan bentuk dan
  • Pengatur waktu dan setTimeout
  • Web GL dan Audio Web
  • Penyimpanan klien persisten dengan basis data terindeks
  • SATU console.logbackend berdasarkan env_logger dan fasad penebangan karat
  • Perutean URL dan window.history
  • Elemen khusus dan komponen web.
  • Dll …

Pada 2018, kami menggunakan semua hal ini. mungkin di mana Anda dapat mengakses
Mendasari JavaScript dan API web secara langsung via wasm-bindgen, js-sys dan
web-sy
, tetapi ini setara dengan pemrograman melawan
libc pak langsung Pada 2019, kita harus membuat abstraksi tingkat tinggi itu
Bungkus API yang mendasari dan tidak diformat untuk mendapatkan pengalaman yang lebih baik yang, pada akhirnya,
Lebih banyak lagi praktis. Aplikasi Green Field Rust dan WebAssembly akan menggunakan a
kotak payung yang menghubungkan seluruh perangkat dan mengekspornya kembali
Kotak individual. Modul wasm kecil dan spesifik yang terintegrasi lagi di
aplikasi JavaScript yang sudah ada akan memilih dan memilih pustaka yang relevan
toolkit bukannya mengandalkan seluruh kotak payung.

Kita harus bersama-sama membangun pustaka dan alat toolkit tingkat tinggi ini.
Kotak payung yang menyatukannya. Ada banyak ruang di sini untuk
kontributor untuk mengintensifkan dan memberikan kepemimpinan untuk komponen tertentu
perpustakaan Seperangkat alat dan semua kotak mereka harus mencerminkan
Nilai-nilai inti:

  • Cepat: Mari tunjukkan kepada semua orang betapa cepatnya Web 😉 Biaya nol
    abstraksi dari awal. Jangan mengembara dengan cara yang bahagia untuk jatuh dari a
    tebing kinerja. Tidak ada gambar yang dijatuhkan

  • Tepercaya: Salah satu hal yang saya sukai tentang komunitas Rust adalah
    Standar tinggi yang kami sampaikan, khususnya untuk koreksi. Kami seharusnya
    Manfaatkan sistem tipe Rust untuk memaksakan koreksi, tulis tes berdasarkan properti
    dengan pemeriksaan cepat, dan memiliki lebar tes integrasi
    berjalan di browser tanpa kepala
    . Kami bermaksud membangun yang solid.
    pondasi, dan seharusnya tidak ada alasan untuk mempertanyakan strukturnya
    integritas

  • Integrasi sempurna dengan JavaScript dan web: Kita harus memberdayakan
    Tambahan adopsi Karat dan WebAssembly: menulis ulang dari awal tidak
    praktis. Juga, ada banyak kode JavaScript yang tidak
    Masuk akal untuk menulis ulang Rust karena itu baik-baik saja sekarang.

Selain mendukung nilai-nilai inti kami, perangkat kami juga harus:

  • Modular: Ambil atau tinggalkan kotak apa pun di toolkit. Kami membuat tidak
    Dia ingin membangun taman berdinding monolitik! Tujuannya adalah untuk memperkuat pertukaran,
    kompatibilitas dan perbaikan; mengurangi upaya duplikasi di seluruh
    Pengembangan ekosistem karat dan perakitan web.

  • Ergonomis: Abstraksi karat tidak hanya nol biaya, tetapi juga
    Ekspresif! Kita harus memanfaatkan ini untuk membangun API yang menyenangkan untuk diajak bekerja sama
    dengan. itu glium kotak adalah contoh yang sangat baik dari transmutasi a
    kotak Rust yang indah dari API crufty yang tidak dirancang untuk Rust
    bahasa

Beberapa API web yang disebutkan di atas sudah diintegrasikan ke API tingkat tinggi
Di dalam kotak yang sudah ada. Namun, beberapa dari kotak yang ada memuaskan semua
kebutuhan kita Yang paling umum adalah mereka tidak memiliki modularitas: kita telah melihat lebih banyak
"Tandai" bahwa perpustakaan dari satu tujuan dikumpulkan dalam "set alat".
Namun, kita harus berkolaborasi untuk memperbaiki kotak yang ada dan memprovokasi mereka
terpisah di perpustakaan kecil dari satu tujuan di mana itu masuk akal dan mereka semua
di atas kapal

Akhirnya, inspirasi untuk ide ini mengembangkan seperangkat alat yang digabungkan secara bebas.
berasal dari proyek Tide dari kelompok kerja domain Jaringan Karat, dan
juga dari proyek JavaScript Choo. Terima kasih!

Saat ini, paket wasm Atur bangunan dan tes Anda
alur kerja, dan menghasilkan a package.json file untuk membantu Anda mengintegrasikan dengan
Alat JavaScript. Ini akan menerbitkan paket WebAssembly yang dibuat oleh Rust untuk
NPM, memfasilitasi distribusi.

Namun ada beberapa hal yang ingin kami sertakan pada 2018 yang tidak sepenuhnya
Buat potongan:

  • Mengintegrasikan dan mengotomatiskan pelaksanaan itu biner proyek wasm-opt
    alat
    .
  • Dukungan untuk menghasilkan paket NPM tunggal yang akan berfungsi baik di Web dan di
    di Node.js.
  • Membiarkan kotak perpustakaan X untuk menyatakan bahwa Anda memiliki dependensi runtime dalam
    paket NPM eksternal, dan yang tercermin dalam package.json itu
    paket wasm menghasilkan untuk beberapa kotak Y yang bergantung pada transitif X.
  • Termasuk aset lokal (khususnya, fragmen JavaScript) di paket wasm'S
    Paket NPM dihasilkan. Sekali lagi, dengan dukungan untuk kotak yang transitif.
    tergantung

Saya menduga bahwa dua elemen terakhir secara khusus akan diperlukan untuk membangun
perangkatnya

Kita harus menyelesaikan tugas-tugas ini dan memolesnya. paket wasm dalam alat 1.0. Mengikuti
Itu, kita harus membiarkan pengalaman dan perlu memandu upaya kita.

Catatan terakhir tentang alat: Internet Explorer 11 adalah browser terakhir yang masih ada
ia memiliki pangsa pasar yang tidak sepele dan tidak kompatibel dengan wasm. Itu di atas segalanya mungkin
untuk mendukung IE11 dengan menggunakan biner proyek wasm2js alat untuk
kompilasi wasm kami di JavaScript. Tapi wasm2js Masih kehilangan beberapa inti
fungsionalitas, dan seluruh pengalaman menulis karat dan aplikasi sementara sementara
Ini juga mendukung IE11 jauh dari turnkey. Karena ini sangat penting untuk
benar-benar mengirim proyek karat dan wasm, kita seharusnya tidak meninggalkan masalah ini
Pengguna untuk menyelesaikan melalui integrasi dengan alat eksternal: kita harus membangun dukungan
untuk itu dalam rangkaian alat kami. Dengan cara ini kami dapat memberikan pengalaman turnkey itu, dan
Pastikan itu semua orang Kode wasm yang dikeluarkan oleh rantai alat kami sepenuhnya kompatibel dengan
Internet Explorer 11

Multi-utas

Kita harus membawa persaingan Rust yang berani ke web!

Dari bahasa (C, C ++ dan Rust) yang dapat menggunakan benang memori bersama di
Web, hanya Rust yang dapat melakukannya dengan aman. API web yang diperlukan untuk multiprocessing adalah
Ini akan stabil dan diaktifkan secara default di browser segera. Kami harus siap.

Namun, kita tidak bisa begitu saja melakukannya std :: thread Bekerja secara transparan pada wasm, karena adanya
Sifat API yang diekspos oleh platform web. Misalnya, kami tidak dapat memblokir
acara tanpa batas, bahkan dalam subproses kerja, dan kita perlu mengubah
Pemeta global untuk menghindari menunggu kunci di utas utama. Lihat alex
Proses yang sangat baik dari beberapa subprocessing dan perakitan web untuk detail.

Oleh karena itu, saya percaya bahwa upaya multithread ini terutama akan melibatkan penciptaan a
subprocess group library untuk berbagi seluruh ekosistem wasm dan kemudian membangun
Saluran dan abstraksi konkurensi lainnya tentang hal itu. Kami juga harus mendapatkan
dukungan untuk benang wasm dan perpustakaan kami dari kelompok benang hulu dalam kotak-kotak seperti
sutra buatan juga Ini tidak benar-benar berbeda dari perpustakaan
dan toolkit ini bekerja, tetapi perlu disoroti karena skala mereka, eksklusif
sifat dari domain masalah, dan apa perubahan permainan multiprocess besar dalam
Web akan menjadi.

# RustWasm2019

Saya pikir 2019 memiliki sangat Masa depan yang cerah untuk Rust dan WebAssembly.

Be the first to comment

Leave a Reply

Your email address will not be published.


*