Upgrade to Pro — share decks privately, control downloads, hide ads and more …

An overview of WebAssembly; how it is used, created, and applied?

chikoski
December 22, 2017

An overview of WebAssembly; how it is used, created, and applied?

chikoski

December 22, 2017
Tweet

More Decks by chikoski

Other Decks in Technology

Transcript

  1. WASMを生成するツール Tool Language Compiler website Emscripten C / C++ http://kripken.github.io/emscripten-site/

    Clang C / C++ https://clang.llvm.org/ lld WASM https://lld.llvm.org/ rustc Rust https://rust-lang.org/ AssemblyScript TypeScript https://github.com/AssemblyScript/assemblyscript Binaryen IR(LLVM / TS / Rust MIR) https://github.com/WebAssembly/binaryen Wabt S-expression / text https://github.com/WebAssembly/wabt Unity Unity(C#) http://unity3d.com/ mono-wasm C# https://github.com/lrz/mono-wasm
  2. WASMでできること • 数値計算 • 整数:i8, i16, i32, i64, u16, u32,

    u64 • 浮動小数点:f32, f64 • 線形メモリへのアクセス • バイト単位でのアクセス 、offset / align • load / store 命令 • 64KiBのページ / grow_memory / current_memory • 関数の呼び出し (call / call_indirect) https://wasdk.github.io/wasmcodeexplorer/
  3. JavaScript embedding API 1. WASMファイルを用意する 2. WASMモジュールをコンパイルする 3. WASMモジュールをインスタンス化する GFUDI

    TPNFXBTN UIFO SFTSFTBSSBZ#VGGFS TUFQ
 UIFO CVG8FC"TTFNCMZDPNQJMF CVG TUFQ
 UIFO CJO8FC"TTFNCMZJOTUBOUJBUF CJO \^ TUFQ
 UIFO NPE\
 DPOTUSFTVMUNPEFYQPSUTBEE   
 ^ 
  4. Web embedding API ǖ 1SPNJTF3FTVMU0CKFDU8FC"TTFNCMZJOTUBOUJBUF CVGGFS4PVSDF  JNQPSU0CKFDU  ǖ

    CVGGFS4PVSDFWASMのバイト列が入ったArrayBufferオブジェクト ǖ JNQPSU0CKFDUWASMの空間へインポートするオブジェクト DPOTUNFNPSZOFX8FC"TTFNCMZ.FNPSZ \JOJUJBM NBYJNVN^  DPOTUWJFXOFX6JOU"SSBZ NFNPSZCVGGFS  8FC"TTFNCMZJOTUBOUJBUF CJO \ NFNPSZNFNPSZ  QVUDJOEFYDPOTPMFMPH WJFX JOEFY  ^ 
  5. Web embedding API • Webページ上での実行を前提にしているAPI • ストリームコンパイルを行います • c.f. 8FC"TTFNCMZTUSFBN*OTUBOUJBUF

    8FC"TTFNCMZTUSFBN$PNQJMF GFUDI TPNFXBTN 
 UIFO CJO8FC"TTFNCMZJOTUBOUJBUF CJO \^ 
 UIFO NPE\
 DPOTUSFTVMUNPEFYQPSUTBEE   
 ^ 
  6. メモリの使用例:Cの文字列の場合  GVODIJ QBSBNJ   JTUPSFPGGTFU  HFU@MPDBM 

     JDPOTU     JTUPSFBMJHO  HFU@MPDBM   JDPOTU     SFUVSO   I J = CVG WPJEIJ DIBS CVG \ CVG<>I CVG<>J CVG<>= ^
  7. メモリの利用例:Cの構造体の場合   CZUFTPGGTFU WBS GVODG QBSBNWBSJ  SFTVMUG 

    HFU@MPDBMWBS GMPBE  GVODG QBSBNWBSJ  SFTVMUG  HFU@MPDBMWBS GMPBEPGGTFU
  8. FYQPSUGVODUJPOBEE BV CV V\ SFUVSOB C ^ NPEVMF  UZQFJJJ

    GVOD QBSBNJJ  SFTVMUJ   NFNPSZ   FYQPSUBEE GVODBEE   FYQPSUNFNPSZ NFNPSZ   GVODBEE UZQFJJJ  QBSBNJ  QBSBNJ  SFTVMUJ   JBEE  HFU@MPDBM   HFU@MPDBM ↓
  9. コンストラクタはメモリを初期化する関数に FYQPSUDMBTT1PJOU\ QVCMJDYJ QVCMJDZJ DPOTUSVDUPS YJ ZJ \ UIJTYY UIJTZZ

    ^ ^ GVOD1PJOU UZQF   QBSBNJJJ  SFTVMUJ  CMPDL SFTVMUJ MBCFM! HFU@MPDBM HFU@MPDBM JTUPSF HFU@MPDBM HFU@MPDBM JTUPSFPGGTFU HFU@MPDBM FOE  →
  10. メソッドはポインタを受け取る関数になります FYQPSUDMBTT1PJOU\ QVCMJDYJ QVCMJDZJ DPOTUSVDUPS YJ ZJ \ UIJTYY UIJTZZ

    ^ QVCMJDOPSN J\ SFUVSOBEE UIJTY UIJTZ  ^ ^ GVOD1PJOUOPSN UZQF  QBSBNJ  SFTVMUJ  HFU@MPDBM JMPBE HFU@MPDBM JMPBEPGGTFU DBMMBEE →