[JAVA] J'ai essayé d'utiliser WebAssembly Stadio (version 2018/4/17)

Qu'est-ce que WebAssembly Studio?

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.

J'écrirai quelque chose en C pour le moment.

Pour utiliser le langage C, cliquez sur «Projet C vide» pour écrire et exécuter le code.

Le tableau ne peut pas être transmis

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.

Je souhaite utiliser malloc facilement avec WebAssembly

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);

Mais ça ne marche pas bien

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

J'ai essayé d'utiliser WebAssembly Stadio (version 2018/4/17)
J'ai essayé d'utiliser Gson
J'ai essayé d'utiliser TestNG
J'ai essayé d'utiliser Galasa
J'ai essayé d'utiliser azure cloud-init
J'ai essayé d'utiliser Java REPL
J'ai essayé d'utiliser anakia + Jing maintenant
J'ai essayé d'utiliser Spring + Mybatis + DbUnit
J'ai essayé d'utiliser JOOQ avec Gradle
J'ai essayé d'utiliser l'API Java8 Stream
J'ai essayé d'utiliser JWT en Java
[Android] J'ai essayé d'utiliser la disposition du coordinateur.
J'ai essayé d'utiliser le conteneur Pari gp
J'ai essayé d'utiliser le mémo Java LocalDate
J'ai essayé d'utiliser Google HttpClient de Java
J'ai essayé d'utiliser Realm avec Swift UI
J'ai essayé d'utiliser l'outil de diagnostic Java Arthas
J'ai essayé de démarrer avec Web Assembly
J'ai essayé d'utiliser Scalar DL avec Docker
J'ai essayé d'utiliser OnlineConverter avec SpringBoot + JODConverter
C'est nouveau, mais j'ai essayé d'utiliser Groonga
J'ai essayé d'utiliser OpenCV avec Java + Tomcat
J'ai essayé Spring.
J'ai essayé de mettre Tomcat
J'ai essayé youtubeDataApi.
J'ai essayé de refactoriser ①
J'ai essayé FizzBuzz.
J'ai essayé JHipster 5.1
J'ai essayé d'utiliser Junit avec Mac VScode Maven
[Pour les débutants] J'ai essayé d'utiliser DBUnit avec Eclipse
[Pour les débutants] J'ai essayé d'utiliser JUnit 5 avec Eclipse
[Android] J'ai quitté SQLite et essayé d'utiliser Realm
J'ai aussi essayé Web Assembly avec Nim et C
J'ai fait un blackjack avec Ruby (j'ai essayé d'utiliser minitest)
[API] J'ai essayé d'utiliser l'API de recherche par code postal
J'ai essayé d'implémenter un serveur en utilisant Netty
J'ai essayé d'utiliser le profileur d'IntelliJ IDEA
J'ai essayé d'utiliser une connexion à une base de données dans le développement Android
[J'ai essayé] Tutoriel de printemps
J'ai essayé d'utiliser la fonction Server Push de Servlet 4.0
J'ai essayé d'exécuter Autoware
J'ai essayé d'utiliser le service KMS (Key Management Service) d'Alibaba Cloud
J'ai essayé de faire fonctionner SQS en utilisant AWS Java SDK
J'ai essayé QUARKUS immédiatement
J'ai essayé d'utiliser la boîte à outils de migration pour les fichiers binaires d'application
J'ai essayé le type d'entrée / sortie de Java Lambda ~ Stream version ~
J'ai essayé d'utiliser Log4j2 sur un serveur Java EE
J'ai essayé Spring Batch
J'ai essayé d'utiliser YOLO v4 sur Ubuntu et ROS
J'ai essayé node-jt400 (Programmes)
J'ai essayé d'utiliser l'instruction Extended for en Java
J'ai essayé node-jt400 (exécuter)
J'ai essayé de gratter un graphique boursier en utilisant Java (Jsoup)
J'ai essayé node-jt400 (Transactions)
J'ai essayé un test unitaire de l'application Rails en utilisant RSpec et FactoryBot
J'ai essayé d'utiliser le référentiel GitHub comme serveur de bibliothèque
[Rails] J'ai essayé d'utiliser la méthode button_to pour la première fois