Design: Comment webassembly gère-t-il la structure ?

Créé le 26 juin 2017  ·  8Commentaires  ·  Source: WebAssembly/design

J'essaie de lire le document Webassembly et ne le vois que mentionner le type support uniquement i32,i64,f32,f64

Mais je ne trouve aucun endroit mentionner un type composite tel que struct

Ce n'est pas possible nativement en webassembly ? Comment contourner le compilateur C pour la structure supérieure à 64 bits ? Comment puis-je emballer 2 floats et 2 ints ensemble dans la pile ?

Commentaire le plus utile

Les valeurs de retour multiples sont définitivement encore sur le radar, et j'ai l'intention de
rédiger une proposition très bientôt. Cela dit, ils ne vous donnent pas de structs
directement, vous devrez toujours les diviser en valeurs individuelles pour
tout le reste sauf les appels de fonction.

Tous les 8 commentaires

937 aurait fourni une solution simple pour cela mais est actuellement fermé et je ne sais pas si quelqu'un dans l'équipe WebAssembly y pense encore.

Pour les compositions jusqu'à 8 octets, vous pouvez les compresser dans un entier de 64 bits.

Pour les structures plus grandes, vous devrez les transférer via une mémoire linéaire ou un ensemble de variables globales mutables.

Les valeurs de retour multiples sont définitivement encore sur le radar, et j'ai l'intention de
rédiger une proposition très bientôt. Cela dit, ils ne vous donnent pas de structs
directement, vous devrez toujours les diviser en valeurs individuelles pour
tout le reste sauf les appels de fonction.

@rossberg-chromium Merci beaucoup. Je pense que si cela ne limite pas la taille et l'ordre de ces valeurs renvoyées, nous pourrions contourner le problème avec une fausse structure par le langage compilé. ça devrait suffire

En attendant, les structures pourraient être implémentées à l'aide de pointeurs, n'est-ce pas ?

Allouez simplement votre structure en mémoire linéaire et travaillez avec des pointeurs.

@nidin Merci. Est-ce que c'est la façon dont la structure C compilée sur wasm le faisait normalement?

@rossberg une mise à jour sur le support de la structure ?

@krisnye , il n'y a pas de plans pour la prise en charge de "struct" pour les programmes wasm qui utilisent la mémoire linéaire ; le compilateur est censé réduire les structs et les opérations de struct aux opérations primitives. Il existe des plans pour les types de structure dans le contexte de la proposition de prise en charge du GC, n'utilisant pas de mémoire linéaire, voir par exemple https://github.com/WebAssembly/gc. Il existe une prise en charge hautement expérimentale d'au moins un sous-ensemble de celle-ci dans Firefox Nightly, voir https://github.com/lars-t-hansen/moz-gc-experiments.

Cette page vous a été utile?
0 / 5 - 0 notes

Questions connexes

spidoche picture spidoche  ·  4Commentaires

badumt55 picture badumt55  ·  8Commentaires

beriberikix picture beriberikix  ·  7Commentaires

artem-v-shamsutdinov picture artem-v-shamsutdinov  ·  6Commentaires

Artur-A picture Artur-A  ·  3Commentaires