[JAVA] Ich habe versucht, WebAssembly Stadio (Version 2018/4/17) zu verwenden.

Was ist WebAssembly Studio?

Die von Mozilla am 11. April 2018 veröffentlichte Online-Entwicklungsumgebung von WebAssembly (https://webassembly.studio/) wurde veröffentlicht. Weitere Informationen zu WebAssembly finden Sie auf anderen Websites.

Ich werde vorerst etwas in C schreiben.

Um die C-Sprache zu verwenden, klicken Sie auf "C-Projekt leeren", um den Code zu schreiben und auszuführen.

Ich kann das Array nicht übergeben

Selbst wenn ich versuche, ein Bild zu zeichnen, funktioniert die Übertragung des Arrays nicht. Es scheint, dass nur numerische Typen zwischen WebAssembly und JavaScript übergeben werden können. Sie können Zeiger übergeben, aber es scheint nicht zu funktionieren. Wenn ich die Erklärungen anderer Sites lese, heißt es, was ist mit dem linearen Speicher, aber es gibt nur wenige Sites, die es richtig erklären.

Kurz gesagt, es gibt einen Speicher, der von WebAssembly und JavaScript gemeinsam genutzt wird, und Daten werden dort abgelegt und ausgetauscht.

Viele C-Funktionen funktionieren jedoch in einer einfachen WebAssembly nicht ordnungsgemäß. Funktionen, die Systemaufrufe wie printf und malloc verwenden, scheinen nicht richtig zu funktionieren.

Wenn ich versuche, mit WebAssembly malloc zu googeln, heißt es, dass ich eine riesige Bibliothek verknüpfen möchte, aber es ist keine solche Entwicklungsumgebung und es ist problematisch, daher werde ich nach einer anderen Methode suchen.

Ich möchte malloc einfach mit WebAssembly verwenden

Das Projekt von "Hello World in C" wird umgeleitet.

In dieser Vorlage ist der bei Verwendung von malloc erforderliche Systemaufruf mMap2 in JavaScript implementiert. Es ist einfach, wenn Sie es so verwenden, wie es ist, und die Größe ist klein.

Sie können die Struktur übergeben, aber es scheint schwierig zu sein, nach innen zu schauen (ich werde es schreiben, wenn ich weiß, wie man die Art der Struktur übergibt).

Sobald Sie diesen Code auf der WebAssembly-Seite implementiert haben, können Sie tun, was Sie wollen. (WASM_EXPORT ist ein Makro, das in WebAssembly Studio automatisch definiert wird. Es kann nur über JavaScript aufgerufen werden, wenn es vor der Funktion steht.)

#include<stdlib.h>

WASM_EXPORT
void * wballoc (int bytes) {
  void * p=malloc(bytes);
  return p;
}

WASM_EXPORT
void wbfree(void *pointer) {
  free(pointer);
}

Rufen Sie es von der JavaScript-Seite wie folgt auf.

 var size =10000;
 var p = instance.exports.wballoc(size);
/*
 (Folgendes wird weggelassen)
*/
 instance.exports.wbfree(p);

Aber es funktioniert nicht gut

Die aktuelle Version (β vom 17. April 2018) von WebAssembly Studio sucht nach WebAssenbly-Fehlern, kennt jedoch keine JavaScript-Fehler. Wenn es nicht funktioniert, gibt es viele Fehler in JavaScript, so dass es schneller erscheint, den Debugger des Browsers zu betrachten. Sie können das Verhalten von WebAssembly auch im FireFox-Debugger anzeigen.

Anstatt JavaScript durch WebAssembly zu ersetzen, scheint der Mechanismus für die Implementierung einer Hochgeschwindigkeitsbibliothek für JavaScript viele Verwendungszwecke zu haben.

Recommended Posts

Ich habe versucht, WebAssembly Stadio (Version 2018/4/17) zu verwenden.
Ich habe versucht, Gson zu benutzen
Ich habe versucht, TestNG zu verwenden
Ich habe versucht, Galasa zu benutzen
Ich habe versucht, Azure Cloud-Init zu verwenden
Ich habe versucht, Java REPL zu verwenden
Ich habe jetzt versucht, Anakia + Jing zu verwenden
Ich habe versucht, Spring + Mybatis + DbUnit zu verwenden
Ich habe versucht, JOOQ mit Gradle zu verwenden
Ich habe versucht, die Java8 Stream API zu verwenden
Ich habe versucht, JWT in Java zu verwenden
[Android] Ich habe versucht, das Koordinatorlayout zu verwenden.
Ich habe versucht, Pari GP Container zu verwenden
Ich habe versucht, Java Memo LocalDate zu verwenden
Ich habe versucht, Google HttpClient von Java zu verwenden
Ich habe versucht, Realm mit Swift UI zu verwenden
Ich habe versucht, das Java-Diagnosetool Arthas zu verwenden
Ich habe versucht, mit Web Assembly zu beginnen
Ich habe versucht, Scalar DL mit Docker zu verwenden
Ich habe versucht, OnlineConverter mit SpringBoot + JODConverter zu verwenden
Es ist neu, aber ich habe versucht, Groonga zu verwenden
Ich habe versucht, OpenCV mit Java + Tomcat zu verwenden
Ich habe es mit Spring versucht.
Ich habe versucht, Tomcat zu setzen
Ich habe youtubeDataApi ausprobiert.
Ich habe versucht, ① umzugestalten
Ich habe FizzBuzz ausprobiert.
Ich habe JHipster 5.1 ausprobiert
Ich habe versucht, Junit mit Mac VScode Maven zu verwenden
[Für Anfänger] Ich habe versucht, DBUnit mit Eclipse zu verwenden
[Für Anfänger] Ich habe versucht, JUnit 5 mit Eclipse zu verwenden
[Android] Ich habe SQLite beendet und versucht, Realm zu verwenden
Ich habe auch Web Assembly mit Nim und C ausprobiert
Ich habe mit Ruby einen Blackjack gemacht (ich habe versucht, Minitest zu verwenden)
[API] Ich habe versucht, die Postleitzahlensuch-API zu verwenden
Ich habe versucht, einen Server mit Netty zu implementieren
Ich habe versucht, den Profiler von IntelliJ IDEA zu verwenden
Ich habe versucht, eine Datenbankverbindung in der Android-Entwicklung zu verwenden
[Ich habe es versucht] Spring Tutorial
Ich habe versucht, die Server-Push-Funktion von Servlet 4.0 zu verwenden
Ich habe versucht, Autoware auszuführen
Ich habe versucht, den KMS-Dienst (Key Management Service) von Alibaba Cloud zu verwenden
Ich habe versucht, SQS mit AWS Java SDK zu betreiben
Ich habe sofort QUARKUS ausprobiert
Ich habe versucht, das Migration Toolkit für Anwendungsbinärdateien zu verwenden
Ich habe den Eingabe- / Ausgabetyp von Java Lambda ~ Stream Version ~ ausprobiert
Ich habe versucht, Log4j2 auf einem Java EE-Server zu verwenden
Ich habe Spring Batch ausprobiert
Ich habe versucht, YOLO v4 unter Ubuntu und ROS zu verwenden
Ich habe versucht, node-jt400 (Programme)
Ich habe versucht, die erweiterte for-Anweisung in Java zu verwenden
Ich habe versucht, node-jt400 (ausführen)
Ich habe versucht, ein Aktienchart mit Java (Jsoup) zu kratzen.
Ich habe versucht, node-jt400 (Transaktionen)
Ich habe einen Unit-Test der Rails-Anwendung mit RSpec und FactoryBot versucht
Ich habe versucht, das GitHub-Repository als Bibliotheksserver zu verwenden
[Rails] Ich habe zum ersten Mal versucht, die button_to-Methode zu verwenden