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

Preso dal clamore di WebAssembly, ma non sei esattamente sicuro di cosa sia? Ecco il basso.

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.

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 contributori, 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 l'SDK Emscripten.
  2. Scrivi il tuo campione ciaomondo.c codice o fallo in C++/Rust se preferisci.
  3. Correre emcc ciaomondo.c -s WASM=1 -s ciaomondo.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.
  • Standard aperto – 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.
  • Piattaforma indipendente – 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 venire.
  • Nessuna raccolta dei rifiuti – WebAssembly manca ancora di Garbage Collection, anche se potrebbe presto essere implementato.
  • Nessun accesso DOM – Non è possibile accedere al DOM di un browser Web direttamente da WebAssembly, sarà necessario utilizzare 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 più diffuse alla base del cloud informatica. Docker è una tecnologia contenitore che consente agli sviluppatori di comprimere 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 open-source sistema 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 reso possibile 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 avere dimensioni di diversi gigabyte e ciò significa un piccolo ritardo startup e altri problemi di gestione. Un file Wasm simile, tuttavia, può essere grande solo pochi MB perché è un file 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 valida piattaforma informatica.

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 ad alte prestazioni già esistente – Codice vecchio ma meraviglioso che puoi semplicemente trasferire su WebAssembly.
  • Nuovo codice ad alte prestazioni – Quelli che devi progettare e implementare da zero.
  • Portare le applicazioni desktop sul web – Ciò potrebbe aprire una nuova generazione di soluzioni desktop basate sul Web, come editing video basato sul web.
  • Il cloud computing – Correre 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
  • Design del gioco
  • AI applicazioni
  • 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
  • Ruby
  • Swift
  • Go
  • Kotlin
  • Ruggine
  • PHP
  • blazer – Un framework per sviluppatori .NET.
  • JwebAssembly – Compilatore per bytecode Java e linguaggi correlati come JRuby, Jython, Groovy, Scala e Kotlin.
  • Tasso – Un framework Rust per la creazione di app Web multi-thread utilizzando WebAssembly.
  • AssemblyScript – Un linguaggio progettato specificamente per creare codice WebAssembly.
  • Grano – Un linguaggio funzionale fortemente tipizzato.
  • Motoko

Puoi trovare più lingue qui.

Elenco di runtime e strumenti WebAssembly

  • Tutti i principali browser hanno il supporto Wasm
  • pioduro – Runtime Python sul browser con lo stack scientifico Python, inclusi Pandas, NumPy, SciPy.
  • caldo
  • peso – Per microservizi e app Web
  • Ero io – 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, quie qui.

Nnamdi Okeke

Nnamdi Okeke

Nnamdi Okeke è un appassionato di computer che ama leggere una vasta gamma di libri. Ha una preferenza per Linux su Windows/Mac e lo sta usando
Ubuntu sin dai suoi primi giorni. Puoi beccarlo su Twitter tramite bongotrax

Articoli: 285

Ricevi materiale tecnico

Tendenze tecnologiche, tendenze di avvio, recensioni, entrate online, strumenti web e marketing una o due volte al mese