WebAssembly: significato, vantaggi, casi d'uso e altro

Pubblicato: 2022-10-12

WebAssembly o Wasm è un formato di codice binario per la creazione di programmi che possono essere eseguiti su qualsiasi architettura di computer.

Il sistema comprende una macchina virtuale e un compilatore che traduce il codice del computer dai linguaggi di programmazione, come C o C++, nei formati leggibili dall'uomo .wat e binari .wasm.

L'obiettivo originale di WebAssembly era consentire ai programmatori di sviluppare applicazioni ad alte prestazioni per le pagine Web consentendo velocità di esecuzione quasi native all'interno di un browser. Ma la tecnologia ora sembra evolversi oltre i browser e nel cloud.

Questa guida ti mostra tutto ciò che devi sapere su questa tecnologia in evoluzione, i suoi punti di forza e di debolezza, nonché il suo potenziale futuro.

Sommario

Che cos'è WebAssembly?

WebAssembly è un formato di codice binario che viene eseguito su una macchina virtuale e in cui possono essere compilati linguaggi diversi. È progettato per essere portatile e può essere eseguito su un browser Web o come applicazione server.

Rilasciato per la prima volta nel 2017, WebAssembly è una raccomandazione del W3C dal 2019 ed è gestito da numerosi collaboratori, tra cui Mozilla, Google, Microsoft, Red Hat e molti altri.

L'obiettivo originale era quello di sviluppare velocità di esecuzione quasi native come si trovano con le applicazioni C/C++ all'interno del browser. È anche pensato per essere uno standard Web sicuro, open-standard, di cui è possibile eseguire il debug e senza versione, compatibile con le versioni precedenti e conforme a JavaScript.

Come funziona WebAssembly?

WebAssembly è progettato come un motore di runtime, come Java o JavaScript, che può essere incorporato in un browser o in un ambiente server per eseguire il codice del computer compilato nei formati di testo binario .wasm o .wat.

Per scrivere il codice per l'esecuzione di WebAssembly, lo sviluppatore scrive il programma in uno dei numerosi linguaggi supportati. Quindi compilalo utilizzando un compilatore WebAssembly AOT (Ahead of Time) o JIT (just in time).

Questo codice può svolgere la maggior parte del lavoro nell'ambiente di esecuzione, ma non può accedere o modificare gli oggetti DOM di un browser. Qualsiasi interazione di questo tipo deve passare attraverso JavaScript.

Come creare un'applicazione WebAssembly di esempio

La creazione di una semplice applicazione Wasm per il browser web è possibile con pochi passaggi come puoi vedere di seguito:

  1. Scarica e installa Emscripten SDK.
  2. Scrivi il tuo codice di esempio helloworld.c o fallo in C++/Rust se preferisci.
  3. Esegui emcc helloworld.c -s WASM=1 -s helloworld.html in un terminale per compilare il codice in WebAssembly con Emscripten. Creerà i file binari, HTML e JavaScript di Wasm di cui hai bisogno (codice di colla).
  4. Servi la pagina helloworld.html tramite il tuo browser web.

I vantaggi di WebAssembly

Ci sono molte ragioni per adottare WebAssembly e le relative tecnologie, tra cui:

  • Prestazioni quasi native : WebAssembly ha un design di livello così basso da offrire prestazioni simili a linguaggi di basso livello come C e C++.
  • Sicurezza : il sistema è progettato per essere protetto isolandolo in un ambiente virtuale con accesso limitato al sistema.
  • Open Standard – Molte organizzazioni e individui stanno contribuendo a WebAssembly ed è una raccomandazione ufficiale del W3C.
  • Leggero : WebAssembly viene compilato in codice binario da eseguire in una macchina virtuale. Questo codice è portatile e non necessita o viene fornito con file di sistema.
  • Supporto multilingue : oltre 50 lingue possono essere compilate in WebAssembly.
  • Indipendente dalla piattaforma : la macchina virtuale WebAssembly è progettata per ogni architettura per presentare lo stesso ambiente di runtime. Tutto ciò che uno sviluppatore deve fare è scrivere codice per WebAssembly.

