Utforska anpassade sektioner i WebAssembly för att bÀdda in metadata, förbÀttra verktyg och optimera utvecklarupplevelsen. En djupdykning för globala utvecklare.
WebAssembly anpassade sektioner: Metadata och verktygsintegration
WebAssembly (Wasm) har snabbt blivit en hörnsten i modern webbutveckling och utökar sin rÀckvidd till olika domÀner, inklusive molnbaserad databehandling, edge computing och inbyggda system. Denna framgÄng beror pÄ dess effektivitet, sÀkerhet och portabilitet. En central aspekt av Wasm som bidrar till dess mÄngsidighet Àr möjligheten att inkludera anpassade sektioner i WebAssemblys binÀra format. Dessa anpassade sektioner gör det möjligt för utvecklare att bÀdda in metadata och förbÀttra verktygsintegrationen, vilket leder till betydande förbÀttringar i utvecklings- och driftsÀttningsprocesser. Denna artikel kommer att dyka djupt in i vÀrlden av WebAssemblys anpassade sektioner och ge en omfattande översikt över deras syfte, implementering och de fördelar de erbjuder den globala utvecklargemenskapen.
FörstÄ WebAssembly och dess binÀra format
Innan vi dyker in i anpassade sektioner Àr det viktigt att förstÄ grunderna i WebAssembly. Wasm Àr ett binÀrt instruktionsformat som Àr utformat för att vara ett portabelt kompileringsmÄl för programmeringssprÄk, vilket möjliggör exekvering pÄ webben och i andra miljöer. Wasm-binÀrformatet Àr strukturerat för att vara kompakt, effektivt och sÀkert.
En typisk WebAssembly-modul bestÄr av flera sektioner, var och en med ett specifikt syfte:
- Typsektion: Definierar de funktionstyper som anvÀnds i modulen.
- Importsektion: Deklarerar funktioner och data som importeras frÄn vÀrdmiljön.
- Funktionssektion: Listar funktionssignaturerna för modulens funktioner.
- Tabellsektion: Definierar tabeller som anvÀnds för indirekta funktionsanrop.
- Minnessektion: Specificerar det minne som anvÀnds av modulen.
- Global sektion: Deklarerar globala variabler.
- Exportsektion: Listar de funktioner, minnen, tabeller och globala variabler som exporteras frÄn modulen.
- Kodsektion: InnehÄller de faktiska WebAssembly-instruktionerna för funktioner.
- Datasektion: InnehÄller initialiserad data för minnet.
Dessa sektioner Àr standard och avgörande för Wasms funktionalitet. Specifikationen tillÄter dock Àven anpassade sektioner, vilket ger utvecklare en mekanism för att utöka funktionaliteten hos Wasm-moduler genom att bÀdda in godtycklig data.
Vad Àr WebAssembly anpassade sektioner?
Anpassade sektioner Àr en mÄngsidig funktion i WebAssemblys binÀra format som lÄter utvecklare bÀdda in godtycklig data vid sidan av den centrala WebAssembly-koden. De pÄverkar inte direkt exekveringen av Wasm-modulen av WebAssemblys virtuella maskin (VM). IstÀllet fungerar de som ett sÀtt att bÀra med sig ytterligare information som kan anvÀndas av verktyg och andra komponenter som interagerar med Wasm-modulen. Denna mekanism frÀmjar lagring av metadata, felsökningsinformation och annan anvÀndbar data, allt utan att Àndra modulens grundlÀggande beteende.
Huvudegenskaper för anpassade sektioner:
- Godtyckligt innehÄll: Anpassade sektioner kan innehÄlla vilken binÀr data som helst, vilket möjliggör flexibel informationslagring.
- Icke-exekvering: De pÄverkar inte Wasm-modulens körtidsbeteende under exekvering.
- Verktygsstöd: De anvÀnds frÀmst av verktyg som kompilatorer, felsökare och optimerare.
- Utökningsbarhet: De erbjuder ett flexibelt sÀtt att utöka Wasm-formatet utan att Àndra kÀrnspecifikationen.
Fördelar med att anvÀnda anpassade sektioner:
- Metadatalagring: Lagra versionshantering, upphovsmannainformation eller modulbeskrivningar.
- Felsökningsinformation: Inkludera information om kÀllkodskartor (source maps) eller funktionsnamn för att förbÀttra felsökningen.
- Kompilatoroptimering: Ge ledtrÄdar till kompilatorn för att hjÀlpa den att optimera Wasm-modulen.
- Verktygsintegration: UnderlÀtta sömlös integration med olika verktyg och bibliotek som anvÀnds i utvecklingsflödet.
- SÀkerhetsförbÀttringar: Lagra sÀkerhetsrelaterad information som kontrollsummor eller digitala signaturer.
Implementera anpassade sektioner
Implementering av anpassade sektioner innebÀr att man lÀgger till metadata i WebAssemblys binÀra format. HÀr Àr en detaljerad genomgÄng av processen:
1. Verktyg och bibliotek
Det finns flera verktyg och bibliotek för att arbeta med anpassade sektioner i WebAssembly. PopulÀra alternativ inkluderar:
- Binaryen: Ett kompilatorverktyg för WebAssembly som anvÀnds för att lÀsa, skriva och optimera Wasm-filer.
- Wabt (WebAssembly Binary Toolkit): En uppsÀttning verktyg för att arbeta med WebAssembly, inklusive `wasm-edit` för att modifiera Wasm-binÀrer.
- wasm-tools: En samling hjÀlpverktyg för WebAssembly frÄn Google.
- ProgrammeringssprÄk & SDK:er: Beroende pÄ vilket sprÄk som anvÀnds (C/C++, Rust, Go, etc.), kan olika SDK:er hjÀlpa till att skapa Wasm-moduler som innehÄller anpassade sektioner.
2. LĂ€gga till anpassade sektioner
Processen för att lÀgga till en anpassad sektion innefattar vanligtvis följande steg:
- Skapa Wasm-modulen: Kompilera din kÀllkod till en Wasm-modul och se till att den initiala Wasm-koden genereras.
- VÀlj ett sektionsnamn: VÀlj ett unikt namn för din anpassade sektion. Sektionsnamn Àr strÀngar och mÄste vara giltig UTF-8. Namnen Àr kritiska, eftersom de hjÀlper verktyg att identifiera och bearbeta specifik data.
- Förbered datan: Koda den data du vill lagra i den anpassade sektionen. Detta kan vara allt frÄn textstrÀngar och versionsnummer till binÀra datastrukturer.
- Infoga den anpassade sektionen: AnvÀnd ett verktyg som `wasm-edit` eller ett bibliotek som Binaryen för att infoga den anpassade sektionen i Wasm-binÀren. Detta innebÀr att du anger sektionsnamnet och den kodade datan.
- Verifiera resultatet: AnvÀnd verktyg som `wasm-objdump` eller liknande verktyg för att inspektera den resulterande Wasm-binÀren och bekrÀfta att din anpassade sektion har inkluderats.
3. Praktiskt exempel med Binaryen (C++)
LÄt oss illustrera hur man lÀgger till en anpassad sektion med Binaryen i C++ (anpassat för tydlighet):
#include <iostream>
#include <fstream>
#include <string>
#include <vector>
#include "binaryen.h"
using namespace std;
using namespace wasm;
int main() {
// 1. Skapa en modul
Module module;
// (LÀgg till lite grundlÀggande Wasm-kod hÀr, t.ex. en enkel funktion)
FunctionType i32_i32 = module.addFunctionType("i32_i32", Type(i32), { Type(i32) });
auto body = module.i32.add(module.getLocal(0, i32), module.i32.const_(1));
module.addFunction("add_one", i32_i32, {i32}, body);
module.addExport("add_one", "add_one");
// 2. Förbered data för den anpassade sektionen
string sectionName = "my_custom_section";
string sectionData = "Detta Àr anpassad metadata för modulen.";
// 3. Konvertera sektionsdata till en vektor av bytes
vector<char> sectionBytes(sectionData.begin(), sectionData.end());
// 4. LĂ€gg till den anpassade sektionen i modulen
module.addCustomSection(sectionName, sectionBytes);
// 5. Skriv modulen till en fil
ofstream outputFile("output.wasm", ios::binary);
BinaryWriter writer(module, outputFile);
writer.write();
outputFile.close();
cout << "Wasm-fil skapad med anpassad sektion!\n";
return 0;
}
Detta exempel visar hur man lÀgger till en anpassad sektion med namnet `my_custom_section` och en strÀng som innehÄller metadata till en Wasm-modul. De avgörande stegen innefattar att skapa en Binaryen-modul, definiera din sektionsdata, konvertera den datan till bytes och slutligen lÀgga till den anpassade sektionen i modulen. Koden skriver sedan den modifierade modulen till en utdatafil.
4. Praktiskt exempel med `wasm-edit` (kommandorad)
Att anvÀnda `wasm-edit` Àr ett enkelt sÀtt att lÀgga till anpassade sektioner utan att skriva kod:
# Kompilera din kÀllkod till en Wasm-fil, t.ex. my_module.wasm
# LĂ€gg till en anpassad sektion med wasm-edit
wasm-edit my_module.wasm --add-custom-section my_version_info "Version: 1.0.0\nUpphovsman: Ditt Namn"
Detta kommando lÀgger till en anpassad sektion med namnet `my_version_info` med den angivna strÀngdatan till din Wasm-modul. Du kan se den tillagda sektionen med `wasm-objdump -x my_module.wasm` eller liknande verktyg.
AnvÀndningsomrÄden för metadata med anpassade sektioner
Anpassade sektioner gör det möjligt för utvecklare att bÀdda in olika typer av metadata i WebAssembly-moduler. HÀr Àr nÄgra vanliga exempel:
1. Versionsinformation
Att bÀdda in versionsinformation i en Wasm-modul Àr avgörande för att hantera uppdateringar och beroenden. Anpassade sektioner kan lagra versionsnummer, byggdatum eller andra relevanta detaljer.
// Sektionsnamn: "version_info"
// Sektionsdata: "Version: 1.2.3\nByggdatum: 2024-07-26"
Denna metadata kan anvÀndas av verktyg och applikationer för att kontrollera kompatibilitet, identifiera modulversioner och sÀkerstÀlla att rÀtt version distribueras.
2. Upphovsmannainformation
Att lÀgga till information om upphovsman eller bidragsgivare hjÀlper till med attribuering och samarbete. Följande exempel visar hur man inkluderar upphovsmannainformation i en anpassad sektion:
// Sektionsnamn: "author_info"
// Sektionsdata: "Upphovsman: John Doe\nE-post: john.doe@example.com"
Denna information kan vara anvÀndbar för utvecklare, underhÄllare och anvÀndare som vill veta vem som skapade en Wasm-modul och hur man kontaktar dem.
3. Felsökningsinformation
Anpassade sektioner kan innehÄlla felsökningsinformation för att förbÀttra felsökningsupplevelsen. Till exempel kan kÀllkodskartdata (source map data) bÀddas in för att mappa Wasm-instruktioner tillbaka till den ursprungliga kÀllkoden.
// Sektionsnamn: "source_map"
// Sektionsdata: // (Kodad kÀllkodskartdata, t.ex. JSON eller binÀrt format)
Verktyg som felsökare kan anvÀnda denna information för att ge en mer anvÀndarvÀnlig felsökningsupplevelse, vilket gör det möjligt för utvecklare att stega igenom kÀllkoden istÀllet för de lÄgnivÄinstruktioner som Wasm anvÀnder.
4. Tips för kompilatoroptimering
Kompilatorer kan anvÀnda ledtrÄdar i anpassade sektioner för att optimera Wasm-modulen. Dessa ledtrÄdar kan inkludera förslag för inlining av funktioner eller andra prestandarelaterade optimeringar.
// Sektionsnamn: "optimization_hints"
// Sektionsdata: "Inline-funktion 'foo'; Optimera för storlek."
Detta möjliggör effektivare kompilering och förbĂ€ttrad prestanda. Ăven om WebAssemblys design Ă€r avsedd att optimeras vĂ€l utan sĂ„dana ledtrĂ„dar, kan specifika domĂ€ner dra nytta av det.
5. SĂ€kerhetsinformation
SÀkerhet Àr av yttersta vikt i programvaruutveckling. Anpassade sektioner kan anvÀndas för att lagra sÀkerhetsrelaterad metadata som digitala signaturer, kontrollsummor eller sÀkerhetspolicyer.
// Sektionsnamn: "signature"
// Sektionsdata: // (Data för digital signatur)
Denna information hjÀlper till att verifiera Wasm-modulens integritet och autenticitet, vilket minskar potentiella sÀkerhetsrisker. Kontrollsummor kan anvÀndas för att verifiera om modulen har manipulerats, och digitala signaturer kan sÀkerstÀlla modulens ursprung och Àkthet.
Verktygsintegration med anpassade sektioner
Kraften i anpassade sektioner blir verkligen uppenbar nÀr de integreras med olika verktygsflöden. TÀnk pÄ dessa exempel:
1. Byggsystem
Byggsystem kan automatiskt lÀgga till anpassade sektioner under byggprocessen. Till exempel kan ett byggskript injicera versionsinformation och byggtidsstÀmplar i Wasm-modulen.
Exempel: Ett byggskript för ett Rust Wasm-projekt som anvÀnder `wasm-pack` (förenklat exempel):
# I ditt byggskript (t.ex. build.rs)
use std::process::Command;
fn main() {
let version = env!("CARGO_PKG_VERSION");
let build_date = chrono::Local::now().format("%Y-%m-%d %H:%M:%S").to_string();
// Bygg wasm-modulen
Command::new("wasm-pack")
.args(&["build", "--target", "web"]) // eller andra mÄl
.status()
.expect("Misslyckades med att bygga wasm-modulen.");
// LĂ€gg till anpassade sektioner med wasm-edit
let wasm_file = "pkg/your_project_bg.wasm"; // eller var din wasm-fil finns
Command::new("wasm-edit")
.args(&[
wasm_file,
"--add-custom-section",
"version_info",
&format!("Version: {}\nByggdatum: {}", version, build_date),
])
.status()
.expect("Misslyckades med att lÀgga till anpassade sektioner.");
}
Detta skript kompilerar först Wasm-modulen med `wasm-pack` och anvÀnder sedan `wasm-edit` för att lÀgga till en anpassad sektion `version_info` som innehÄller projektets version och byggdatum. Detta sÀkerstÀller att den distribuerade Wasm-modulen inkluderar denna kritiska information för felsökning och versionskontroll.
2. Felsökare
Felsökare kan anvÀnda anpassade sektioner som innehÄller kÀllkodskartinformation för att erbjuda felsökning pÄ kÀllkodsnivÄ. Detta förbÀttrar felsökningsupplevelsen och gör det enklare för utvecklare att stega igenom den ursprungliga kÀllkoden istÀllet för Wasm-instruktionerna.
Exempel: En felsökare kan lÀsa en anpassad sektion med namnet `source_map` för att hÀmta mappningen mellan Wasm-instruktioner och kÀllkodsrader. Felsökaren kan sedan visa kÀllkoden och tillÄta stegning genom den, vilket gör det lÀttare att identifiera och ÄtgÀrda buggar. Verktyg som Chrome DevTools erbjuder redan detta stöd för mÄnga Wasm-projekt.
3. Modulladdare och körtidsmiljöer
Modulladdare och körtidsmiljöer kan inspektera anpassade sektioner för att ge mer kontext och kontroll under laddning och exekvering av Wasm-moduler. Till exempel kan en körtidsmiljö lÀsa en anpassad sektion som innehÄller sÀkerhetspolicyer och upprÀtthÄlla dem under exekvering.
Exempel: En körtidsmiljö som anvÀnder Wasm för serverlösa funktioner kan anvÀnda en anpassad sektion med resursgrÀnser. Om en anpassad sektion med namnet `resource_limits` finns, med data som specificerar maximalt minne, CPU-tid eller nÀtverksbandbredd som Wasm-modulen kan konsumera, upprÀtthÄller körtidsmiljön dessa grÀnser under exekvering, vilket förbÀttrar sÀkerheten och stabiliteten i den serverlösa miljön. Detta Àr sÀrskilt viktigt för miljöer med flera hyresgÀster (multi-tenant) dÀr resursbegrÀnsningar Àr avgörande.
4. Statiska analysverktyg
Statiska analysverktyg kan anvÀnda anpassade sektioner för att lagra och komma Ät ytterligare information om Wasm-modulen, vilket gör det möjligt för dem att utföra mer sofistikerade analyser.
Exempel: Ett sÀkerhetsanalysverktyg kan lÀsa en anpassad sektion som innehÄller information om modulens beroenden. Baserat pÄ beroendena kan verktyget flagga potentiella sÄrbarheter eller sÀkerhetsrisker.
Praktiska exempel och anvÀndningsfall
WebAssembly anpassade sektioner Àr anvÀndbara i mÄnga verkliga scenarier. HÀr Àr nÄgra exempel som belyser deras mÄngsidighet:
1. Spelutveckling
Spelutvecklare kan anvÀnda anpassade sektioner för att lagra spelspecifik metadata, som nivÄinformation eller tillgÄngsberoenden. Detta gör det möjligt för spelmotorer att effektivt ladda och hantera speltillgÄngar. FörestÀll dig en Wasm-modul för en spelnivÄ. Anpassade sektioner kan lagra nivÄns namn, skapare och information om tillhörande texturer, modeller och skript.
2. Webbapplikationer
Webbapplikationer kan anvÀnda anpassade sektioner för att bÀdda in konfigurationsdetaljer pÄ klientsidan eller applikationsspecifik metadata, vilket förbÀttrar underhÄllbarheten och sÀkerheten för den distribuerade koden. TÀnk pÄ en interaktiv kartapplikation byggd med Wasm. Metadata i anpassade sektioner kan lagra API-nycklar, server-URL:er och andra konfigurationsdetaljer, vilket tar bort dessa frÄn den huvudsakliga exekverbara filen och dÀrmed stÀrker sÀkerheten.
3. Edge Computing
Edge computing-applikationer kan utnyttja anpassade sektioner för att bÀdda in information om distributionsmiljön, vilket möjliggör effektiv anpassning till specifika hÄrdvaru- eller nÀtverksförhÄllanden. Edge-applikationer kan innehÄlla specifika plattformskrav eller edge-nod-ID:n i en anpassad sektion, vilket gör att Wasm-koden kan optimeras och distribueras sömlöst till olika edge-enheter.
4. IoT-enheter
IoT-enheter kan inkludera anpassade sektioner för att lagra enhetsspecifik data, som serienummer eller kalibreringsparametrar, vilket optimerar för sÀkra och underhÄllbara distributioner. IoT-enheter, som smarta sensorer, kan bÀdda in kalibreringsdata och sÀkerhetskonfigurationer i anpassade sektioner. Detta sÀkerstÀller att varje enhet fungerar enligt sina specifikationer och minimerar behovet av firmware-uppdateringar. Vid uppdatering av firmware kommer laddaren att kunna identifiera de specifika parametrarna för varje enhet frÄn den anpassade sektionen.
5. SĂ€ker programvarudistribution
Anpassade sektioner möjliggör sÀker programvarudistribution genom att erbjuda en plats för att lagra digitala signaturer och kontrollsummor. I kombination med en betrodd körtidsmiljö kan dessa funktioner hjÀlpa till att sÀkerstÀlla att den nedladdade koden inte har manipulerats, vilket ger ett robust sÀkerhetslager.
Utmaningar och övervÀganden
Ăven om anpassade sektioner Ă€r exceptionellt vĂ€rdefulla finns det vissa utmaningar att ta hĂ€nsyn till.
1. Standardisering
Den största utmaningen Ă€r bristen pĂ„ standardisering. Namn pĂ„ anpassade sektioner och dataformat Ă€r inte standardiserade. Ăven om denna flexibilitet Ă€r en stor fördel, skapar den ocksĂ„ komplexitet nĂ€r det gĂ€ller interoperabilitet. Utvecklare mĂ„ste komma överens om namnkonventioner och dataformat för att sĂ€kerstĂ€lla att verktyg och bibliotek kan tolka de anpassade sektionerna pĂ„ ett tillförlitligt sĂ€tt.
2. Varierande verktygsstöd
Verktygsstödet för anpassade sektioner kan vara inkonsekvent. Medan mÄnga verktyg erbjuder mekanismer för att skapa och modifiera anpassade sektioner, kan stödet för att tolka och utnyttja dem variera.
3. UnderhÄllbarhet
ĂveranvĂ€ndning av anpassade sektioner kan göra Wasm-moduler svĂ„ra att underhĂ„lla. DĂ„ligt utformade anpassade sektioner eller överdriven metadata kan öka modulens storlek och komplexitet. Noggrann planering Ă€r nödvĂ€ndig för att sĂ€kerstĂ€lla att anpassade sektioner anvĂ€nds effektivt utan att kompromissa med underhĂ„llbarheten.
4. SĂ€kerhet
Ăven om anpassade sektioner kan anvĂ€ndas för att förbĂ€ttra sĂ€kerheten, kan de ocksĂ„ introducera sĂ„rbarheter. Om anpassade sektioner anvĂ€nds för att lagra kĂ€nslig information mĂ„ste utvecklare vidta lĂ€mpliga sĂ€kerhetsĂ„tgĂ€rder för att skydda den datan frĂ„n obehörig Ă„tkomst eller modifiering. Se till att dina anpassade sektioner inte komprometterar sĂ€kerheten för den centrala Wasm-modulen.
5. Wasm VM-kompatibilitet
Wasm-körtidsmiljön mĂ„ste korrekt tolka och förstĂ„ anpassade sektioner. Ăven om anpassade sektioner Ă€r utformade för att inte pĂ„verka exekveringen direkt, kan eventuella tolkningsfel störa körtidsmiljön. Utvecklare bör noggrant testa implementeringar av anpassade sektioner över olika virtuella Wasm-maskiner (VM) som Wasmtime eller Wasmer för att sĂ€kerstĂ€lla kompatibilitet.
BÀsta praxis för anvÀndning av anpassade sektioner
För att maximera effektiviteten av anpassade sektioner, ha dessa bÀsta praxis i Ätanke:
- VÀlj beskrivande namn: VÀlj meningsfulla och beskrivande namn för dina anpassade sektioner.
- Dokumentera din metadata: TillhandahÄll omfattande dokumentation för dina anpassade sektioner, inklusive deras namn, dataformat och anvÀndning.
- Versionskontroll: AnvÀnd versionshantering för anpassade sektioner för att hantera uppdateringar och bakÄtkompatibilitet.
- Testa noggrant: Testa anpassade sektioner noggrant över olika verktyg och miljöer.
- Undvik överdriven metadata: Ăverfyll inte modulen med onödig metadata.
- Följ sÀkra metoder: Om du lagrar kÀnslig data, implementera lÀmpliga sÀkerhetsÄtgÀrder för att förhindra obehörig Ätkomst.
- Utnyttja befintliga standarder: Utforska och utnyttja befintliga konventioner och standarder dÀr de Àr tillÀmpliga, men nÀr du behöver en anpassad metod, dokumentera den noggrant.
Framtida trender och utvecklingar
WebAssembly-ekosystemet utvecklas stÀndigt. Framtida utveckling kommer sannolikt att fokusera pÄ att förbÀttra verktygen för att arbeta med anpassade sektioner och etablera bÀsta praxis för deras anvÀndning. HÀr Àr nÄgra potentiella trender:
- Standardiseringsinsatser: Mer standardisering av vanliga sektionsnamn och dataformat.
- FörbÀttrade verktyg: BÀttre stöd för anpassade sektioner i kompilatorer, felsökare och andra utvecklarverktyg.
- FörbÀttrad sÀkerhet: Mer sofistikerade metoder för att sÀkra anpassade sektioner och skydda kÀnslig data.
- Integration med sprÄ ekosystem: FörbÀttrat stöd i olika programmeringssprÄk för att skapa och hantera anpassade sektioner.
- WebAssembly Component Model: Den pÄgÄende utvecklingen av WebAssembly Component Model lovar att ytterligare förenkla anvÀndningen av anpassade sektioner och skapa mer kraftfulla och portabla moduler.
Framtiden bjuder pÄ spÀnnande möjligheter att förbÀttra WebAssembly med anpassade sektioner och göra det till en Ànnu mer flexibel och kraftfull plattform för global utveckling.
Slutsats
WebAssembly anpassade sektioner Àr ett vÀrdefullt verktyg för utvecklare som vill bÀdda in metadata, förbÀttra verktygsintegrationen och optimera utvecklingsprocessen. Genom att förstÄ grunderna i Wasm, strukturen för anpassade sektioner och de tillgÀngliga verktygen kan utvecklare över hela vÀrlden utnyttja anpassade sektioner för att optimera, felsöka och sÀkra sina Wasm-moduler. Följ bÀsta praxis, var medveten om utmaningarna och hÄll dig uppdaterad med det utvecklande WebAssembly-ekosystemet för att fÄ ut det mesta av anpassade sektioner och förbÀttra ditt Wasm-utvecklingsflöde.