Environnement de développement en ligne de WebAssembly (https://webassembly.studio/) fourni par Mozilla publié le 11 avril 2018. Voir d'autres sites pour WebAssembly.
Pour utiliser le langage C, cliquez sur «Projet C vide» pour écrire et exécuter le code.
Même si j'essaye de dessiner une image, le transfert du tableau ne fonctionne pas. Il semble que seuls les types numériques peuvent être passés entre WebAssembly et JavaScript. Vous pouvez passer des pointeurs, mais cela ne semble pas fonctionner. Quand je lis les explications d'autres sites, cela dit qu'en est-il de la mémoire linéaire, mais il y a peu de sites qui l'expliquent correctement.
En bref, il y a une mémoire partagée par WebAssembly et JavaScript, et les données y sont placées et échangées.
Cependant, de nombreuses fonctions C ne fonctionnent pas correctement dans WebAssembly ordinaire. Les fonctions qui utilisent des appels système tels que printf et malloc ne semblent pas fonctionner correctement.
Quand j'essaye de google avec WebAssembly malloc, cela dit que je veux lier une énorme bibliothèque, mais ce n'est pas un environnement de développement comme celui-là et c'est gênant, donc je vais chercher une autre méthode.
Le projet de "Hello World in C" est détourné.
Dans ce modèle, l'appel système mMap2 requis lors de l'utilisation de malloc est implémenté en JavaScript. C'est facile si vous l'utilisez tel quel et que la taille est petite.
Vous pouvez remettre la structure, mais il semble difficile de regarder à l'intérieur (je l'écrirai quand je saurai remettre le type de structure)
Ensuite, une fois que vous implémentez un tel code du côté de WebAssembly, vous pouvez faire ce que vous voulez. (WASM_EXPORT est une macro qui est automatiquement définie dans WebAssembly Studio. Elle ne peut être appelée à partir de JavaScript que si elle est placée avant la fonction.)
#include<stdlib.h>
WASM_EXPORT
void * wballoc (int bytes) {
void * p=malloc(bytes);
return p;
}
WASM_EXPORT
void wbfree(void *pointer) {
free(pointer);
}
Du côté JavaScript, appelez-le comme suit.
var size =10000;
var p = instance.exports.wballoc(size);
/*
(Ce qui suit est omis)
*/
instance.exports.wbfree(p);
La version actuelle (β au 17 avril 2018) de WebAssembly Studio vérifie les erreurs WebAssenbly, mais ne connaît pas les erreurs JavaScript. Si cela ne fonctionne pas, il y a de nombreuses erreurs dans JavaScript, il semble donc plus rapide de regarder le débogueur du navigateur. Vous pouvez également voir le comportement de WebAssembly dans le débogueur FireFox.
Plutôt que de remplacer JavaScript par WebAssembly, il semble qu'il existe de nombreuses utilisations dans le mécanisme d'implémentation d'une bibliothèque haute vitesse pour JavaScript.
Recommended Posts