[JAVA] J'ai essayé de démarrer avec Web Assembly

Soudain, j'ai décidé d'essayer WebAssembly et l'ai essayé.

Qu'est-ce que Web Assembly?

WebAssembly exécute le code à grande vitesse dans un navigateur. Le langage qui fonctionne sur la face avant du Web était le javascript. Puisque javascript est un langage typé dynamiquement et est de type interpréteur, il est intuitif et facile à décrire, mais il est lent car il est exécuté lors de l'inférence de type. C'est là qu'intervient WebAssembly, qui compile un langage typé statiquement en code intermédiaire, puis le convertit au format binaire. Je comprends que c'est une technologie qui permet une vitesse d'exécution plus rapide en réduisant la taille du fichier et en raccourcissant le traitement de l'analyse syntaxique en utilisant ce format binaire. (Comprendre après avoir étudié pendant environ 30 minutes)

Je ne l'ai pas encore lu, mais cela semble être bon pour approfondir la compréhension de l'article WebAssembly ci-dessous. https://qiita.com/ShuntaShirai/items/3ac92412720789576f22

commencer

Le système d'exploitation d'exécution était Ubuntu 18.04.4. Ubuntu 16.04 semble être le meilleur. J'ai essayé de le déplacer selon le site suivant. https://webassembly.org/getting-started/developers-guide/

Tout d'abord,

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

C'est une procédure pour installer emsdk, cloner depuis Github et installer. plus tard

source ./emsdk_env.sh --build=Release

Prêt à exécuter la commande via le chemin. À partir de là, l'essentiel est de créer une API Web en langage C. Créez un nouveau répertoire hello et créez hello.c avec le contenu suivant directement en dessous.

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

Si hello.c est créé,

emcc hello.c -o hello.html

Et compilez hello.c. Après compilation, le répertoire

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

Vous pouvez créer un fichier comme celui-ci. Il existe un fichier javascript, html et wasm au format binaire.

emrun --no_browser --port 8080 .

Lorsque vous démarrez avec et accédez à localhost: 8080

wa-demo.png

Un écran comme celui-ci sera affiché. C'est tout pour l'introduction à WebAssembly!

Question

Il y a quelque chose que je n'ai pas compris, alors je vais le garder comme un enregistrement.

  1. Dans cet exemple, je ne pense pas qu'il y avait une partie à utiliser javascript. (Bien qu'une bonne quantité de code ait été écrite dans les html et js générés), je ne comprends pas vraiment les avantages. Peut-être que j'ai besoin d'expérimenter quelque chose qui utilise plus de js.
  2. Que faites-vous lors du débogage dans un navigateur? Je me demande si ce sera en crachant des bûches. Il ne semble pas être aussi riche que js dans un environnement de débogage.
  3. Je ne comprenais pas comment associer html avec wasm.

Impressions

Il était bon de se rendre compte que l'ère du développement d'applications Web en langage C approche. Je pense que le contexte est que les applications Web s'enrichissent et que la demande d'exécution à la périphérie augmente. J'ai personnellement voulu approfondir l'utilisation à la périphérie. Soudain, j'ai commencé à écrire, mais je suis devenu encore plus intéressé. Étudions un peu plus.

référence

L'avenir sans serveur créé par WebAssembly et Rust WebAssembly

Recommended Posts

J'ai essayé de démarrer avec Web Assembly
J'ai essayé de démarrer avec Spring Data JPA
J'ai essayé de démarrer avec Swagger en utilisant Spring Boot
Les débutants de Rails ont essayé de se lancer avec RSpec
J'ai démarré MySQL 5.7 avec docker-compose et j'ai essayé de me connecter
J'ai essayé d'interagir avec Java
[Note] Comment démarrer avec Rspec
Commencez avec Gradle
J'ai essayé de vérifier AdoptOpenJDK 11 (11.0.2) avec l'image Docker
J'ai essayé de faire une authentification de base avec Java
J'ai essayé de gérer la configuration des jambes de force avec Coggle
J'ai essayé de gérer les informations de connexion avec JMX
J'ai aussi essayé Web Assembly avec Nim et C
Comment démarrer avec Eclipse Micro Profile
J'ai essayé de casser le bloc avec java (1)
J'ai essayé de démarrer avec Gradle sur Heroku
J'ai essayé ce que je voulais essayer avec Stream doucement.
J'ai essayé d'implémenter le téléchargement de fichiers avec Spring MVC
J'ai essayé DI avec Ruby
J'ai essayé de lire et de sortir CSV avec Outsystems
J'ai essayé d'implémenter TCP / IP + BIO avec JAVA
[Java 11] J'ai essayé d'exécuter Java sans compiler avec javac
Démarrez avec Spring Boot
J'ai essayé de dessiner une animation avec l'API Blazor + canvas
Présentation de «Introduction à la programmation pratique de la rouille» (jour 3)
J'ai essayé d'implémenter Sterling Sort avec Java Collector
J'ai essayé UPSERT avec PostgreSQL.
J'ai essayé BIND avec Docker
J'ai essayé de vérifier yum-cron
J'ai essayé de créer un environnement de développement java8 avec Chocolatey
J'ai essayé de moderniser une application Java EE avec OpenShift.
J'ai essayé d'augmenter la vitesse de traitement avec l'ingénierie spirituelle
[Rails] J'ai essayé de créer une mini application avec FullCalendar
J'ai essayé de lier le chat avec le serveur de Minecraft avec l'API Discord
[Rails] J'ai essayé d'implémenter le traitement par lots avec la tâche Rake
Il est maintenant temps de commencer avec l'API Stream
J'ai essayé de créer un environnement de développement padrino avec Docker
Comment démarrer avec JDBC en utilisant PostgresSQL sur MacOS
J'ai essayé de pouvoir passer plusieurs objets avec Ractor
Commençons par la programmation parallèle
J'ai essayé de mâcher C # (indexeur)
J'ai essayé l'analyse morphologique avec MeCab
J'ai essayé de résumer le support d'iOS 14
J'ai essayé la communication UDP avec Java
J'ai essayé d'expliquer la méthode
J'ai essayé GraphQL avec Spring Boot
J'ai essayé de résumer l'apprentissage Java (1)
J'ai essayé Flyway avec Spring Boot
J'ai essayé d'utiliser WebAssembly Stadio (version 2018/4/17)