Slide 1

Slide 1 text

WASM1.0リリース記念(?) 最近の状況アップデート @chikoski

Slide 2

Slide 2 text

No content

Slide 3

Slide 3 text

IUUQTDBOJVTFDPNGFBUXBTN

Slide 4

Slide 4 text

IUUQTDBOJVTFDPNGFBUXBTN

Slide 5

Slide 5 text

Module definition https://rsms.me/wasm-intro

Slide 6

Slide 6 text

WAT: text format IUUQXFCBTTFNCMZPSHEPDTUFYUGPSNBUMJOFBSJOTUSVDUJPOT

Slide 7

Slide 7 text

JS API GFUDI BEEXBTN 
 UIFO SFTSFTBSSBZ#VGGFS  UIFO CVG 8FC"TTFNCMZDPNQJMF CVG  UIFO CJO 8FC"TTFNCMZJOTUBOUJBUF CJO \^  UIFO NPENPEBEE   

Slide 8

Slide 8 text

WebEmbedding API 8FC"TTFNCMZ DPNQJMF4USFBNJOH BEEXBTN  UIFO CJO 8FC"TTFNCMZJOTUBOUJBUF CJO \^  UIFO NPENPEBEE    8FC"TTFNCMZ JOTUBOUJBUF4USFBNJOH BEEXBTN  \^  UIFO NPENPEBEE   

Slide 9

Slide 9 text

Languages and Tools Tool Language Compiler website Emscripten C / C++ http://kripken.github.io/emscripten-site/ Clang C / C++ https://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

Slide 10

Slide 10 text

WASM Tool chains

Slide 11

Slide 11 text

Emscripten vs Clang • I have not compared in performance • Emscripten has advantage in • Porting project • Library support • File system support • Easy installation • Clang has advantage in • Creating relatively small modules

Slide 12

Slide 12 text

