Trải nghiệm đầu tiên với Rust và WebAssembly

1 Tại sao lại là Rust và WebAssembly?

Các ứng dụng web JavaScript công thái học ở mức độ thấp và mức độ cao rất khó để có được và duy trì hiệu suất đáng tin cậy.
Rust cung cấp cho các lập trình viên khả năng kiểm soát mức thấp và hiệu suất đáng tin cậy.

Kích thước mã .wasm nhỏ hơn là rất quan trọng vì .wasm phải được tải xuống qua mạng. Rust không có thời gian chạy, vì vậy nó hỗ trợ .Wasm nhỏ hơn.

Không cần phải viết lại tất cả Rust để sử dụng Rust không phải là vứt bỏ đoạn mã hiện có, chúng ta có thể chuyển một số hàm js thành mã Rust.

Hòa đồng với những người khác. Rust và WebAssembly tích hợp với các công cụ JavaScript hiện có và hỗ trợ mô-đun ECMAScript. Bạn có thể tiếp tục sử dụng các công cụ trước đó, chẳng hạn như npm, Webpack.

Cơ sở hạ tầng thuận tiện Rust có các công cụ tiện lợi mà các nhà phát triển mong đợi, chẳng hạn như Cargo, chi phí trừu tượng bằng 0 và một cộng đồng cởi mở và nhiệt tình.

2 WebAssembly là gì?

WebAssembly (wasm) là một mô hình máy đơn giản và định dạng thực thi với nhiều thông số kỹ thuật. Nó được thiết kế để di động, nhỏ gọn và thực thi ở tốc độ gốc hoặc gần bằng tốc độ gốc.

WebAssembly có hai định dạng đại diện cho cùng một cấu trúc:

  • Định dạng văn bản .wat (Văn bản WebAssembly) sử dụng biểu thức S, hơi giống với họ ngôn ngữ Lisp;
  • Định dạng nhị phân .wasm, ở cấp độ thấp hơn, được sử dụng trực tiếp bởi máy ảo wasm. Về mặt khái niệm, nó tương tự như ELF và Mach-O.

2.1 Bộ nhớ tuyến tính

WebAssembly có một mô hình bộ nhớ rất đơn giản. Mô-đun wasm có thể truy cập một bộ nhớ tuyến tính duy nhất (về cơ bản là một mảng). Bộ nhớ này có thể lớn lên theo bội số của kích thước trang (64K), nhưng không thể giảm đi.

2.2 WebAssembly chỉ dành cho Web?

Wasm không đưa ra bất kỳ giả định nào về môi trường chủ của nó, nhưng cho đến nay, nó chủ yếu liên quan đến js.

3 Kinh nghiệm đầu tiên

  • Cài đặt Rust
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
  • Cài đặt wasm-pack
cargo install wasm-pack
  • Tạo dự án
cargo new --lib mywasm
  • Viết mã
[lib]
crate-type = ["cdylib"]

[dependencies]
wasm-bindgen = "0.2"
  • Biên dịch gói
wasm-pack build --target web
  • Chạy máy chủ
python3 -m http.server
  • kiểm tra
    Nhập vào trình duyệt: localhost: 8000

DONE !!