I limiti di WebAssembly

  • Lavori in corso : lo standard è ancora in fase di sviluppo e quindi molte funzionalità e miglioramenti devono ancora arrivare.
  • Nessuna raccolta dei rifiuti : in WebAssembly manca ancora la raccolta dei rifiuti, anche se potrebbe presto essere implementata.
  • Nessun accesso DOM : non è possibile accedere al DOM di un browser Web direttamente da WebAssembly, sarà necessario passare tramite JavaScript.

WebAssembly vs Java

Java è una sorta di prima implementazione di WebAssembly. È stato progettato come un linguaggio da scrivere una sola volta, eseguibile ovunque, ma ha sviluppato molti problemi lungo il percorso.

Proprio come con Java, WebAssembly utilizza un RE (Runtime Environment) per eseguire il suo codice, ma a differenza di Java, puoi scrivere WebAssembly nella tua lingua preferita.

WebAssembly vs JavaScript

WebAssembly viene eseguito nel browser o in un altro ambiente host, proprio come JavaScript. Tuttavia, laddove JavaScript viene consegnato all'ambiente di esecuzione in formato testo e viene compilato appena in tempo, WebAssembly ha sia il formato testo che quello binario.

All'interno dei browser Web, JavaScript ha accesso al DOM, mentre WebAssembly no. Tuttavia, quando si tratta di velocità di esecuzione, WebAssembly batte JavaScript, con le sue velocità di esecuzione del codice quasi native.

La velocità è dove WebAssembly brilla e il motivo per cui è l'ideale per così tanti usi. Puoi caricare WebAssembly in un browser utilizzando JavaScript e i due codici possono essere eseguiti insieme e condividere risorse.

WebAssembly vs Docker vs Kubernetes

Docker e Kubernetes sono due delle tecnologie popolari che alimentano il cloud computing. Docker è una tecnologia container che consente agli sviluppatori di impacchettare un'applicazione con tutte le sue dipendenze di sistema in un unico pacchetto. Ciò semplifica la distribuzione dell'applicazione in qualsiasi ambiente cloud in un secondo o meno.

Kubernetes, d'altra parte, è un sistema open source per gestire e distribuire applicazioni containerizzate come Docker, CRI-O, containerd e qualsiasi implementazione Kubernetes CRI (Container Runtime Interface). Kubernetes semplifica inoltre la scalabilità delle distribuzioni cloud su più server o macchine virtuali.

Da questo punto di vista, WebAssembly è più simile a Docker e può essere eseguito come applicazione cloud containerizzata utilizzando Kubernetes. Offre anche molti vantaggi rispetto a Docker, ma probabilmente non lo sostituirà.

Oltre il browser

All'inizio c'erano i server web. Dovevi dedicare una macchina completa come server. Poi c'erano macchine virtuali, o VM, che consentivano a un server di funzionare solo su uno o più thread della CPU. Tuttavia, dovevi avere una VM dedicata.

Il cloud computing ha consentito di avviare ed eseguire server solo quando necessario, containerizzando le applicazioni. Ciò ha comportato una riduzione dei costi, poiché si doveva pagare solo per ciò che si utilizza, non più macchine dedicate. Ma ci sono ancora alcuni problemi.

Innanzitutto, i file Docker possono essere grandi diversi Gigabyte e ciò significa un piccolo ritardo nell'avvio e altri problemi di gestione. Un file Wasm simile, tuttavia, può essere grande solo pochi MB perché è un binario precompilato. Ciò gli conferisce un tempo di avvio molto più rapido rispetto a Docker, perfetto per alcune applicazioni critiche in termini di tempo.

In secondo luogo, il design di WebAssembly significa che lo sviluppatore non deve gestire e assegnare risorse di sistema, può semplicemente arrivare al punto usando il suo linguaggio di programmazione preferito.