Tool installation: Emscripten 63-IUUQTTBNB[POBXTDPN NP[JMMBHBNFTFNTDSJQUFOSFMFBTFT FNTELQPSUBCMFUBSH[ DVSM63-]UBS[Y DEFNTELQPSUBCMF FNTELJOTUBMMMBUFTU FNTELBDUJWBUFMBUFTU TPVSDFFNTEL@FOWTI

Slide 13

Slide 13 text

Tool installation: LLVM x Clang DVSMIUUQSFMFBTFTMMWNPSHMMWNTSDUBSY[]UBS+YG DEMMWNTSDUPPMT DVSMIUUQSFMFBTFTMMWNPSHDGFTSDUBSY[]UBS+YG DE NLEJSCVJME DECVJME DNBLF%--7.@&91&3*.&/5"-@5"3(&54@50@#6*-%8FC"TTFNCMZ= MMWNTSD NBLF NBLFJOTUBMM

Slide 14

Slide 14 text

Tool dependencies (In macOS)

Slide 15

Slide 15 text

Env. setup to dev. with Rust 1. Install XCode 2. Install XCode Command Line Tools 3. Install Homebrew 4. Install cmake with Homebrew 5. Install emsdk 6. Install Emscripten 7. Install rustup 8. Add target architecture 
 "wasm32-unkown-emscripten"

Slide 16

Slide 16 text

Tool installation: rustc & wasm32 JOTUBMM&NTDSJQUFOQSJPSUPUIJT DVSMIUUQTTISVTUVQSTT4G]TI SVTUVQUBSHFU= BEEXBTNVOLOPXOFNTDSJQUFO TPVSDF_DBSHPFOW

Slide 17

Slide 17 text

Webpack • http://webpack.js.org/ • A bundler: • Resolve module dependencies • Packs multiple files into 1 file

Slide 18

Slide 18 text

MOSS Program funded Webpack to implement first-class support for WASM IUUQTNFEJVNDPNXFCQBDLXFCQBDLBXBSEFEGSPNNPTTQSPHSBNGFFBBGF

Slide 19

Slide 19 text

Loader • WebPack: bundler framework • Loader • Defines a transformation applied on the source module • E.g. css-loader, ts-loader, babel-loader • Loaders for development with WASM • wasm-loader • cpp-loader, rs-wasm-loader

Slide 20

Slide 20 text

wasm-loader IUUQTHJUIVCDPNCBMMFSDBUXBTNMPBEFS JNQPSUNBLF'BDUPSJBM GSPNXBTNGBDUPSJBM NBLF'BDUPSJBM UIFO JOTUBODF\ DPOTUGBDUPSJBM JOTUBODFFYQPSUTGBDUPSJBM DPOTPMFMPH GBDUPSJBM   DPOTPMFMPH GBDUPSJBM   DPOTPMFMPH GBDUPSJBM   ^ 

Slide 21

Slide 21 text

JOTUBOUJBUFXJUIGFFEJOHJNQPSUT NBLF'BDUPSJBM \ HMPCBM\^  FOW\ NFNPSZOFX8FC"TTFNCMZ.FNPSZ \JOJUJBM MJNJU^  UBCMFOFX8FC"TTFNCMZ5BCMF \JOJUJBM FMFNFOUBOZGVOD^  ^ ^ UIFO JOTUBODF\ DPEFIFSF ^  EFGBVMUJNQPSUT \ HMPCBM\^  FOW\ NFNPSZOFX.FNPSZ \JOJUJBM MJNJU^  UBCMFOFX5BCMF \JOJUJBM FMFNFOUBOZGVOD^  ^ ^

Slide 22

Slide 22 text

cpp-loader https://github.com/arcanis/cpp-loader JNQPSU\BEEJUJPO SBOHF^ GSPNMJCDD DPOTPMFMPH BEEJUJPO    DPOTPMFMPH SBOHF      /PUF 5IJTMPBEFSHFOFSBUFTBTNKT "WBJMBCMFPOMZPO8JOEPXT  

Slide 23

Slide 23 text

rust-wasm-loader
 IUUQTHJUIVCDPNJBOKTJLFTSVTUXBTNMPBEFS DPOTUXBTNSFRVJSF NBJOST  XBTNJOJUJBMJ[F UIFO NPEVMF\ DPOTUEPVC NPEVMFDXSBQ EPVC  OVNCFS  <OVNCFS>  DPOTPMFMPH EPVC   ^ 

Slide 24

Slide 24 text

AssemblyScript

Slide 25

Slide 25 text

TypeScript -> WASM • TypeScript compiler API + 
 Binaryen's WASM backend • Compiler itself are written in TypeScript • What to except • All types must be annotated • Optional function parameters require an initializer expression • Union types (except classType | null representing a nullable), any and undefined are not supported by design • The result of logical && / || expressions is always bool

Slide 26

Slide 26 text

Installation OQNJOTUBMMBTTFNCMZTDSJQU

Slide 27

Slide 27 text

Compiler usage BTDFOUSZ'JMF BTDPNBJOXBTNNBJOUT BTDPNBJOXBTNUFYU'JMFNBJOXBUNBJOUT BTDOP3VOUJNFPNBJOXBTNUFYU'JMFNBJOXBUNBJOUT BTDOP3VOUJNF0PNBJOXBTNUFYU'JMFNBJOXBUNBJOUT

Slide 28

Slide 28 text

Sample code FYQPSUGVODUJPOBEE BJ CJ J\ SFUVSOB C ^

Slide 29

Slide 29 text

Generated WASM file NPEVMF  UZQF   GVOD QBSBNJJ  SFTVMUJ   UZQF   GVOD QBSBNJ  SFTVMUJ   GVODBEE UZQF  QBSBNJJ  SFTVMUJ  HFU@MPDBM HFU@MPDBM JBEE   NFNPSZ     FYQPSUBEE GVODBEE   FYQPSUNFNPSZ NFNPSZ

Slide 30

Slide 30 text

Only "export function" is exported FYQPSUGVODUJPOBEE BJ CJ J\ SFUVSOB C ^ GVODUJPOJOWFSU4JHO BJ J\ SFUVSOB ^ FYQPSUGVODUJPOTVC BJ CJ J\ SFUVSOBEE B JOWFSU4JHO C  ^

Slide 31

Slide 31 text

Only "export function" is exported NPEVMF  UZQF   GVOD QBSBNJJ  SFTVMUJ   UZQF   GVOD QBSBNJ  SFTVMUJ   GVODBEE UZQF  QBSBNJJ  SFTVMUJ  TOJQ  GVODJOWFSU4JHO UZQF  QBSBNJ  SFTVMUJ  TOJQ  GVODTVC UZQF  QBSBNJJ  SFTVMUJ  TOJQ  NFNPSZ     FYQPSUBEE GVODBEE   FYQPSUTVC GVODTVC   FYQPSUNFNPSZ NFNPSZ 

Slide 32

Slide 32 text

Constructor: memory initializer 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 

Slide 33

Slide 33 text

Methods are translated into functions FYQPSUDMBTT1PJOU\ QVCMJDYJ QVCMJDZJ DPOTUSVDUPS YJ ZJ \ UIJTYY UIJTZZ ^ QVCMJDOPSN J\ SFUVSOBEE UIJTY UIJTZ  ^ QVCMJDEJTUBODF QPJOU1PJOU J\ SFUVSOUIJTOPSN QPJOUOPSN  ^ ^ GVOD1PJOUOPSN UZQF  QBSBNJ  SFTVMUJ  HFU@MPDBM JMPBE HFU@MPDBM JMPBEPGGTFU DBMMBEE  GVOD1PJOUEJTUBODF UZQF   QBSBNJJ  SFTVMUJ  HFU@MPDBM DBMM1PJOUOPSN HFU@MPDBM DBMM1PJOUOPSN JTVC 

Slide 34

Slide 34 text

Summary • All major modern browsers provide default support to WebAssembly MVP • Web Embedding: http://webassembly.org/docs/web/ • WebPack will support WASM as its first class language • AssemblyScript: a TypeScript subset compiler emits WASM