Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
AssemblyScriptではじめるWebAssembly入門
Search
asuka
February 23, 2024
Technology
440
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
AssemblyScriptではじめるWebAssembly入門
https://niigata-5min-tech.connpass.com/event/310026/
asuka
February 23, 2024
More Decks by asuka
See All by asuka
GoとSIMDとWasmの今。
askua
3
620
2025年ふりかえり
askua
1
250
ライブラリを公開してメンテナンスした一年
askua
0
120
Wasmの気になる最新情報
askua
1
410
Wasmのエコシステムを使った ツール作成方法
askua
0
450
Pure Goで体験するWasmの未来
askua
1
1.1k
Wasmで社内ツールを作って配布しよう
askua
0
340
Wasm元年
askua
0
400
wstdなんだか良さそう
askua
0
160
Other Decks in Technology
See All in Technology
DEFCON_CHV_CTF_Write-up.pdf
bata_24
0
150
Deploying a Full-Stack Bun-Native Framework on Cloudflare Workers
7nohe
0
160
アプリをもっと"iOSアプリっぽく"する小さな工夫 / Small Touches That Make Your App Feel More Like an iOS App
matsuji
1
840
Minecraft JavaのMODをSwiftで作る
1mash0
0
160
山手線を徒歩で一周してわかった、 位置情報アプリは「足」が最強のデバッガー
hinakko
0
150
2026-09-10 【Snowflake World Tour Tokyo 2026】dbt Core と Snowflake で実現する多層的なデータガバナンス / Multi-Layered Data Governance Powered by dbt Core and Snowflake
civitaspo
0
390
絵ではじめるKubernetesセキュリティ
aoi1
3
490
omasushiというライブラリを作った
polidog
PRO
0
220
コスト最適化の「めんどくさい」を AWS FinOps Agent でチョット楽にする
classmethod_kaz
0
340
AIエージェントの自己改善をどう設計するか / How to Design Self-Improvement for AI Agents
22mi
23
15k
20260912_スクラムにジェネラリストは必要か
ryugen04
0
400
研究開発部の紹介 / Sansan R&D Profile
sansan33
PRO
5
25k
Featured
See All Featured
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
37
6.6k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
508
140k
Automating Front-end Workflow
addyosmani
1369
210k
Navigating the Design Leadership Dip - Product Design Week Design Leaders+ Conference 2024
apolaine
2
430
Designing for humans not robots
tammielis
254
26k
Primal Persuasion: How to Engage the Brain for Learning That Lasts
tmiket
0
450
[RailsConf 2023] Rails as a piece of cake
palkan
59
7k
Context Engineering - Making Every Token Count
addyosmani
9
1.1k
A Soul's Torment
seathinner
7
3.6k
Code Reviewing Like a Champion
maltzj
528
40k
The Illustrated Children's Guide to Kubernetes
chrisshort
51
53k
The untapped power of vector embeddings
frankvandijk
2
1.9k
Transcript
N5T / Feb 23 2024 AssemblyScriptではじめる WebAssembly入門 1
自己紹介 asuka 今年は仕事でWasm使いたいよね! SNS - X @a_skua - GitHub @a-skua
- Zenn @askua - Blog www.askua.dev 2 去年は技術書典14, 15などに参加
WebAssembly は最近のウェブブラウザーで動作し、新たな機能と大幅なパフォーマン ス向上を提供する新しい種類のコードです。基本的に直接記述ではなく、C、C++、Rust 等の低水準の言語にとって効果的なコンパイル対象となるように設計されています。 なんだか良さそう WebAssembly 3 WebAssembly は最近のウェブブラウザーで動作し、新たな機能と大幅なパフォーマン ス向上を提供する新しい種類のコード
です。基本的に直接記述ではなく、C、C++、 Rust 等の低水準の言語にとって効果的なコンパイル対象となるように設計されていま す。 †1 WebAssembly の概要 †1 😎
WebAssembly は最近のウェブブラウザーで動作し、新たな機能と大幅なパフォーマン ス向上を提供する新しい種類のコードです。基本的に直接記述ではなく、C、C++、Rust 等の低水準の言語にとって効果的なコンパイル対象となるように設計されています。 コンパイル対象なんて言い出したぞ? WebAssembly 4 WebAssembly は最近のウェブブラウザーで動作し、新たな機能と大幅なパフォーマン ス向上を提供する新しい種類のコードです。基本的に直接記述ではなく、C、C++、Rust
等の低水準の言語にとって効果的なコンパイル対象 となるように設計されています。 †1 WebAssembly の概要 †1 🤯
WebAssembly 5 コンパイル言語から,Wasmにビルドして... JSでWasmをロードして起動 ね?簡単でしょ?
Dartの例 6 main.wasm main.mjs deno run --allow-read main.ts dart compile
wasm main.dart DartからWasmにビルドして... JSでWasmをロードして起動
Dartの例 7 main.wasm main.mjs deno run --allow-read main.ts dart compile
wasm main.dart DartからWasmにビルドして... JSでWasmをロードして起動 このJSは何? え,そのまま実行できないの ?
WebAssembly 8 コンパイル言語から,Wasmにビルドして... JSでWasmをロードして起動 ね?簡単でしょ? コンパイラ怖いよう Wasmをロードって何??
もう少しこう何というか 手心というか 9
AssemblyScriptからはじめてみない? 10
AssemblyScriptからはじめてみない? 11 AssemblyScript とは TypeScriptの構文でWasmをビルドできる言語. 準備が必要なのはこれだけ †2 AssemblyScript †2
AssemblyScript入門 12 asinit を実行すると,assembly/index.ts などのファイルが作成される. build/release.wasm build/release.js npm run asbuild
deno run --allow-read main.ts
AssemblyScript入門 13 asinit を実行すると,assembly/index.ts などのファイルが作成される. build/release.wasm build/release.js npm run asbuild
deno run --allow-read main.ts 知ってる書き方! 知ってる書き方!! 面倒なことは全部ここ (読まなくて良い)
AssemblyScriptはTypeScriptで構文解析の処理が書かれている. AssemblyScriptの仕組み 14 assembly/index.ts build/release.wasm build/release.js †3 Binaryen tokenizer.ts parser.ts
Binaryen AST Wasm †3 Binaryen IR
- 開発は停滞気味だが - ウェブ環境で部分的に Wasmを試してみたいというニーズには応えられそう. - Wasmの制約がASで使える型や構文に影響を与えている - TSではエラーにならないが, ASでは構文エラーになるケースがある.
- タイプエイリアスやオブジェクト型に注意. - 構文を確認するには, ASのドキュメントとパーサーテストを見ると良い 😆 AssemblyScriptの現状 15
AssemblyScriptの例 16
AssemblyScriptの例 17
AssemblyScriptの例 18 benchmark time (avg) p75 p99 p995 p999 js
n=92 4.864316037 4.625 5.7875 6.0958 19.5542 js(bigint) n=92 18.13722707 18.0625 19.6333 20.1334 20.9333 wasm n=92 22.57033527 22.8042 26.3 28.8375 42.3042 wasm(iterative) n=92 33.56680893 33.6042 36.1875 36.6709 37.25 js(iterative) n=92 112.3810171 112.7625 117.3709 118.0959 118.7458 js(iterative, bigint) n=92 340.2484605 339.7541 385.5333 410.1375 410.1375 wasm(n=92) : 7540113804746346429n js (n=92) : 7540113804746346000 (誤差) js (n=92, bigint): 7540113804746346429n
AssemblyScriptの例 19
AssemblyScriptの例 20 最速ではないが,安定している
AssemblyScriptの例 21 書き方によってパフォーマンスが大 きく異なる
数値計算 - 64bitsの整数を扱える - BigIntよりも速い 数値の繰り返し計算はWasmの得意分野 SIMD(v128型)もあるよ! WebでのWasmはすでに実用の域にあるよ !! (すでにWasmCGの関心はWebの外を向いている)
WebAssemblyの使い所 22 引用元 実践入門WebAssembly
その他 - ユーザー向けプラグインのインターフェースを定義したい - JS以外の言語で書かれたプログラムをウェブ上で動かしたい WebAssemblyの使い所 23
Wasmの入門に AssemblyScript 24