RustでWebAssembly始めるにはどうすればいい?

 コメント2件
Rustプログラミング入門 (最高峰・最難解言語)
開発者がもっとも好きなプログラミング言語 1 位 (6年連続) "Stack overflow developer survey"
  • 1:以下、名無しがお送りします

    教えてくれ

  • 8:以下、名無しがお送りします

    まずはRustをインストールするところから始めるんだよ rustupっていうツールを使うのが一般的

  • 11:以下、名無しがお送りします

    rustupでrustをインストールしたら cargo installでwasm-packをインストールする

  • 16:以下、名無しがお送りします

    >>11 wasm-packはRustのコードをWebAssemblyにコンパイルして npmパッケージにしてくれる便利ツール

  • 22:以下、名無しがお送りします

    rustの環境が整ったら cargo newでプロジェクトを作るんだよな

  • 29:以下、名無しがお送りします

    >>22 そうだね cargo new --lib プロジェクト名 でライブラリプロジェクトを作るのがポイント

  • 39:以下、名無しがお送りします

    >>29 Cargo.tomlに [lib] と crate-type = ["cdylib"] の設定を追加するのを忘れずに

  • 44:以下、名無しがお送りします

    >>39 cdylibってのがポイントだよな これでダイナミックライブラリとしてコンパイルできる

  • 53:以下、名無しがお送りします

    rustのコードはsrc/lib.rsに書くんだっけ?

  • 63:以下、名無しがお送りします

    >>53 そうだよ ここにエントリーポイントの関数を書いていくんだ

  • 70:以下、名無しがお送りします

    >>63 エントリーポイントの関数には #[no_mangle]とpub extern "C" をつけるのがポイントだね

  • 78:以下、名無しがお送りします

    >>70 そうすることでJavaScriptから呼び出せるようになるんだよな

  • 87:以下、名無しがお送りします

    コードが書けたらどうやってWebAssemblyにコンパイルするの?

  • 92:以下、名無しがお送りします

    >>87 プロジェクトのルートでwasm-pack buildを実行するだけ

  • 99:以下、名無しがお送りします

    >>92 そうすると pkg ディレクトリ以下にwasmファイルとJSラッパーが生成されるはず

  • 109:以下、名無しがお送りします

    >>99 そのJSファイルをブラウザ側のJSから読み込んで使うことになるんだよね

  • 119:以下、名無しがお送りします

    WebAssemblyって実行速度が速いんだよね?

  • 124:以下、名無しがお送りします

    >>119 そうだよ ネイティブに近い速度で動作するのが売りだね

  • 128:以下、名無しがお送りします

    >>124 JavaScriptより速いっていうのがポイントだよな

  • 129:以下、名無しがお送りします

    >>128 計算処理とかをWebAssemblyに任せると体感できるくらい速くなるよ

  • 138:以下、名無しがお送りします

    WebAssemblyにはデメリットとかないの?

  • 142:以下、名無しがお送りします

    >>138 まだ新しい技術だからブラウザのサポートとか開発ツールまわりが弱いかな

  • 149:以下、名無しがお送りします

    >>142 デバッグとかちょっとしんどいよね

  • 156:以下、名無しがお送りします

    >>149 あとはファイルサイズが大きくなりがちなのも悩みどころ

  • 157:以下、名無しがお送りします

    RustのWebAssemblyといえばyewというフレームワークもあるよね

  • 166:以下、名無しがお送りします

    >>157 yewはReactみたいなコンポーネントベースのフレームワークだよ

  • 168:以下、名無しがお送りします

    >>166 RustでフロントエンドのSPAを作るならyewが良さそう

  • 172:以下、名無しがお送りします

    >>168 yewはまだ発展途上だけど将来有望だよね

  • 174:以下、名無しがお送りします

    他にもrustのWebAssemblyフレームワークってあるの?

  • 180:以下、名無しがお送りします

    >>174 Seedとかは結構メジャーだね

  • 189:以下、名無しがお送りします

    >>180 SeedはElmみたいなアーキテクチャが特徴だよ

  • 198:以下、名無しがお送りします

    >>189 あとはPercy Smithyなんかもあるみたい

  • 208:以下、名無しがお送りします

    WebAssemblyの開発はこれからどんどん活発になりそうだね

  • 213:以下、名無しがお送りします

    >>208 そうだね Webの世界にもっとrustが浸透していくと思う

  • 223:以下、名無しがお送りします

    >>213 RustはWebAssemblyとの相性がすごくいいからね

  • 227:以下、名無しがお送りします

    >>223 低レベルの制御がしやすいのがrustの強みだよね

  • 234:以下、名無しがお送りします

    WebAssemblyに適したrustの機能ってなんだろう?

  • 237:以下、名無しがお送りします

    >>234 やっぱりゼロコスト抽象化とかメモリ安全性とかかな

  • 240:以下、名無しがお送りします

    >>237 ライフタイムとか所有権の仕組みのおかげでメモリ管理がしっかりしてるのがいいよね

  • 242:以下、名無しがお送りします

    >>240 そうそう rustならではの型システムの恩恵が受けられるよ

  • 251:以下、名無しがお送りします

    今後WebAssemblyはどういう分野で活躍しそう?

  • 253:以下、名無しがお送りします

    >>251 ゲームとか3Dグラフィックスとかの重い処理を扱う分野が伸びそうだよね

  • 256:以下、名無しがお送りします

    >>253 他にも暗号処理とか科学計算とかにも使えそう

  • 258:以下、名無しがお送りします

    >>256 IoTとかエッジコンピューティングの分野でも活躍の場がありそうだよな

コメント(2件)

  • 1

    wasm-pack便利すぎない

  • 2

    cdylibって初めて聞いたかも