Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
20161221-WASM
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
chikoski
January 10, 2017
Technology
92
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
20161221-WASM
chikoski
January 10, 2017
More Decks by chikoski
See All by chikoski
20210825_ossx
chikoski
0
350
festudy02-wasm
chikoski
1
1.1k
An overview of WebAssembly; how it is used, created, and applied?
chikoski
1
790
Functions in JavaScript
chikoski
1
1.2k
20171018-WASM
chikoski
2
1.5k
20171002-wejs
chikoski
1
620
20170924-html5conference-wasm
chikoski
5
10k
Equivalence_in_JS
chikoski
0
1.6k
いまさら振り返るPromise
chikoski
1
610
Other Decks in Technology
See All in Technology
AI-DLCを活用した高品質・安全なAI駆動開発実践 / AI Driven Development with AI-DLC
yoshidashingo
0
170
2026TECHFRESH畢業分享會 - AI 時代的人生存檔點
line_developers_tw
PRO
0
730
Snowflakeと仲良くなる第一歩
coco_se
4
410
小さく始める AI 活用推進 ― 日経電子版 Web チームの事例/nikkei-tech-talk47
nikkei_engineer_recruiting
0
200
脆弱性対応、どこで線を引くか
rymiyamoto
0
350
なぜ Platform Engineering の土台に Kubernetes を選ぶのか
r4ynode
1
560
JSAI2026 オーガナイズドセッションOS-27「不動産とAI」趣旨説明 / JSAI2026 Organized Session OS-27 “Real Estate and AI”: Statement of Purpose
ykiyota
0
220
Claude Code の Sandbox 機能を Anthropic Sandbox Runtime(srt) で試そう!/lets-play-anthropic-sandbox-runtime
tomoki10
1
530
新規事業を牽引する技術選定 〜フルスタックTypeScript開発の実践事例〜
nullnull
3
380
価格.comをAI駆動で全面刷新する ー 30年分の技術的負債を返し、次の30年の土台をつくる ー / AI Engineering Summit Tokyo 2026
tkyowa
53
59k
中期計画、2回作ってみた ~業務委託と正社員、両方の視点から~
demaecan
1
660
FDE という解 ― 暗黙知と明示知をつなぐ、伴走型エンジニアリング ―
otanet
0
130
Featured
See All Featured
What Being in a Rock Band Can Teach Us About Real World SEO
427marketing
0
250
Test your architecture with Archunit
thirion
1
2.3k
Building Better People: How to give real-time feedback that sticks.
wjessup
370
20k
Chasing Engaging Ingredients in Design
codingconduct
0
220
SEO for Brand Visibility & Recognition
aleyda
0
4.6k
How to Grow Your eCommerce with AI & Automation
katarinadahlin
PRO
1
200
The Curse of the Amulet
leimatthew05
1
13k
Efficient Content Optimization with Google Search Console & Apps Script
katarinadahlin
PRO
1
610
Building a A Zero-Code AI SEO Workflow
portentint
PRO
0
570
Building AI with AI
inesmontani
PRO
1
1.1k
How to optimise 3,500 product descriptions for ecommerce in one day using ChatGPT
katarinadahlin
PRO
1
3.6k
Bridging the Design Gap: How Collaborative Modelling removes blockers to flow between stakeholders and teams @FastFlow conf
baasie
0
580
Transcript
ブラウザプレビュー期間に入ったWebAssembly Mozilla Japan N.Shimizu (
[email protected]
/ @chikoski) Emscripten Night!! #2
@ Drecom (2016/12/21)
/4IJNJ[V!DIJLPTLJ ˖ ⛆加㖩ח֮8FC⡲⠓爡ד⫴ְגְתׅ ˖ 'JSFGPY ˖ 3VTUBTNKT8FC"TTFNCMZ8FC73 ˖ فؚٗٓىؚٝ鎉铂ה؟حؕ٦鋅ךָ㥨ֹדׅ ˖
㘗ך䓼ְ鎉铂ָ㥨ֹדׅ ˖ IUUQTTQFBLFSEFDLDPNDIJLPTLJ
None
None
Open Source Project
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/)
To ensure the Internet is a global public resource, open
and accessible to all. Mozilla Mission(https://www.mozilla.org/en-US/mission/)
debugger.html:再開発中のFirefox 組み込みのデバッガー • React と Redux、flow を使って実装されています • スタンドアローンで実行できます •
Firefox だけでなく、Google Chromeやnode.jsで動いているコードもデバッグできます • https://github.com/devtools-html/debugger.html
Remote Debugging Protocol / Chrome Debugging Protocol のフロントエンド $ISPNF%FCVHHJOH1SPUPDPM $ISPNF%FCVHHJOH1SPUPDPM
3FNPUF%FCVHHJOH1SPUPDPM
よく紹介させていただいています!ありがとうございます!!
• asm.js のコードはサイズが大きくなりがちで、ロードに時間がかかる傾向があります • ロードに時間の大半が構文解析に充てられています • 構文解析を事前に行い、その結果をバイナリ形式で表現することで、ロード時間を短縮します ߏจղੳ μϯϩʔυ ίϯύΠϧ
࣮ߦ asm.js ߏจղੳ μϯϩʔυ ίϯύΠϧ ࣮ߦ WASM
WAST TFU@MPDBMB JBEE JDPOTU JNVM
JDPOTU JDPOTU i32.mul i32.add set_local $a 1 i32.const 1 i32.const 2 i32.const
https://hacks.mozilla.org/2016/10/webassembly-browser-preview/
https://hacks.mozilla.org/2016/10/webassembly-browser-preview/
https://blogs.windows.com/msedgedev/2016/10/31/webassembly-browser-preview/
8"4.גוֲװג8FCل٦آח穈鴥ך
HTML TDSJQUUZQFNPEVMFTSDNPEVMF@BXBTNTDSJQU TDSJQUUZQFNPEVMFTSDNPEVMF@CKTTDSJQU TDSJQUTSDNBJOKTTDSJQU 未来的には、ES6 moduleの枠組みで利用できるようにしたい(希望)
JS GFUDI NPEVMF@BXBTN UIFO SFTQPOTFSFTQPOTFBSSBZ#VGGFS UIFO CVGGFSOFX6*OU"SSBZ CVGGFS
UIFO CZUFT8FC"TTFNCMZDPNQJMF CZUFT UIFO NPEVMF\ DPOTUJOTUBODFOFX8FC"TTFNCMZ*OTUBODF NPEVMF ^ WASMモジュールのコンパイルと、モジュールのインスタンス化
属性 役割 WebAssembly.Module WebAssembly.Moduleオブジェクトのコンストラクタ WebAssembly.Instance WebAssembly.Instanceオブジェクトのコンストラクタ WebAssembly.Memory WebAssembly.Memoryオブジェクトのコンストラクタ WebAssembly.Table WebAssembly.Tableオブジェクトのコンストラクタ
WebAssembly.CompileError デコード、もしくは検証中に発生したエラー WebAssembly.RuntimeError trap 発生時に送出されるエラー WebAssembly:グローバルオブジェクト
WASMのWebAssembly.Moduleへのコンパイル 1.エンコード方式に従って、バイトコードをデコードし、抽象構文木(AST)を作成します 2.ASTの構造を検証します 3.AST中の文字列を UTF-8 としてデコードします •名前は文字列として扱われます •名前:インポートする関数、エキスポートする関数など 4.上記に成功した場合、WebAssembly.Moduleオブジェクトが作成されます 5.失敗した場合は、WebAssembly.ComileError
が送出されます
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
WAST NPEVMF JNQPSUJNIFMMP JNQPSUJXPSME GVODNBJO
DBMM@JNQPSUJ TUBSUNBJO GVODG DBMM@JNQPSUJ FYQPSUGG import / export
JS NPEVMF\ DPOTUJNQPSU\ N\IFMMP DPOTPMFMPH IFMMP XPSME DPOTPMFMPH XPSME
^ DPOTUJOTUBODF8FC"TTFNCMZJOTUBODF NPEVMF JNQPSU IFMMP JOTUBODFFYQPSUTG XPSME ^ インスタンス作成時にimportするシンボルを与えることで、ダイナミックリンクさせられます
線形メモリー:WebAssemblyのメモリモデル • バイト単位(8ビット)でアクセスできる線形メモリ • ヒープ領域 • データ領域 • リトルエンディアン •
最大サイズは 4GiB(1ページ64KiB、32ビット分) • 演算子を利用してサイズを増やせます • grow_memory 演算子でサイズを増やせます • current_memory 演算子で現在のサイズを取得できます CZUF BEESFTT@TQBDF@NBY
ԋࢉࢠ ৼΔ͍ 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ͷΛอଘ͢Δ 読み書きするデータのサイズは演算子の種類によって決まります
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
GVODIJ QBSBNJ JTUPSFPGGTFU HFU@MPDBM
JDPOTU JTUPSFBMJHO HFU@MPDBM JDPOTU SFUVSO = HFU@MPDBM PGGTFU offsetで、アクセスする場所をバイト単位でずらせます
GVODIJ QBSBNJ JTUPSFPGGTFU HFU@MPDBM
JDPOTU JTUPSFBMJHO HFU@MPDBM JDPOTU SFUVSO I J = HFU@MPDBM Y Y YJ YI align を指定することで、転送サイズを変えられます(上記の例は1バイトずつ転送しています)
JS DPOTUNPEVMFT\^ NPEVMF"\ NPEVMFT"8FC"TTFNCMZ*OTUBODF NPEVMF" ^ NPEVMF#\ NPEVMFT#8FC"TTFNCMZ*OTUBODF NPEVMF#
^ module.A と module.B はメモリ空間を共有します
JS DPOTUNFNPSZ8FC"TTFNCMZ.FNPSZ DPOTUWJFXOFX6*OU"SSBZ NFNPSZCVGGFS WJFX<> WJFX<> WJFX<> WJFX<> WJFX<>
WJFX<> メモリ空間は、WebAssembly.Memoryオブジェクトとして参照できます
つかってください! • これからはWebAssemblyオブジェクトを利用して、モジュールをコンパイルします • WebAssembly.compile • WebAssembly.Module • WebAssembly.Instance •
ダイナミックリンクできるようになりました • メモリ空間はインスタンス間で共有されます • Firefox 52で標準利用できるようになります(2017年3月リリース予定) • バグやおかしいな?と思う点があったら、ご連絡ください! • 知見を貯めて、公開してください!