2021/05/12に開催した社内向けハンズオンの資料です。
![Rustハンズオン第5回 WebAssembly編](https://cdn-ak-scissors.b.st-hatena.com/image/square/14801d5bfcd4e36ac3cdb561b88b8f7d667cdd16/height=288;version=1;width=512/https%3A%2F%2Ffiles.speakerdeck.com%2Fpresentations%2F945ce930d8c7427b86c3f4b22053ea99%2Fslide_0.jpg%3F18064283)
概要 最近はWebAssemblyに興味があり、勉強していたんだけど仕様を読み始めても頭に入らないのでインタプリタを作ってみることにした。よくわからないものは作ってみるのが一番よい。 github.com まだ残された課題は多いのだけれども、一つ目標にしていた「Goで書いたゲームボーイエミュレータを動かす」を達成できたのでここに書いておく。 うおーついにRustで書いた自作wasm interpreter上でgoで書いた自作gameboy emulatorが動いたー!けど1FPSくらいしかでない... pic.twitter.com/I5B2XL5E0W— bokuweb (@bokuweb17) 2020年2月24日 こツイートに貼られているのは残念ながら、静止画ではなく、動画でありパフォーマンスが悲しいことになっていることを示している。あまりに遅くてプレイ画面まで到達できない。今後これ
話題になってたのは去年くらいな気もするし今さら感はあるけど、今だからこそすごい化けてたりしないかなーという期待も込めて。 個人的には、WASMでWebアプリを作る時代になるとはあまり思えてないけど、まぁ試しておく価値はあるかなと思いその学びをメモ。 yewstack/yew GitHub - yewstack/yew: Rust / Wasm framework for building client web apps RustでReactっぽいコードが書けて、それがWASMで動くので、型ありでちょっぱやなWebアプリが作れるぜ!っていうやつ。 今のバージョンは`0.11.0`で、最小のコードはこんな感じ。 use yew::{html, Callback, ClickEvent, Component, ComponentLink, Html, ShouldRender}; struct
この記事は、WebAssembly Advent Calendar 2019 - Qiita の 15日目の記事です。 友人に載せられて登録してしまったので、Go言語でWasmに入門しました。 単純にチュートリアルをやるだけだとつまらないので、ちょっとだけ実用的なボタンをクリックしてメニューをトグルできるようにしました。 はじめに、github.comの通りにして作成します。 次に index.html の body タグを次の内容に変更しました。 divの子要素をWasmから操作してメニューの表示非表示を切り替えます。 <button id="menu-toggle-button">Menu</button> <div id="menu-root"></div> また、ついでに遷移先のHTMLファイル (about.html, links.html)も適当な内容で作成します。 その後、メ
The Qiita Advent Calendar 2019 is supported by the following companies, organizations, and services.
RustでもWebAssembly出力ができるようになっているんですが、いつか触ろうと思いつつずっと触る機会がありませんでした。 ちょうど自身の周りでもElectronの利用事案が増えて来て(例えばPostludium/Peridotでパイプラインの設計エディタのためにElectron使おうと思ったこともありました......)、良い機会なので入門として件名のライブラリを触ってみることにしました。 Kaguraとは Rust製のWebフロントエンドフレームワークです。端的に言ってしまえばReactやVueなどの仲間です。 仮想DOMを用いて差分レンダリングを行う点は既存のフレームワーク同様ですが、アーキテクチャ的にはHalogenやElmが近いです (いわゆるTEAの形をとっています)。 RustでWebAssemblyを出力する、動かす Rustにはwasm-bindgenという便利ツー
はじめに RustでWebAssemblyインタプリタを作ったのでその実装の話や、wasmの仕様についての記事です。 HListを使ったジェネリックプログラミングの話や、最後の方には「自作言語 on 自作wasmインタプリタ on 自作wasmインタプリタ」みたいな話も出てきます。 分かりにくい所や間違っている所は指摘してくださると助かります。 リポジトリ 作った成果物のリポジトリです。まだpublishはしていませんがクレートになっています。 cargoのexample実行に対応しているのでそれを見ればだいたい分かると思います。 今回はadc-2019-12-22というタグがついたコミットのソースを元に解説していきます。 https://github.com/kgtkr/wasm-rs/tree/adc-2019-12-22 仕様書 この記事では仕様書を読みながら順番に実装を解説していき
abstract: https://jsconf.jp/2019/talk/fuji-goro Wasmを触り始めるにはまだ少しはやくて、おそらく2020年にはリリースされるであろうSIMDなどがほしいところです。とはいえ、JSの最適化コンパイラ(スライドではV8のTurboFanにだけ触れていますがほかのJSエンジンでも基本的には同じ傾向なはず)に頼らず安定したパフォーマンスを出せるというのは大きなメリットなので、その方面だと現在の状況でも考慮に値する可能性はあります。 ところでスライドでも触れてますが、eBayのバーコードスキャナ事例は大変興味深いです。 WebAssembly at eBay: A Real-World Use Case ここのエントリでも次のように書かれていて This is sort of expected, as JavaScript can indeed be
# What is the File System Access API?The File System Access API (formerly known as Native File System API and prior to that it was called Writeable Files API) enables developers to build powerful web apps that interact with files on the user's local device, such as IDEs, photo and video editors, text editors, and more. After a user grants a web app access, this API allows them to read or save chan
Unity WebGL ビルドターゲットの出力形式をWebAssembly(Wasm)に切り替える計画を本ブログで発表してから、かなりの年月が経ちました。この変更が Unity 2018.2 で実装されます。そこで本記事では、これまでの経緯と、この変更がインタラクティブウェブコンテンツを制作する皆様にとって何を意味するのかをご説明したいと思います。 WebAssembly への対応は Unity 5.6 で試験的に実装されました。これは WebAssembly が主要な 4 種のデスクトップブラウザーで利用可能になったのとほぼ同時期です。以来 Unity およびこれらのブラウザーに各種改良とバグ修正が加えられると同時に、これを導入するユーザーが増加し、多くの肯定的なフィードバックが寄せられました。これを受け、次のステップとして、満を持して正式対応に踏み切ることになりました ― Unity
この記事は WebAssembly Advent Calendar 2018 - Qiita と WebAssembly Advent Calendar 2018 - Adventar の 25日目の記事です. 両方とも空いていたので,ふたつを繋ぐ架け橋を兼ねて. 片方しか読んでいなかった人も,この機会にもう片方の Advent Calendar を読んでみるのはいかがでしょう 🎄 WebWorker 上での Rust を使った WebAssembly 開発について,ZIP 展開アプリを例に,環境構築から実行までを解説します. JavaScript でフロントエンド開発の経験があるひとを対象にして書いているため, Node.js 周りの説明は少なめになっています. Rust についてはまだ勉強途中ですので,気になる点があったら編集リクエストかコメント欄に書いていただけると嬉しいです. T
本記事は、以下の記事の翻訳です: WebAssembly: How and why by Milica Mihajlija on LogRocket * 執筆者に許諾を頂いた上で掲載しています。 どのようにしてブラウザでネイティヴ・コードを実行するのか そこにはどのような背景があるのか それは JavaScript にとって、さらには Web 開発にとって、いったい何を意味するのか すべてのブラウザにおいて、すなわち Chrome / Firefox / Edge / Safari いずれにおいても、コードは JavaScript エンジンによって解釈されて実行されます――ただ JavaScript が実行されるだけです。 残念なことに、JavaScript は、実行したいあらゆる処理にとって理想的なものというわけではありません。 ここに WebAssembly の入り込む余地があります。
W3Cの WebAssembly Working Groupは、Webブラウザ上でネイティブコードに近い実行速度で高速に実行できるバイナリフォーマット「WebAssembly」の仕様が勧告に到達したことを発表しました。 今回勧告になったのは、WebAssemblyに関連する3つの仕様です。 1つ目はWebAssemblyのバイナリファイルを実行する仮想マシンの仕様を定義した「WebAssembly Core Specification」。これは一般的なマイクロプロセッサの動作を模倣するような作りにすることで、WebAssemblyのバイナリファイルでプロセッサのネイティブコードに近い実行速度を実現するようになっています。 2つ目の「WebAssembly Web API」は、さまざまなプラットフォームでWebAssemblyを利用可能にするため、WebAssemblyバイナリファイルのシリ
2018年10月における WebAssembly の状況を記録するために、現時点での WebAssembly を試してみることにしました。 1. WebAssembly とは?これまで、ウェブサイト上で何かプログラミングによる処理を行いたい場合(サーバー側ではなくブラウザ側の話しです)は、JavaScript を使うしかありませんでした。JavaScript は唯一のウェブ標準プログラミング言語だったのです。これに続いて、新たなウェブの標準として登場したプログラミング言語が「WebAssembly」です。 JavaScript よりも実行速度が求められる処理で使用することを主な目的として、主要ウェブブラウザベンダが、W3C WebAssembly Working Group というグループを介して開発しています。 WebAssembly は低水準なプログラミング言語ですので、人間が直接記述
We have been experimenting with a couple of approaches to bring Mono to the web using WebAssembly - a technology that can efficiently and safely execute code in web browsers without being limited to Javascript. Running code written in C or C++ inside the browser has been a big motivator, but most major programming languages have plans to target WebAssembly as a platform. WebAssembly has been out f
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く