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

20161221-WASM

chikoski
January 10, 2017

 20161221-WASM

chikoski

January 10, 2017
Tweet

More Decks by chikoski

Other Decks in Technology

Transcript

  1. Proudly non-profit, Mozilla makes products like Firefox with a mission

    to keep the power of the Web in the hands of users everywhere. Mozilla Mission (https://www.mozilla.org/en-US/mission/)
  2. To ensure the Internet is a global public resource, open

    and accessible to all. Mozilla Mission(https://www.mozilla.org/en-US/mission/)
  3. debugger.html:再開発中のFirefox 組み込みのデバッガー • React と Redux、flow を使って実装されています • スタンドアローンで実行できます •

    Firefox だけでなく、Google Chromeやnode.jsで動いているコードもデバッグできます • https://github.com/devtools-html/debugger.html
  4. WAST TFU@MPDBMB  JBEE  JDPOTU   JNVM 

    JDPOTU   JDPOTU i32.mul i32.add set_local $a 1 i32.const 1 i32.const 2 i32.const
  5. JS GFUDI NPEVMF@BXBTN  UIFO SFTQPOTFSFTQPOTFBSSBZ#VGGFS  UIFO CVGGFSOFX6*OU"SSBZ CVGGFS

     UIFO CZUFT8FC"TTFNCMZDPNQJMF CZUFT  UIFO NPEVMF\ DPOTUJOTUBODFOFX8FC"TTFNCMZ*OTUBODF NPEVMF  ^  WASMモジュールのコンパイルと、モジュールのインスタンス化
  6. NPEVMF\ MPDBM'PSBHFTFU*UFN DPNQJMFE@NPEVMF@B NPEVMF  XPSLFSQPTU.FTTBHF \DPNQJMFE.PEVMFNPEVMF  ^ NPEVMF\

    MPDBM'PSBHFTFU*UFN DPNQJMFE@NPEVMF@B NPEVMF  XPSLFSQPTU.FTTBHF \DPNQJMFE.PEVMFNPEVMF  ^ PONFTTBHFGVODUJPO NFTTBHF \ DPOTUNPEVMFNFTTBHFDPNQJMFE.PEVMF DPOTUJOTUBODF8FC"TTFNCMZ*OTUBODF JOTUBODF  MFUUXPJOTUBODFFYQPSUTBEE    ^ main Worker WebAssembly.Module オブジェクトはクローンできます MPDBM'PSBHFחאְגכֿ׍׵׾⿫撑IUUQTHJUIVCDPNMPDBM'PSBHFMPDBM'PSBHF
  7. WAST NPEVMF  JNQPSUJNIFMMP   JNQPSUJXPSME   GVODNBJO

    DBMM@JNQPSUJ   TUBSUNBJO   GVODG DBMM@JNQPSUJ   FYQPSUGG  import / export
  8. JS NPEVMF\ DPOTUJNQPSU\ N\IFMMP DPOTPMFMPH IFMMP  XPSME DPOTPMFMPH XPSME

     ^ DPOTUJOTUBODF8FC"TTFNCMZJOTUBODF NPEVMF JNQPSU IFMMP JOTUBODFFYQPSUTG XPSME ^ インスタンス作成時にimportするシンボルを与えることで、ダイナミックリンクさせられます
  9. 線形メモリー:WebAssemblyのメモリモデル • バイト単位(8ビット)でアクセスできる線形メモリ • ヒープ領域 • データ領域 • リトルエンディアン •

    最大サイズは 4GiB(1ページ64KiB、32ビット分) • 演算子を利用してサイズを増やせます • grow_memory 演算子でサイズを増やせます • current_memory 演算子で現在のサイズを取得できます CZUF  BEESFTT@TQBDF@NBY
  10. ԋࢉࢠ ৼΔ෣͍ i32.load8_s 1όΠτΛϩʔυ͠ɺi32΁ͱ֦ு͢Δ i32.load8_u 1όΠτΛϩʔυ͠ɺu32΁ͱ֦ு͢Δ i32.load16_s 2όΠτΛϩʔυ͠ɺi32΁ͱ֦ு͢Δ i32.load16_u 2όΠτΛϩʔυ͠ɺu32΁ͱ֦ு͢Δ

    i32.load 4όΠτϩʔυ͢Δ i32.store8 i32ͷ஋Λi8ͱͯ͠อଘ͢Δ i32.store16 i32ͷ஋Λi16ͱͯ͠อଘ͢Δ i32.store i32ͷ஋Λอଘ͢Δ 読み書きするデータのサイズは演算子の種類によって決まります
  11. JS asm.js WPJEIJ DIBS CVG \ CVG<>I CVG<>J CVG<>= ^

     GVODIJ QBSBNJ   JTUPSFPGGTFU  HFU@MPDBM   JDPOTU     JTUPSFBMJHO  HFU@MPDBM   JDPOTU     SFUVSO   I J = CVG
  12.  GVODIJ QBSBNJ   JTUPSFPGGTFU  HFU@MPDBM  

    JDPOTU     JTUPSFBMJHO  HFU@MPDBM   JDPOTU     SFUVSO   = HFU@MPDBM PGGTFU offsetで、アクセスする場所をバイト単位でずらせます
  13.  GVODIJ QBSBNJ   JTUPSFPGGTFU  HFU@MPDBM  

    JDPOTU     JTUPSFBMJHO  HFU@MPDBM   JDPOTU     SFUVSO   I J = HFU@MPDBM Y Y YJ YI align を指定することで、転送サイズを変えられます(上記の例は1バイトずつ転送しています)
  14. つかってください! • これからはWebAssemblyオブジェクトを利用して、モジュールをコンパイルします • WebAssembly.compile • WebAssembly.Module • WebAssembly.Instance •

    ダイナミックリンクできるようになりました • メモリ空間はインスタンス間で共有されます • Firefox 52で標準利用できるようになります(2017年3月リリース予定) • バグやおかしいな?と思う点があったら、ご連絡ください! • 知見を貯めて、公開してください!