ここ1、2年の間で話題になることが多かったWebAssemblyのコンポーネントモデルについて、その背景やWasmとの関係、コンポーネントの作り方などについて紹介していきます。 本記事は、TechFeed Experts Night#9 〜 Rust/WebAssemblyの「いま」を探る のセッション書き起こし記事になります。 イベントページのタイムテーブルから、その他のセッションに関する記事もお読み頂けますので、一度アクセスしてみてください。 本セッションの登壇者 セッション動画 よろしくお願いします。今ご紹介いただきましたchikoski@です。 Rustにはコミュニティ的な関わり方が多くて、Rust.Tokyoというカンファレンスの運営をやっています。WebAssemblyは出たときからずっと仕様を追っていて、コロナの始まる前はWebイベントもやっていたのですが、最近はできていませ
On most systems, you can implement concurrency using either threads or processes, where the main difference between the two is that threads share memory and processes don’t. Modern web browsers support concurrency through the Web Workers API. Although Web Workers are by default closer to a multi-process model, when used with WebAssembly you can opt-in to a more thread-like experience. Just like in
Day 52 のテーマ Day 50 そして Day 51 と Wasm Workers Server の最もシンプルな基本動作をするアプリケーションについて眺めてみました。 とは言え、基本動作の中でもまだふれていない機能が Wasm Workers Server にはあります。標準機能として、キー/バリューのインメモリストアを提供しています。 今日は、その キー/バリューストアについて見てみたいと思います。 キー/バリューストア キー/バリューストアとは、文字通りキーとそのキーに対する値からなるデータ構造を保管するためのストレージです。ハッシュテーブルとしてよく知られているデータ構造ですよね。Redis, Memcached や MongoDB などが有名ですね。 さて、Wasm Workers Serverで提供しているキー/バリューストアは、Wasm Wokers Server がま
というわけで、昨日は Rust でのハンドラモジュールを作成してみました。 Wasm Workers Server の動作 ハンドラは次のように動作します: 👉 リクエストの受付けとレスポンスの返却 👉 WASI Standard Input / Output を介したデータの送受信 STDIN と STDOUT を使用したデータ送受信を行うインターフェースにすることにより、この Wasm Workers Server 以外の WASI ランタイム環境でも動作する互換性のあるハンドラを作成することができます。 サーバーは次のように動作します: 1️⃣ 指定したフォルダにある .wasm モジュールの識別 2️⃣ 各モジュールへの HTTP ルートの関連付け 3️⃣ (必要に応じて) Key / Value インメモリストア の作成 4️⃣ Wasmtime ランタイムの初期化 5️⃣
「Lunatic」という少し前から注目している技術があります。これは WebAssembly 上で動く Erlang にインスパイアされたランタイムで、Rust で実装されています。WebAssembly 形式でのバイナリを実行できる言語なら、どんな言語でもこのランタイムの上であれば理論的には動かすことができるようです。さまざまな言語のプラットフォームとして動く、セキュリティ面などの基本的な WebAssembly のメリットを享受することができます。 さて、Rust のエコシステムの一部として Lunatic を見てみると、Lunatic は tokio などと同様「非同期ランタイム」に位置付けられるものではないかと思います。下記の特徴をもつランタイムといえるでしょう。 Lunatic は WebAssembly を利用していることから、たとえば C とのバインディング時にもより安全に利
最近Rustでちょいちょい書いてたエミュレーターをWebブラウザーで動くようにしました。 現在のところ、ゲームボーイ・ゲームボーイカラー、ゲームボーイアドバンス、ファミコン、スーパーファミコンが動きます。 当初からブラウザーでも動かすことを念頭に置いていたので、コア開発が一段落したら対応させたいと思っていました。実際に動かすに当たっては思い通りに進んだところもあり、そうでないところもありといったところで、ところどころで気づいたところを書いておいたら誰かの参考になるかもしれないので、とりとめのない話ですが書き残しておくことにします。 一応ウェブアプリなのにJavaScriptもTypeScriptも、ReactもAngularも、npmもwebpackも使わない、インド人完全無視カレーみたいなものになりましたが、それでもそこそこに良い感じにできた気はするので、私のようにフロントエンドから取り
縦書き文庫の組版エンジンであるnehan(js製)をRustで書き換え、WebAssemblyで実行したところ、約3倍の高速化に成功しました。 現時点ですでに運用されています。 感想としては「本当は10倍ぐらい速くなって欲しかったけど、そこまでは速度が出ずにトホホ…」という感じです。 まあこれから頑張って、Rust側のソースを最適化していこうと思います。 ビューアーの変更点 全ページの計算が3倍ぐらい速くなった 作品を開いたとき、自動で前回に開いたページまで移動するようになった 全ページ計算してから表示されるようになった(以前は先頭ページが計算できたら、すぐに表示されていた) 数式の表示やコードハイライトの機能は削除した 今後の展望 nehan8のコードは、いずれGithubに公開したいと思っていますが、時期はもうちょい先になりそうです。 というのも、Rustの実験的な機能を使っている関係
wasm-packを使うことで、ビルドしてwasm-bindgen-cliでさらに変換処理を行い、npmで配布可能なパッケージにするという多段階必要なビルド手順をまとめることが可能です。 またnewコマンドのようなテンプレートから生成する機能などもあり、より手軽にWasmの実行を行えます。 後述のTrunkとの違いは、wasm-packはwebpackなどのJavaScript側で使われるバンドラーなどと合わせて使うことが想定されていることです。 webpackと合わせて使わない場合には今回のテーマであり後述するTrunkを利用したほうがより簡単にWasmの実行を行えます。 wasm-opt GitHub binaryenというリポジトリでwasm-optというツール含むいくつかのツールが作られています。 wasm-optはその名の通りWasmの最適化をしてくれるツールです。 与えるオプシ
Trunk is a WASM web application bundler for Rust. Trunk uses a simple, optional-config pattern for building & bundling WASM, JS snippets & other assets (images, css, scss) via a source HTML file. Getting Started Install First, install Trunk via one of the following options. Plain cargo Download the sources and build them yourself: cargo install --locked trunk You can also toggle some features usin
続編が書かれるかは未定です。今回は平面を表示しその上をカメラが移動するところまでです。 完成品 Wasm化してブラウザで動かすこともできます↓。 ただしSafariでは上手く動作しないようなので、最新版のGoogle ChromeやFirefoxでお試しください。操作はキーボードのみ(WASD/矢印)です。 ソースコードはGitHub上で公開しています。 はじめに: Bevy BevyはRustで書かれているゲームエンジンです。現在はまだ開発初期段階でAPIが不安定ですが、活発に開発が進められており今後が楽しみなプロジェクトでもあります。 ソースコードはオープンソース(MIT OR Apache 2.0)となっており、もちろんライセンス料なしで使えます。 現在サポートされているプラットフォームは、 Windows macOS Linux Web ですが、現在、 iOS Android のサ
この記事はもしかしたら誤りを含むかもしれません。 今週ツイッター眺めてたら色んな人が javy のリンクを共有していて、なんじゃこれ?と思ったのでそのまとめ。 FYI: https://github.com/Shopify/javy javy は Run your JavaScript on WebAssembly. と説明されていて、要するに JS を wasm で実行するものである。ただこのモチベーションなどがよく分からなかったので、wasm とは何かということから周辺知識をおさらいしつつ javy を理解しようとしてみる。 wasm とは こういうのは MDN を見る WebAssembly は最近のウェブブラウザーで動作し、新たな機能と大幅なパフォーマンス向上を提供する新しい種類のコードです。基本的に直接記述ではなく、C、C++、Rust 等の低水準の言語にとって効果的なコンパイル
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く