LoginSignup
2
3

More than 5 years have passed since last update.

WebAssembly導入メモ

Posted at

これはなに?

備忘録、とりあえず試してみた

試す前から希望がもてない

Chrome,FireFoxで導入され、Safariまで導入が決定し、注目度が高い。
しかしながら、最初の導入記事以降、次の記事はみないので、とってもシュール。

実際3倍速くなるとか書いてあるが、ブラウザで3倍速くなるからといってビルドが必要なコードをjavascriptを置き換えてまで使いたいのか?といった疑問。
「実際あまり速くない。読み込み部分が速くなるくらい」と書かれていたり。各ブラウザが導入しているのに残念感を拭えない。
ネイティブコードをブラウザで動かせるにしてもCで書かれてたコードの穴を埋める労力考えると公開することはまずしない。

本家のUse Casesを見ても何か作りたいと、ときめいたりはしない。
きっと導入時期はイマじゃないのだろう。もっと使いたくなる子になったらまた思い出そう。

wasm Install

$ wget https://s3.amazonaws.com/mozilla-games/emscripten/releases/emsdk-portable.tar.gz
$ tar xvzf emsdk-portable.tar.gz
$ cd emsdk-portable/

$ ./emsdk update
##-- install 2時間待ちました。。orz
$ ./emsdk install sdk-incoming-64bit
$ ./emsdk activate sdk-incoming-64bit
$ source ./emsdk_env.sh

Rust Platform Support

asmjsとwasmサポートを導入

$ rustup target add asmjs-unknown-emscripten
$ rustup target add wasm32-unknown-emscripten

Rust Install

$ https://www.rust-lang.org/en-US/install.html
curl https://sh.rustup.rs -sSf | sh
$ echo 'fn main() { println!("Hello, Emscripten!"); }' > hello.rs

source $HOME/.cargo/env

wasm Build

情報通り初回ビルド遅い3分くらい待った。次回以降そんな待つことはない。

$ rustc --target=wasm32-unknown-emscripten hello.rs -o hello.html
$ python -m SimpleHTTPServer
http://localhost:8000/hello.html

rust-webplatform

DOM操作ができると聞いてwktk

main.rs
extern crate webplatform;

fn main() {
    let document = webplatform::init();
    let body = document.element_query("body").unwrap();
    body.html_set("<h1>HELLO FROM RUST</h1> <button>CLICK ME</button>");
    let button = document.element_query("button").unwrap();
    button.on("click", |_| webplatform::alert("WITNESS ME"));
}
Cargo.toml
[package]
name = "app"
version = "0.1.0"

[dependencies]
webplatform = { git = "https://github.com/tcr/rust-webplatform" }

[[bin]]
name = "webplatform-test"
index.html
<!DOCTYPE html>
<html lang="ja">
  <head>
    <meta charset="utf-8" />
    <title>App</title>
  </head>
  <body>
    <script src="webplatform-test.js"></script>
  </body>
</html>
$ cargo build --target asmjs-unknown-emscripten --release
$ cp target/asmjs-unknown-emscripten/release/webplatform-test.js .

なるほど、asm.jsでは動くがwasmでは動かないのね。
アセンブリから直接DOMを書き換える機構はないでいいのかな?

2
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
3