LoginSignup
8
2

WASM書いてみた(Go vs Rust)

Last updated at Posted at 2023-12-13

はじめに

本記事では、Go言語とRustで同じ機能を持つWASMを書き、3つの観点で比較した

つくったもの

複数のファイルをZipアーカイブに変換しダウンロードする機能を持つWASMを、Go言語とRustで作成した

環境等

Mac Mini (M1)

Darwin root.local 23.1.0 Darwin Kernel Version 23.1.0: Mon Oct  9 21:28:12 PDT 2023; root:xnu-10002.41.9~6/RELEASE_ARM64_T8103 arm64

Go言語

go version go1.21.5 darwin/arm64

Rust

stable-aarch64-apple-darwin unchanged - rustc 1.74.1 (a28077b28 2023-12-04)

すうじをみる

コードサイズ

言語 ファイル名 サイズ(Byte)
1 Go言語 main.go 1662
2 Rust lib.rs 2169

Go言語がより小さいファイルサイズ。ただし差は 500Byte程度。
コードサイズ(または文字数)は書き方にも影響され、IDEの機能で長いコードを書くのも苦しくないという意見は存在すると思う。
しかし、改修や機能追加の際にはコードを読み・理解する必要があり、コードの長さは無視できない為、今回比較対象とした。

WASMサイズ

言語 ファイル名 サイズ(Byte)
1 Rust zip_archive_rust_wasm_bg.wasm 149554
2 Go言語 main.wasm 2618952

Rustがより小さいファイルサイズ。桁が違う。ただしTinyGo未使用。
ビルドされたwasmファイルは、処理実行前にダウンロードされる。回線状況によってはユーザビリティに影響するため比較対象とした。

実行時間

言語 平均実行時間(msec)
1 Go言語 166.5
2 Rust 1846

Go言語がより短い実行時間。桁が違う。
計測方法は、1MByteのファイルを10個 入力として渡しZipアーカイブ完了までの時間を2回測り平均した。
処理開始と完了時にDate.now()でmsecを出力した。(リポジトリのindex.html参照)
ブラウザはChromeを使用した。

これは予想外で、同程度かRustが短い実行時間かと思っていた。
コードの書き方や計測方法にも影響されるが、今回はこの結果。

処理完了までの待ち時間として、ユーザビリティに影響するため比較対象とした。

おわりに

今回比較した観点以外にも、WASMを書く言語として以下の点を気にしていきたい

  • 求める機能を実現できるライブラリが存在するか・そしてWASMで利用可能か
  • 新規メンバーの習熟コストが高いか
  • 改修や機能追加が容易か

謝辞

今回の記事を書くきっかけを与えられた
実践入門WebAssembly

8
2
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
2