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

An overview of WebAssembly; how it is used, cre...

Avatar for chikoski chikoski
December 22, 2017

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

Avatar for chikoski

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 →