Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Rust+WebAssemblyをさわってみた話 / rust-webassembly
Search
USAMI Kosuke
December 09, 2022
Programming
0
730
Rust+WebAssemblyをさわってみた話 / rust-webassembly
※ Docswell に移行しました
https://www.docswell.com/s/usami-k/ZM1Y1L-rust-webassembly
USAMI Kosuke
December 09, 2022
Tweet
Share
More Decks by USAMI Kosuke
See All by USAMI Kosuke
Onsager代数とその周辺 / Onsager algebra tsudoi
usamik26
0
650
Apple HIG 正式名称クイズ結果発表 / HIG Quiz Result
usamik26
0
200
ゆめみ大技林製作委員会の立ち上げの話 / daigirin project
usamik26
0
340
@ViewLoadingプロパティラッパの紹介と自前で実装する方法 / @ViewLoading property wrapper implementation
usamik26
0
500
これからUICollectionViewを実践活用する人のためのガイド / Guide to UICollectionView
usamik26
1
760
Xcodeとの最近の付き合い方のはなし / Approach To Xcode
usamik26
2
690
UICollectionView Compositional Layout
usamik26
0
810
Coding Swift with Visual Studio Code and Docker
usamik26
0
530
Swift Extension for Visual Studio Code
usamik26
2
1.1k
Other Decks in Programming
See All in Programming
タスクの特性や不確実性に応じた最適な作業スタイルの選択(ペアプロ・モブプロ・ソロプロ)と実践 / Optimal Work Style Selection: Pair, Mob, or Solo Programming.
honyanya
3
170
ALL CODE BASE ARE BELONG TO STUDY
uzulla
17
2.7k
Range on Rails ―「多重範囲型」という新たな選択肢が、複雑ロジックを劇的にシンプルにしたワケ
rizap_tech
0
120
SpecKitでどこまでできる? コストはどれくらい?
leveragestech
0
750
チームの境界をブチ抜いていけ
tokai235
0
170
Building, Deploying, and Monitoring Ruby Web Applications with Falcon (Kaigi on Rails 2025)
ioquatix
4
2.1k
Web Components で実現する Hotwire とフロントエンドフレームワークの橋渡し / Bridging with Web Components
da1chi
3
2.3k
Six and a half ridiculous things to do with Quarkus
hollycummins
0
170
そのpreloadは必要?見過ごされたpreloadが技術的負債として爆発した日
mugitti9
2
3.3k
Android16 Migration Stories ~Building a Pattern for Android OS upgrades~
reoandroider
0
110
CSC305 Lecture 06
javiergs
PRO
0
220
Leading Effective Engineering Teams in the AI Era
addyosmani
3
360
Featured
See All Featured
A designer walks into a library…
pauljervisheath
209
24k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
252
21k
Facilitating Awesome Meetings
lara
56
6.6k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
667
120k
Unsuck your backbone
ammeep
671
58k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3.1k
How STYLIGHT went responsive
nonsquared
100
5.8k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
9
870
How to Ace a Technical Interview
jacobian
280
24k
Practical Orchestrator
shlominoach
190
11k
Docker and Python
trallard
46
3.6k
Music & Morning Musume
bryan
46
6.8k
Transcript
Rust+WebAssemblyを さわってみた話 宇佐見公輔 2022-12-09
自己紹介 宇佐見公輔(うさみこうすけ) 株式会社ゆめみ / iOSテックリード 大阪在住、最寄のゆめみオフィスは京都 KyotoLT参加2回目 Rust+WebAssemblyをさわってみた話 / 宇佐見公輔
2
Rust+WebAssembly Rustから見た場合 Rust言語の活用方法のひとつとして RustでWebフロントエンド開発ができる WebAssemblyから見た場合 WebAssembly形式を生成する手段のひとつとして コンパクトかつ高パフォーマンスなwasmバイナリを生成できる Rust+WebAssemblyをさわってみた話 / 宇佐見公輔
3
WebAssemblyとは Rust+WebAssemblyをさわってみた話 / 宇佐見公輔 4
WebAssemblyとは Webブラウザー上で実行できるバイナリ形式 かつてJavaもやっていたが…… ブラウザーに組み込まれた仮想マシン上で実行される JavaScriptも仮想マシン上で実行される WebAssemblyのほうが高速に動作する Rust+WebAssemblyをさわってみた話 / 宇佐見公輔 5
JavaScriptとWebAssembly 両者を併用する WebAssemblyですべてをカバーはできない WebAssemblyでJavaScriptを補強する JavaScriptからWebAssemblyの関数を呼び出せる WebAssemblyからJavaScriptの関数を呼び出せる Rust+WebAssemblyをさわってみた話 / 宇佐見公輔 6
WebAssemblyの事例 Google Meet Google Earth Figma eBay など…… Rust+WebAssemblyをさわってみた話 /
宇佐見公輔 7
WebAssemblyバイナリ Rust+WebAssemblyをさわってみた話 / 宇佐見公輔 8
WebAssemblyバイナリ magic ::= 0x00 0x61 0x73 0x6D version ::= 0x01
0x00 0x00 0x00 (参考:ELFバイナリだと先頭4バイトは 0x7F 0x45 0x4C 0x46 ) Rust+WebAssemblyをさわってみた話 / 宇佐見公輔 9
WebAssemblyバイナリの生成方法 WebAssemblyテキストを記述して生成する C/C++ソースコードからEmscriptenで生成する Rustソースコードからwasm-packで生成する AssemblyScriptソースコードから生成する Rust+WebAssemblyをさわってみた話 / 宇佐見公輔 10
WebAssemblyテキスト WABT(WebAssembly Binary Toolkit)でバイナリに変換 wat2wasm simple.wat -o simple.wasm (module (func
$i (import "imports" "imported_func") (param i32)) (func (export "exported_func") i32.const 42 call $i ) ) Rust+WebAssemblyをさわってみた話 / 宇佐見公輔 11
Emscripten C/C++コンパイラの代わりにEmscriptenコンパイラを使う emcc hello.c -o hello.html (wasm、js、htmlを生成) #include <stdio.h> int
main() { printf("Hello World\n"); return 0; } Rust+WebAssemblyをさわってみた話 / 宇佐見公輔 12
Rust wasm-pack cargo buildの代わりにwasm-packツールでビルドする wasm-pack build --target web (wasm、jsを生成) use
wasm_bindgen::prelude::*; #[wasm_bindgen] pub fn greet(name: &str) { alert(&format!("Hello, {}!", name)); } Rust+WebAssemblyをさわってみた話 / 宇佐見公輔 13
AssemblyScript TypeScriptのサブセット AssemblyScriptはWebAssemblyにコンパイルされる asc sample.ts --outFile sample.wasm 対比:TypeScriptはJavaScriptにトランスパイルされる tsc sample.ts
--outFile sample.js Rust+WebAssemblyをさわってみた話 / 宇佐見公輔 14
RustでWebAssemblyバイナリを生成 Rust+WebAssemblyをさわってみた話 / 宇佐見公輔 15
環境準備 Rust環境の準備 rustup で rustc や cargo のインストール wasm-pack導入 cargo
install wasm-pack Rust+WebAssemblyをさわってみた話 / 宇佐見公輔 16
プロジェクト作成 プロジェクト作成 cargo new --lib Cargo.toml 設定 [lib] crate-type =
["cdylib"] [dependencies] wasm-bindgen = "0.2" Rust+WebAssemblyをさわってみた話 / 宇佐見公輔 17
RustからJavaScriptの関数を呼ぶ #[wasm_bindgen] extern { pub fn alert(s: &str); } これで
alert がRustから呼べるようになる alert はJavaScriptで提供される関数 Rust+WebAssemblyをさわってみた話 / 宇佐見公輔 18
JavaScriptからRustの関数を呼ぶ #[wasm_bindgen] pub fn greet(name: &str) { alert(&format!("Hello, {}!", name));
} これで greet がJavaScriptから呼べるようになる greet はRustで実装した関数 先ほどの alert をRustで使っている Rust+WebAssemblyをさわってみた話 / 宇佐見公輔 19
WebAssemblyのビルド wasm-packでビルド wasm-pack build --target web 生成物 WebAssemblyバイナリ JavaScriptファイル(WebAssemblyのラッパー) Rust+WebAssemblyをさわってみた話
/ 宇佐見公輔 20
WebAssemblyのロード <body> <script type="module"> import init, {greet} from "./pkg/hello_wasm.js"; init()
.then(() => { greet("WebAssembly") }); </script> </body> Rust+WebAssemblyをさわってみた話 / 宇佐見公輔 21
Webサーバーの準備と実行 MIMEタイプ application/wasm に対応したWebサーバーの準備 python3 -m http.server で良い Webブラウザーでアクセス http://localhost:8000
うまくいけばアラートボックスが表示される Rust+WebAssemblyをさわってみた話 / 宇佐見公輔 22
より実践的なチュートリアル Conwayのライフゲーム The Rust Wasm Book https://rustwasm.github.io/docs/book/ Rust+WebAssemblyをさわってみた話 / 宇佐見公輔
23
情報源 WebAssembly | MDN Web Docs https://developer.mozilla.org/ja/docs/WebAssembly Rust and WebAssembly
Documentation https://rustwasm.github.io/docs.html 入門WebAssembly(Rick Battagline、翔泳社) Rust+WebAssemblyをさわってみた話 / 宇佐見公輔 24