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
はじめてのWebAssembly
Search
Kazuki Shibata
May 18, 2017
Technology
2
2k
はじめてのWebAssembly
Nihonbashi.js #1の資料です。
Kazuki Shibata
May 18, 2017
Tweet
Share
More Decks by Kazuki Shibata
See All by Kazuki Shibata
microCMSでif文を作る
shibe97
1
1.1k
SvelteKitでJamstackを試す
shibe97
1
1.1k
フロントエンドのトレンド〜サーバーレスSPA、Jamstack〜
shibe97
16
4.9k
Jamstack × PWA におけるキャッシュ戦略
shibe97
3
1.2k
CSR / SSR / SSGの動向2020
shibe97
2
1.6k
Jamstack×microCMS 実装編
shibe97
4
950
SentryでSPAのエラーログを収集する
shibe97
1
1.7k
useRefについて調べてみた
shibe97
1
160
フロントエンドエンジニアのキャリアパス
shibe97
9
3.8k
Other Decks in Technology
See All in Technology
成立するElixirの再束縛(再代入)可という選択
kubell_hr
0
260
Javalinの紹介
notoh
0
110
Model Mondays S2E01: Advanced Reasoning
nitya
0
350
堅牢な認証基盤の実現 TypeScriptで代数的データ型を活用する
kakehashi
PRO
2
220
Introduction to Sansan for Engineers / エンジニア向け会社紹介
sansan33
PRO
5
38k
データ戦略部門 紹介資料
sansan33
PRO
1
3.2k
Tenstorrent HW/SW 概要説明
tenstorrent_japan
0
390
エンジニア採用から始まる技術広報と組織づくり/202506lt
nishiuma
8
1.7k
DB 醬,嗨!哪泥嘎斯基?
line_developers_tw
PRO
0
160
kotlin-lsp を Emacs で使えるようにしてみた / use kotlin-lsp in Emacs
nabeo
0
150
(非公式) AWS Summit Japan と 海浜幕張 の歩き方 2025年版
coosuke
PRO
1
240
kubellが挑むBPaaSにおける、人とAIエージェントによるサービス開発の最前線と技術展望
kubell_hr
1
300
Featured
See All Featured
The Cult of Friendly URLs
andyhume
79
6.4k
The Invisible Side of Design
smashingmag
299
51k
Reflections from 52 weeks, 52 projects
jeffersonlam
350
20k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
248
1.3M
Fantastic passwords and where to find them - at NoRuKo
philnash
51
3.3k
Intergalactic Javascript Robots from Outer Space
tanoku
271
27k
Become a Pro
speakerdeck
PRO
28
5.4k
Docker and Python
trallard
44
3.4k
The Illustrated Children's Guide to Kubernetes
chrisshort
48
50k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
137
34k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
43
2.4k
Product Roadmaps are Hard
iamctodd
PRO
53
11k
Transcript
͡Ίͯͷ8FC"TTFNCMZ ࣲాف!TIJCF /JIPOCBTIJKT
σβΠφʔ / ϑϩϯτΤϯυΤϯδχΞ :BIPP+"1"/ͷࠂܥπʔϧͷ ϑϩϯτΤϯυΛ୲͍ͯ͠·͢ ࣲా ف @shibe97
+BWB4DSJQUେ͖ͬࢠͰ͢
͚Ͳ
ͪΐͬͱ͖ͨ
ͱ͍͏ΑΓ
3FBDU 3FEVY͖ͨ
Կ͔৽͍͠ͷʹखΛग़ͯ͠ΈΑ͏ɾɾɾ
None
+BWB4DSJQUͷ
͍ͩͿ͘ͳ͚ͬͨͲɺॏ͍ॲཧʹऑ͍ʢϒϥβݻ·Δʣ ܕ͕໌ࣔతͰͳ͍ ίϯύΠϧܕͰͳ͘ɺΠϯλϓϦλܕݴޠ 'JSFGPYʢ4QJEFS.POLFZʣ &EHFʢ$IBLSBʣ $ISPNFʢ7ʣ
ͦͦ͜ΜͳෳࡶͳͷΛ࡞ΔͨΊʹੜͨ͠ݴޠ͡Όͳ͍ "KBYͷීٴͱڞʹαʔόαΠυͷॲཧ͕ΫϥΠΞϯταΠυʹ Ҡ͖ͬͯͨ͋ͨΓ͔Βແཧ͕ग़࢝Ίͨ
+BWB4DSJQU࣮ߦ࣌ͷྲྀΕ ϒϥβ͕+BWB4DSJQUͷߏจղੳΛߦ͍ɺ"45ʢ"CTUSVDU4ZOUBY 5SFFʣʹม "45ΛόΠτίʔυʹม͠ɺԾϚγϯ্Ͱಈ࡞ͤ͞Δ ܕใ͕ݻ·͖ͬͯͨΒɺ෦తʹػցޠʹม ʢ+VTUJO5JNFίϯύΠϧʣ
ࣄલʹܕఆ͕ٛͰ͖Εʜ
asm.js
BTNKTͬͯͲΜͳͷ .P[JMMB͕ఏএͨ͠+BWB4DSJQUͷߴԽٕज़ ͋͘·Ͱ+BWB4DSJQUϑΝΠϧ ͋Δϧʔϧʹै͏ͱܕใΛ༩͑Δ͜ͱ͕Ͱ͖Δ ʢϒϥβଆͷαϙʔτ͕ͪΖΜඞཁʣ
function AddFunctions(){ "use asm"; function add1(value){ value = value |
0; // Ҿ int ͩͱ໌ࣔ var result = 0; // int ͱͯ͠એݴ result = (value + 1) | 0; // int Ωϟετ return result; } return { add1: add1 } }
BTNKTʹΑΔҾͷܕఆٛ JOU WBMVFWBMVFc EPVCMF WBMVF WBMVF qPBU WBMVFG WBMVF
BTNKTͷͭΒΈ ԋࢉ͔͠Ͱ͖ͳ͍ จࣈྻΦϒδΣΫτΛແཧΓදݱ͠Α͏ͱ͢ΔͱɺόΠφϦ͕ བྷΜͰ͖ͯπϥ͍ ਓ͕ॻ͘ݴޠ͡Όͳ͍
ଞͷݴޠ͔Βม͢Εʜ
--7.ίϯύΠϧͷΈ $ $ 0CKFDUJWF$ (P 3VTU தؒݴޠ +BWB4DSJQU ͦͷଞݴޠ
˞+BWB4DSJQU༻ͷ--7.ϕʔείϯύΠϥ
มͰ͖ͨɺ͔͠͠ʜ ϑΝΠϧ༰ྔ͕େ͖͍ )FMMP8PSME͚ͩͰ, BTNKT.P[JMMB͕ߟ͑ͨͷ͕ͩɺશϒϥβϕϯμʔڠྗͯ͠ ͬͱ͍ܰܗࣜ࡞ͬͪΌ͏ʁ
ʢXBTNʣ
ݱঢ়ɺXBTNʹมͰ͖Δݴޠ $ $ 3VTU
Α͠ɺ3VTUͩʂ
ͬ͘͟Γ3VTUͬͯʁ όʔδϣϯϦϦʔε .P[JMMB͕։ൃ 'JSFGPY͔Β3VTUͰॻ͍ͨίʔυ͕ಈ͍͍ͯΔ ҆શੑɺฒྻੑʹ༏Ε͍ͯΔ
3VTUͷओͳ༻్ 4ZTUFN1SPHSBNNJOH /FUXPSL1SPHSBNNJOH ,FSOFM 8FC"TTFNCMZ
+BWB4DSJQU 1)1 3VCZ +BWB $ 3VTU ʢݸਓͷݟղͰ͢ʣ
FNTDSJQUFO +BWB4DSJQU"1* 8FC"TTFNCMZͰͷར༻ྫ index.rs index.wasm TypedArray
ࢼ͠ʹ3VTUͰ%0.Λు͖ग़ͤΔ͔ ͬͯΈͨ
XFCQMBUGPSNͱ͍͏DSBUFΛ͏ /PEFͰ͍͏QBDLBHFతͳͷ
)5.-ͷத <script> var Module = {} fetch('index.wasm') .then((response) => response.arrayBuffer())
.then((buffer) => { Module.wasmBinary = buffer; var script = document.createElement('script'); script.src = 'index.js'; document.body.appendChild(script); }) </script>
σϞ
ͳΜ͔3FBDUDSFBUF&MFNFOU ͬΆ͕͋͞Δ
+49తͳͷ͕͋Ε ͍͍ײ͡ͳΔͷͰʁ
ͱࢥͬͨΒ͋ͬͨ
KTYSTSFBDUST
͚Ͳ·ͩ։ൃͷॳظஈ֊ͬΆ͍Ͱ͢
5PEP.7$ IUUQSVTUXFCQMBUGPSNHJUIVCJPSVTUUPEPNWD
·ͱΊ ͍ͭʹ+BWB4DSJQUҎ֎ͷݴޠϒϥβͰಈ͔ͤΔ࣌ʹ 3VTU·ͩ8FCΞϓϦ੍࡞ʹऑ͍͕ɺࠓޙ͍ͯͬͨ͠߹ʹ ϑϩϯτΤϯυ͕มΘΔՄೳੑ͕͋Γͦ͏
5IBOLT 5XJUUFS(JU)VC!TIJCF