はじめに

本記事では、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)1Go言語main.go16622Rustlib.rs2169

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

WASMサイズ

言語ファイル名サイズ(Byte)1Rustzip_archive_rust_wasm_bg.wasm1495542Go言語main.wasm2618952

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

実行時間

言語平均実行時間(msec)1Go言語166.52Rust1846

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

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

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

おわりに

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

    • 求める機能を実現できるライブラリが存在するか・そしてWASMで利用可能か

 

    • 新規メンバーの習熟コストが高いか

 

    改修や機能追加が容易か

謝辞

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

广告
将在 10 秒后关闭
bannerAds