🐷

RustとWebAssemblyによるゲーム開発 ch.1

2024/06/18に公開

とかいう、欲張りな本を見つけたので読み進めています
https://www.oreilly.co.jp/books/9784814400393/
ただ読むだけではあまり定着しないので、理解しておきたい事やつまづいた事を設問形式でまとめました

復習

src/lib.rs内でmain_js()がエントリポイントとなるのはなぜ

#[wasm_bindgen(start)]がついているとwasm_bidgenがjsのプログラムの起点となるようにコードを生成してくれる

気になったところ

wasmはDOMにアクセス出来ないとあるが、何故だろうか

web-sysクレートがブラウザのapiを、wasm-bindgenがjsのバインディングを提供しているようなノリでwasmからDOMを操作するapiが提供されてても良いような気がした

色々調べたが、よくわからなかった(有識者助けて)
調べた感じ、wasmは安全性とパフォーマンス、マルチプラットフォームであることに焦点を当ててるから当面domの操作のような、ブラウザ固有で高レベルな操作は視野に入れていないという感じがした
wasiとか、今後調べていきたい

sandbox:外と隔離されていてその中で起こったことが外に影響しないようになっている環境

wasmのビルドってどうやるんだろう

wasm-packがwasmのコードをビルドするとあるが、具体的にどのようにビルドしているのだろうか
ビルドした際に吐き出されるのはどのような形式のファイルなのだろう

  1. そもそもrustcはwebassemblyをコンパイルターゲットとしてサポートしてるらしい。必要に応じてwasm-packwasm32-unknown-unknownを追加する
  2. wasm-bindgenを用いてjsとの橋渡しをする

use hoge::prelude::*;preludeを用意する際のベストプラクティス

ってあるのかな

なるべくpreludeに含めるものは絞る(当たり前)、traitなど広範に使われるものに限定する etc..

逆に、調べて出てきたpreludeのよくない点として、他人が読んだ際にどこからインポートしたものかがわかりにくいというのがあった
開発環境がlspをちゃんとセットアップしている場合はすぐにわかるだろうが、例えばgithub上で読む時などは、確かに分かりにくい

weeアロケータ

wasmのアロケータとあるが、そもそもアロケータってなんだっけ
デフォルトのRustのアロケータよりもはるかにメモリ使用量が少ないってあるけどなんでだろう

wasmの仕様は、初めにある程度のメモリ領域を確保しておいて、必要になった時に順次領域を拡大していくようになっている。また、一度確保したメモリ領域を縮小することはできない。従って、アロケータもシンプルなもので良いらしい。また、Rustのデフォルトアロケータに対して、パフォーマンスがトレードオフらしい。

Discussion