Rust et webassembly, comment créer et compiler du code rust pour wasm?

Emscripten ou autre chose pour du wasm?

L’auteur de ce sujet a trouvé une solution à son problème.
Auteur du sujet

Voilà je fait un peu de rust et j’aimerais créer l’adaptation d’un jeu en basic casio vers une page web en utilisant rust comme langage client, la solution est donc le webassembly.
Or je ne sais pas comment faire ça… j’ai installé Emscripten, les bonnes target avec rustup mais… quand je fait un simple hello world, mais finalement j’ai des erreur dans la console web.

Mon code rust

fn main() {
  print!("Hello world!")
}

Vraiment très simple…

+0 -0
Auteur du sujet

Je vais regarder ça, merci!
Mais si des personnes peuvent m’aider à comprendre mon erreur, car là j’avoue ne pas très bien comprendre, en c un simple print peut faire le hello world mais pas en rust?

+0 -0

Cette réponse a aidé l’auteur du sujet

Il y a plusieurs choses, déjà pour "exporter" une structure ou autre vers wasm il suffit généralement (et il est nécessaire) d’ajouter un #[wasm-bindgen] au dessus de la signature. Je t’invite à lire l’article de @Songbird
Ensuite il me semble que tout ce qui touche aux entrées-sorties n’est pas utilisable tel quel avec wasm.

Édité par anonyme

+0 -0
Auteur du sujet

Je suit le tuto mais… j’ai des erreurs, j’ai pourtant bein mit tout à jour mais apparemment c’est pas bon…

error: failed to extract wasm-bindgen custom sections
    caused by: 

it looks like the Rust project used to create this wasm file was linked against
a different version of wasm-bindgen than this binary:

  rust wasm file: 0.2.13
     this binary: 0.2.17

Currently the bindgen format is unstable enough that these two version must
exactly match, so it's required that these two version are kept in sync by
either updating the wasm-bindgen dependency or this binary. You should be able
to update the wasm-bindgen dependency with:

    cargo update -p wasm-bindgen

or you can update the binary with

    cargo install -f wasm-bindgen-cli

if this warning fails to go away though and you're not sure what to do feel free
to open an issue at https://github.com/rustwasm/wasm-bindgen/issues!

Je vais essayer en modifiant le Cargo.toml mais je sais pas ce que ça va donner

EDIT: Après modification pour changer la version de wasm-bindgen dans le fichier Cargo.toml il compile sans problèmes

Édité par Eragon

+0 -0

J’en profite pour savoir question un peu bête m’enfin ^^

Si un langage a un GC et compile vers WASM ( C#, Go ) donne également son GC au fichier WASM ? ( ça me semble un peu bête puisque on parle d’assembly ^^ )

Si cela n’est pas le cas, quel serait l’avantage de faire du WASM depuis un langage comme C++ / Rust ?

+0 -0

WASM fourni une zone mémoire linéaire et n’est (à la base) pas fait pour fonctionner avec un GC (https://hacks.mozilla.org/2018/01/oxidizing-source-maps-with-rust-and-webassembly/), après je n’ai aucune idée de comment les langages à GC le gèrent mais je sais qu’il y a au moins un POC avec Mono pour le .Net qu’un collègue avait trouvé.
Pour l’avantage je pense (sans argument) que ça se réduit à l’avantage d’utiliser Rust plutôt que C#, si on fait abstraction du support et tout l’écosystème autour de wasm qui se construit autour de Rust et C++(et donc tout le côté optimisation du code généré).

+0 -0

Si cela n’est pas le cas, quel serait l’avantage de faire du WASM depuis un langage comme C++ / Rust ?

Bien que cela mènera à compiler vers wasm, chaque implémentation sera différente. Par exemple, les mécanismes instaurés par Rust devront être implémentés dans sa version "wasm", contrairement à C++ qui n’impose rien de spécial par défaut.

L’intérêt résidera dans cette subtilité, j’imagine.

En dehors de ça, Rust comme C++ (et d’autres) restent, pour ce qu’ils sont et pour leur puissance, un intérêt pour les développeurs qui souhaitent travailler avec. ;)

EDIT: Après modification pour changer la version de wasm-bindgen dans le fichier Cargo.toml il compile sans problèmes

Prête bien attention aux messages renvoyés par le compilateur, la solution était dedans. Sinon, la compilation vers wasm étant encore très alpha, si tu souhaites avoir plus d’infos à propos des erreurs un peu "bizarres" dans ce style, je te conseille de poster également ton problème sur le Discord (non-officiel) de Rust.

Ca te permettra d’avoir ta réponse mais également d’apporter la solution sur les forums de ZdS. ;)

Édité par Songbird

The most inflated egos are often the most fragile.

+0 -0
Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte