Open6
Rust🦀 and WebAssembly🕸 をやる
これをやる。
日本語に翻訳してくれている方がいるが、途中までっぽい?ので英語版で進めていく。
Introduction
誰に向けた本か?
- RustをWebAssemblyへのコンパイルに興味がある人
- JS / HTML / CSS に精通している
- 専門家である必要はない
Why Rust and WebAssembly?
- 低レベル(Low-Level)の制御
- 間接参照、単相化、メモリの制御をプログラマが行えるようになる
- 小さい
.wasn-
garbage collectorを含まないためコードサイズが小さい
-
- 全てを書き換える必要なない
- パフォーマンスが重要な箇所からJS -> Rustに置き換えてみる
- 他との相性
- RustとWebAssemblyは既存のJSツールと統合されており、ECMAScriptモジュールをサポートしている
What is WebAssembly?
- WebAssembly(wasm)は、シンプルなマシンモデルと実行可能フォーマット
- ネイティブに近い速度で実行されるように設計されている
- プログラミング言語としてのWebAssemblyにはテキストとバイナリの二つのフォーマットが存在する
-
.watテキストフォーマットはS式を使用し、Lisp系言語に似ている -
wasnバイナリはより低レベルで設計され、wasm 仮想マシンによって直接処理されることを意図している
-
- 線形メモリ(Linear Memory
- 単一の連続したバイト配列として表される
- メモリはページサイズ(64K)の倍数で拡大することができるが、縮小することはできない
- WebAssemblyはWebだけのものかか?
- JavaScriptやWebコミュニティ全般で注目を集めているが、wasmはホスト環境についての前提を設けていない
- ポータブル実行可能("portable executable")
Tutorial: Conway's Game of Life
- Rust と JavaScript に経験があり、WebAssembly を学びたい人向け
- 学ぶこと
- Rust ツールチェーンを用いて WebAssebly にコンパイルする方法
- 開発のワークフロー
- Rust、WebAssembly、JSの長所を最大限活用するAPIの設計方法
- WebAssemblyのデバッグ方法およびプロファイリング
-
.wasmバイナリをより小さく、ネットワーク上でのダウンロードを高速化する方法
Setup - Tutorial
Rust ツールチェーン
$ curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
$ rustup --version
rustup 1.27.1 (54dd3d00f 2024-04-24)
info: This is the version for the rustup toolchain manager, not the rustc compiler.
info: The currently active `rustc` version is `rustc 1.81.0 (eeb90cda1 2024-09-04)`
$ cargo --version
cargo 1.81.0 (2dbb1af80 2024-08-20)
wasm-pack
$ curl https://rustwasm.github.io/wasm-pack/installer/init.sh -sSf | sh
$ wasm-pack --version
wasm-pack 0.13.0
cargo-generate
$ cargo install cargo-generate
$ cargo-generate --version
cargo generate 0.22.0
npm
$ npm install npm@latest -g
$ npm -v
10.9.0