これはなに?
備忘録、とりあえず試してみた
試す前から希望がもてない
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を書き換える機構はないでいいのかな?