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
1.9k
はじめての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.8k
Jamstack × PWA におけるキャッシュ戦略
shibe97
3
1.2k
CSR / SSR / SSGの動向2020
shibe97
2
1.5k
Jamstack×microCMS 実装編
shibe97
4
900
SentryでSPAのエラーログを収集する
shibe97
1
1.6k
useRefについて調べてみた
shibe97
1
140
フロントエンドエンジニアのキャリアパス
shibe97
9
3.7k
Other Decks in Technology
See All in Technology
Azureの開発で辛いところ
re3turn
0
240
2025年の挑戦 コーポレートエンジニアの技術広報/techpr5
nishiuma
0
150
自社 200 記事を元に整理した読みやすいテックブログを書くための Tips 集
masakihirose
2
330
Docker Desktop で Docker を始めよう
zembutsu
PRO
0
180
三菱電機で社内コミュニティを立ち上げた話
kurebayashi
1
360
Cloudflareで実現する AIエージェント ワークフロー基盤
kmd09
0
290
AWSサービスアップデート 2024/12 Part3
nrinetcom
PRO
0
140
[IBM TechXchange Dojo]Watson Discoveryとwatsonx.aiでRAGを実現!事例のご紹介+座学②
siyuanzh09
0
110
AWS re:Invent 2024 re:Cap Taipei (for Developer): New Launches that facilitate Developer Workflow and Continuous Innovation
dwchiang
0
170
iPadOS18でフローティングタブバーを解除してみた
sansantech
PRO
1
150
AWSの生成AIサービス Amazon Bedrock入門!(2025年1月版)
minorun365
PRO
7
470
デジタルアイデンティティ人材育成推進ワーキンググループ 翻訳サブワーキンググループ 活動報告 / 20250114-OIDF-J-EduWG-TranslationSWG
oidfj
0
540
Featured
See All Featured
How to Ace a Technical Interview
jacobian
276
23k
Code Reviewing Like a Champion
maltzj
521
39k
Raft: Consensus for Rubyists
vanstee
137
6.7k
The Illustrated Children's Guide to Kubernetes
chrisshort
48
49k
Fireside Chat
paigeccino
34
3.1k
Automating Front-end Workflow
addyosmani
1366
200k
Typedesign – Prime Four
hannesfritz
40
2.5k
The Cost Of JavaScript in 2023
addyosmani
46
7.2k
RailsConf 2023
tenderlove
29
970
GraphQLとの向き合い方2022年版
quramy
44
13k
jQuery: Nuts, Bolts and Bling
dougneiner
62
7.6k
For a Future-Friendly Web
brad_frost
176
9.5k
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