Categories
Tags
Alamofire Android AppStoreConnect AWS Bun C++ cAdvisor CFW Cloudflare Cloudflare Access Cloudflare KV Cloudflare Tunnel Cloudflare Workers D1 Deno DevContainer Discord Docker ECR ECS Edizon Emulator EmuMMC Fastlane Firestore Frida Ghidra Git GitHub GitHub Actions GitLab GPG Grafana HACGUI Heroku Homebrew Hono IDA Pro iOS IPSwitch Jailbreak Javascript JSON JWT LanPlay Linode macOS Mirakurun MongoDB NestJS NextJS Nintendo Nintendo Switch NodeJS PHP PostgreSQL Prisma Programming Prometheus Python React Realm RealmSwift Ruby Salmon Run Salmonia3+ Shogi Sideload Snap Splatoon Splatoon2 Splatoon3 SSH Stable Diffusion Starlight Swift Swift Package SwiftUI Switch TensorRT Turf War Typescript TypeScript Ubuntu Ubuntu Server VNC VPN VSCode Vue WARP Wireguard XCode Xcode yarn zsh 家電 横歩取り
428 words
2 minutes
WebAssemblyでブラウザでアセンブラを動かそう
WebAssembly
ブラウザから機械語であるアセンブリを実行するようにする謎の技術。
「ブラウザは Javascript が実行できるからアセンブリを実行する意味ある?」と思うかも知れないが、大いに意味はある。というのも、Javascript は動的型付け言語であるために実行時解析に時間がかかり、動作としては非常に遅い。
しかし、それも今までは気にならなかった。何故ならそんな重い処理をブラウザで実行するような場面がそうそうなかったからだ。
ところが最近は複雑なアニメーションやら WebGL やらでいろいろと思い処理を実行しなければならない場面が増えてきた。
asm.js
asm.js とは Javasciprt のコードの一部を事前にコンパイルすることで機械語として実行するための仕組み。
機械語として実行するので当然早いが、ファイルサイズが大きくなるなどの潜在的な問題を抱えていた。
じゃあもう「最初から C 言語などで書いたコードをアセンブラにして、そいつをブラウザで実行すればええやんけ」というのが WebAssembly の始まりである。
Swift+ WebAssembly
うちは Mac しかないので折角なので Swift をブラウザで実行することにした。
環境構築
carton
というツールをインストールする。M1 Mac でもインストール可能なので安心して欲しい。
brew install swiftwasm/tap/carton
今回は適当にHello, world!
を出力するプログラムを書いてみることにする。
mkdir helloworld
cd helloworld
carton init --template tokamak
WebAssemblyでブラウザでアセンブラを動かそう
https://fuwari.vercel.app/posts/2021/10/webassembly/