[JAVA] Ich habe versucht, mit Web Assembly zu beginnen

Plötzlich entschied ich mich für WebAssembly und versuchte es.

Was ist Web Assembly?

WebAssembly führt Code in einem Browser mit hoher Geschwindigkeit aus. Die Sprache, die auf der Vorderseite des Webs funktioniert, war Javascript. Da Javascript eine dynamisch typisierte Sprache und ein Interpretertyp ist, ist es intuitiv und einfach zu beschreiben, aber es ist langsam, da es während der Typinferenz ausgeführt wird. Hier kommt WebAssembly ins Spiel, das eine statisch typisierte Sprache in Zwischencode kompiliert und dann in ein Binärformat konvertiert. Ich verstehe, dass dieses Binärformat eine Technologie ist, die eine schnellere Ausführungsgeschwindigkeit realisiert, indem sie die Dateigröße reduziert und die Verarbeitung der Syntaxanalyse verkürzt. (Verständnis nach ca. 30 Minuten Lernen)

Ich habe es noch nicht gelesen, aber es scheint gut zu sein, um das Verständnis des folgenden Artikels WebAssembly zu vertiefen. https://qiita.com/ShuntaShirai/items/3ac92412720789576f22

beginnen

Das Ausführungsbetriebssystem war Ubuntu 18.04.4. Ubuntu 16.04 scheint das Beste zu sein. Ich habe versucht, es gemäß der folgenden Site zu verschieben. https://webassembly.org/getting-started/developers-guide/

Als allererstes,

git clone https://github.com/emscripten-core/emsdk.git
cd emsdk
./emsdk install latest
./emsdk activate latest

Es ist eine Prozedur, um emsdk zu installieren, von Github zu klonen und zu installieren. später

source ./emsdk_env.sh --build=Release

Bereit, den Befehl über den Pfad auszuführen. Von hier aus besteht die Hauptaufgabe darin, eine Web-API in der Sprache C zu erstellen. Erstellen Sie ein neues "Hallo" -Verzeichnis und erstellen Sie "Hallo" mit den folgenden Inhalten direkt darunter.

#include <stdio.h>
int main(int argc, char ** argv) {
  printf("Hello, world!\n");
}

Wenn hello.c erstellt wird,

emcc hello.c -o hello.html

Und kompiliere hallo.c. Nach dem Kompilieren das Verzeichnis

ll
total 256
drwxr-xr-x 2 kerneltyu kerneltyu 4096 10. Mai 02:37 ./
drwxr-xr-x 3 kerneltyu kerneltyu 4096 10. Mai 02:35 ../
-rw-r--r--1 kerneltyu kerneltyu 84 10. Mai 02:37 hello.c
-rw-r--r--1 kerneltyu kerneltyu 102675 10. Mai 02:37 hello.html
-rw-r--r--1 kerneltyu kerneltyu 115460 10. Mai 02:37 hello.js
-rw-r--r--1 kerneltyu kerneltyu 21716 10. Mai 02:37 hello.wasm

Sie können eine solche Datei erstellen. Es gibt eine Javascript-Datei, HTML und Wasm im Binärformat.

emrun --no_browser --port 8080 .

Wenn Sie mit localhost: 8080 starten und darauf zugreifen

wa-demo.png

Ein solcher Bildschirm wird angezeigt. Das ist alles für die Einführung in WebAssembly!

Frage

Es gab etwas, das ich nicht verstanden habe, also werde ich es als Aufzeichnung aufbewahren.

  1. In diesem Beispiel glaube ich nicht, dass es einen Teil für die Verwendung von Javascript gab. (Obwohl eine ganze Menge Code in das generierte HTML und JS geschrieben wurde) Ich verstehe die Vorteile nicht wirklich. Vielleicht muss ich mit etwas experimentieren, das mehr js verwendet.
  2. Was machen Sie beim Debuggen in einem Browser? Ich frage mich, ob es beim Ausspucken von Protokollen sein wird. Es scheint nicht so reichhaltig zu sein wie js in einer Debug-Umgebung.
  3. Ich habe nicht verstanden, wie man HTML mit Wasm assoziiert.

Impressionen

