WebAssembly
-
WASM = Core + JS API, Web API
- V8
-
WASI(ワジ) = Core + WASI APIの仕様
- 実装として, wasmer, wasmtime(BytecodeAllienceのリファレンス実装, パフォ悪い)
- ホワイトリストでアクセスできるdir指定するらしい
- Deno み
-
GitHub - WebAssembly/wasi-sockets: WASI API proposal for managing sockets
- socketのproposal
将来性
-
2022-10-18 セキュアが目的で組み込み関数など存在しないので直接DOMを操作するAPIは永遠に実装されない
-
Docker Founder の Solomon Hykes
もしもWebAssemblyとWASIが2008年に存在していたら、Dockerを開発する必要はなかった
-
どんどんWebからはみ出ていきそう
- web assembly用のarchは出る hypo
-
サーバーでも動く
- ARM on IoTデバイス
-
Docker が言語の違いをコンテナで吸収しているのと同じように, runtimeが吸収してポータビリティー, JVMかな?
-
AWSのregionよりCloudflareのedgeの方が世界中にたくさんある
-
Envoy proxyのプラグインとして使われている
WebAssembly製のx86仮想マシン「WebVM」が登場、Webブラウザ上でLinuxや各種コマンド、アプリがそのまま実行可能 - Publickey
-
WebブラウザがOSのレイヤになる? hypo
- 色々な言語でWebフロントエンド開発ができるようになりそう
- JSインタプリタを搭載しないmodulableなブラウザとか出そう
-
2022-09-26 WebAssembly上で動くLunaticランタイムを使ったHTTPサーバーを実装する
- Erlang OTP もっと知りたくなった
- Rust は非同期複雑, Golang はその点よく出来ている
- lunatic-solutions/lunatic Lunatic is an Erlang-inspired runtime for WebAssembly
- WebAssembly にコンパイルされる非同期ランタイム?
仕様
Change History — WebAssembly 2.0 (Draft 2022-06-13)
線形メモリ
GC
今は無いが検討されている
-
2023-04-02 wasm GC Proposalのために作られた実験的な関数型言語処理系Wamlが面白そう - Arantium Maestum
- gc/proposals/gc/waml at waml · WebAssembly/gc · GitHub
- An experimental functional language and implementation for exploring and evaluating the Wasm GC proposal.
DenoとWebAssembly
Deno でも実行できる
RustでWebAssemblyを書いてDenoで実行する🦕🦀 | ramble - ランブル -
wasmインスタンス
- 何も考えずにWASMインスタンスを混ぜると危ないかも
- 複数instance使うときの気をつけること
Rust to wasm
2021-12-10
LLVM入門 - javascript使いがLLVM(Rust:inkwell)でjavascriptをJITコンパイルするまで
Parser combinator nom 入門 - happy developing
Rustでlox言語のinterpreterを作っている話 - sasurau4のブログ
LLVM Tutorial: Table of Contents - LLVM 13 documentation
kaleidoscope-rust
https://github.com/termoshtt/kaleidoscope
WAPM
- package manager
- 2022-10-11 Why stdin is implemented via alert-like prompt? · Issue #79 · wasmerio/webassembly.sh · GitHub
- Firefoxでは
SharedArrayBufferを利用できないのでalertでstdin取るらしい
- Firefoxでは
企業
- WebAssemblyを使用している企業一覧 | StackClip
- Caddiはやはりか
- supabase
warg
wargis an in-development open source registry protocol for Wasm packages.wargprovides an index allowing everyone to refer to federated namespaces of Wasm packages without being opinionated about how package content is stored and hosted.
reference impl: GitHub - bytecodealliance/registry: WebAssembly component registry prototype
wasmのためのレジストリ作ってたけどプロトコルと参考実装があるな
(WASMが変に高級なため、例えばx64ターゲットのコンパイラ実装なんかに比べると結構サボれる場所があってその辺りはかなり感覚が違うと思われる。)
参考文献
- WebAssemblyはJVMやeBPFのリバイバルではない WasmがWeb以外でもアツい理由 - ログミーTech
- 興味のおもむくままにWASM/WASIらへん
- 「WebAssembly 2.0」に関する最初のワーキングドラフトが公開。整数における符号拡張命令、関数からの複数の戻り値などを拡張 - Publickey
- C言語へのFFIを含むRustをWASM化するのは難しすぎる
- WebAssembly Landscape 2022 - YouTube
- WebAssembly Specification — WebAssembly 2.0 (Draft 2023-03-22) cheatsheet
- Webassemblyコンパイラを自作しよう
- emitter: ターゲットarchの命令列を出力するモジュール