Queste funzionalità rendono WebAssembly ideale per l'esecuzione di microservizi cloud, sebbene le applicazioni Docker siano ancora preferibili per le applicazioni che richiedono un maggiore controllo sull'ambiente operativo e sul file system.

Per ulteriori informazioni, progetti come WasmCloud e WasmEdge stanno sviluppando WebAssembly in una piattaforma informatica praticabile.

Casi d'uso Wasm

Esistono molti casi d'uso per WebAssembly, data la sua natura peculiare. Possono essere divisi in tre gruppi principali; configurazioni interne al browser, esterne al browser e ibride.

Il tipo all'interno del browser è autoesplicativo e l'esterno al browser si riferisce principalmente a distribuzioni di server, IoT e cloud, mentre l'ibrido si riferisce a un mix dei due.

Di seguito è riportato uno sguardo ai casi d'uso in cui Wasm può eccellere:

  • Codice già esistente ad alte prestazioni: codice vecchio ma meraviglioso che puoi semplicemente trasferire su WebAssembly.
  • Nuovo codice ad alte prestazioni : quelli che devi progettare e implementare da zero.
  • Porting di applicazioni desktop sul Web : ciò potrebbe aprire una nuova generazione di soluzioni desktop basate sul Web, come l'editing video basato sul Web.
  • Cloud computing : in esecuzione insieme a Docker e Kubernetes per nuove opportunità.

Di seguito è riportato uno sguardo ad applicazioni e scenari specifici in cui Wasm può eccellere:

  • Modifica video e immagini
  • Progettazione del gioco
  • Applicazioni di intelligenza artificiale
  • Applicazioni di realtà virtuale e aumentata
  • Applicazioni musicali
  • Applicazioni P2P
  • Applicazioni lato server
  • Calcoli cloud/cluster
  • Progettazione assistita da computer
  • Simulazione della piattaforma del sistema operativo
  • Crittografia
  • Server web locale
  • Applicazioni desktop remote
  • Visualizzazioni scientifiche
  • App native ibride su smartphone
  • Su dispositivi IoT

Elenco delle lingue e dei framework supportati

Oltre 50 lingue vengono compilate in WebAssembly e qui ci sono alcune delle più popolari:

  • C
  • C++
  • R
  • Rubino
  • Veloce
  • andare
  • Kotlin
  • Ruggine
  • PHP
  • Blazer: un framework per sviluppatori .NET.
  • JwebAssembly – Compilatore per bytecode Java e linguaggi correlati come JRuby, Jython, Groovy, Scala e Kotlin.
  • Yew: un framework Rust per la creazione di app Web multi-thread utilizzando WebAssembly.
  • AssemblyScript – Un linguaggio progettato specificamente per creare codice WebAssembly.
  • Grain – Un linguaggio funzionale fortemente tipizzato.
  • Motoco

Puoi trovare più lingue qui.

Elenco di runtime e strumenti WebAssembly

  • Tutti i principali browser hanno il supporto Wasm
  • Pyodide – Runtime Python sul browser con lo stack scientifico Python, inclusi Pandas, NumPy, SciPy.
  • caldo
  • wagi – Per microservizi e app Web
  • Wasi – Interfaccia di sistema modulare
  • WasmTime – Runtime WebAssembly veloce e sicuro.
  • Wasmer
  • Lucetto
  • wasmCloud – Ambiente cloud
  • Krustlet - Kubernetes kublete per l'esecuzione di Wasm, scritto in Rust.
  • WasmEdge – Ambiente di runtime cloud ed edge

Conclusione

Siamo giunti alla fine del nostro viaggio in WebAssembly e cosa contiene per l'informatica. E come puoi vedere, mantiene molte promesse.

È ancora un lavoro in corso, ma in costante sviluppo. E se sei interessato, puoi trovare maggiori informazioni qui, qui e qui.