Es war gut zu erkennen, dass sich die Ära der Entwicklung von Webanwendungen in C-Sprache nähert. Ich bin der Meinung, dass der Hintergrund darin besteht, dass Webanwendungen immer umfangreicher werden und die Nachfrage nach Ausführung am Rande steigt. Ich persönlich wollte den Einsatz am Rande vertiefen. Plötzlich fing ich an zu schreiben, aber ich wurde noch interessierter. Lass uns ein bisschen mehr lernen.

Referenz

Serverlose Zukunft, erstellt von WebAssembly und Rust WebAssembly

Recommended Posts

Ich habe versucht, mit Web Assembly zu beginnen
Ich habe versucht, mit Spring Data JPA zu beginnen
Ich habe versucht, mit Swagger mit Spring Boot zu beginnen
Rails-Anfänger haben versucht, mit RSpec zu beginnen
Ich habe MySQL 5.7 mit Docker-Compose gestartet und versucht, eine Verbindung herzustellen
Ich habe versucht, mit Java zu interagieren
[Hinweis] Erste Schritte mit Rspec
Beginnen Sie mit Gradle
Ich habe versucht, AdoptOpenJDK 11 (11.0.2) mit dem Docker-Image zu überprüfen
Ich habe versucht, eine Standardauthentifizierung mit Java durchzuführen
Ich habe versucht, die Federbeinkonfiguration mit Coggle zu verwalten
Ich habe versucht, Anmeldeinformationen mit JMX zu verwalten
Ich habe auch Web Assembly mit Nim und C ausprobiert
Erste Schritte mit Eclipse Micro Profile
Ich habe versucht, den Block mit Java zu brechen (1)
Ich habe versucht, mit Gradle auf Heroku zu beginnen
Ich habe versucht, was ich mit Stream leise versuchen wollte.
Ich habe versucht, das Hochladen von Dateien mit Spring MVC zu implementieren
Ich habe DI mit Ruby versucht
Ich habe versucht, CSV mit Outsystems zu lesen und auszugeben
Ich habe versucht, TCP / IP + BIO mit JAVA zu implementieren
[Java 11] Ich habe versucht, Java auszuführen, ohne mit Javac zu kompilieren
Beginnen Sie mit Spring Boot
Ich habe versucht, Animationen mit der Blazor + Canvas-API zu zeichnen
Einführung in "Einführung in die praktische Rostprogrammierung" (Tag 3)
Ich habe versucht, Sterling Sort mit Java Collector zu implementieren
Ich habe UPSERT mit PostgreSQL ausprobiert.
Ich habe BIND mit Docker ausprobiert
Ich habe versucht, yum-cron zu verifizieren
Ich habe versucht, mit Chocolatey eine Java8-Entwicklungsumgebung zu erstellen
Ich habe versucht, eine Java EE-Anwendung mit OpenShift zu modernisieren.
Ich habe versucht, die Verarbeitungsgeschwindigkeit mit spiritueller Technik zu erhöhen
[Rails] Ich habe versucht, eine Mini-App mit FullCalendar zu erstellen
Ich habe versucht, den Chat mit dem Minecraft-Server mit der Discord-API zu verknüpfen
[Rails] Ich habe versucht, die Stapelverarbeitung mit der Rake-Task zu implementieren
Jetzt ist es an der Zeit, mit der Stream-API zu beginnen
Ich habe versucht, mit Docker eine Padrino-Entwicklungsumgebung zu erstellen
Erste Schritte mit JDBC mit PostgresSQL unter MacOS
Ich habe versucht, mit Ractor mehrere Objekte übergeben zu können
Beginnen wir mit der parallelen Programmierung
Ich habe versucht, C # (Indexer) zu kauen.
Ich habe eine morphologische Analyse mit MeCab versucht
Ich habe versucht, die Unterstützung für iOS 14 zusammenzufassen
Ich habe versucht, UDP mit Java zu kommunizieren
Ich habe versucht, die Methode zu erklären
Ich habe GraphQL mit Spring Boot ausprobiert
Ich habe versucht, das Java-Lernen zusammenzufassen (1)
Ich habe Flyway mit Spring Boot ausprobiert
Ich habe versucht, WebAssembly Stadio (Version 2018/4/17) zu verwenden.