Gaat WebAssembly JavaScript vervangen?

Onze nieuwste aanwinst Adolfo gaat gelijk los! Afgelopen week was hij gastspreker bij DomCode, waar hij alles uit de doeken deed over WebAssembly. Zijn er voordelen? En wat zijn de nadelen? 

Gastspreker bij DomCode

Op dinsdag 25 september was ik de gastspreker bij DomCode, een meetup in Utrecht waar programmeurs uit verschillende hoeken komen om over nieuwe ontwikkelingen te horen en een gezellige avond te hebben. De talk ging over WebAssembly, een nieuwe technologie die inmiddels beschikbaar is op de voornaamste browsers. WebAssembly maakt het mogelijk om heel efficiënt programma’s uit te voeren op de browser (high performance computing), maar eigenlijk is dat best een niche toepassing waar je niet direct gebruik van maakt als je webapplicaties aan het bouwen bent. De vraag is: kunnen we WebAssembly gebruiken met andere doeleinden behalve performance? De talk was gericht op het beantwoorden van deze vraag, daarom de titel 'WebAssembly for the rest of us'. De conclusie? Dat we dankzij WebAssembly steeds minder JavaScript gaan schrijven en dat programmeertaalkeuze op de browser binnenkort flink wordt uitgebreid.

Transpilation: automatisch vertalen naar JavaScript

Mijn betoog begint met de constatering dat programmeurs al een tijd op zoek zijn naar alternatieven voor JavaScript. Helaas kunnen de browsers alleen JavaScript code uitvoeren en ondersteunen ze geen andere programmeertalen. In het verleden zijn er pogingen geweest om dit te veranderen, met technologieën zoals Flash, Silverlight en Java Applets, maar om verschillende (goede) redenen zijn deze technologieën niet meer in gebruik. Inmiddels zijn er speciale programmeertalen ontwikkeld met als doel JavaScript te vervangen op de browser door gebruik te maken van een slimme truc: programma’s in deze talen worden automatisch vertaald naar JavaScript. Op deze manier kun je programmeren in je favoriete taal en het resulterend programma toch op de browser runnen. Dit noemen we transpilation en wordt ontzettend veel gebruikt in de industrie (TypeScript is daar een uitstekend voorbeeld van).

WebAssembly: de voordelen van transpilation zonder de nadelen!

Transpilation heeft zelf ook wat beperkingen, met als gevolg dat niet alle programmeertalen ervan kunnen profiteren. Dit komt erop neer dat alleen speciaal ontwikkelde talen vertaald kunnen worden naar JavaScript. Je kan bijvoorbeeld geen C# programma’s draaien op de browser… Maar hier brengt WebAssembly verandering in, die de voordelen van transpilation biedt zonder de beperkingen ervan! Hoe dat precies gebeurt wordt misschien het onderwerp van een toekomstige blog. Het belangrijke is dat we, dankzij WebAssembly, verschillende programmeertalen zoals C#, Rust en Go op de browser kunnen draaien.
 
Aangezien WebAssembly nog een vrij jonge technologie is gaat niet alles even soepel. Dit heb ik laten zien aan de hand van een project waarin ik een game, geschreven in Rust, heb aangepast om het op de browser draaiend te krijgen. De details over het proces, het uiteindelijke resultaat en de broncode kun je zien op mijn blog post van 2017. Ondanks de beperkingen laat dit project het grote potentieel van WebAssembly zien. Een programma dat oorspronkelijk bedoeld was om als applicatie te draaien kan met een beetje moeite ook nog op de browser worden uitgevoerd. Daarom is mijn verwachting: als WebAssembly verder doorontwikkelt wordt JavaScript steeds minder gebruikt en komen andere programmeertalen naar voren als goede alternatieven wanneer het gaat om het bouwen van web applicaties.

[Adolfo is developer bij Infi]

Wil je op de hoogte blijven van updates over hippe tech, een kijkje achter de schermen, of upcoming events? Schrijf je in voor onze nieuwsbrief!

Wil je iets waarmaken met Infi?

Wil jij een eigen webapplicatie of mobiele app waarmee jij het bij anderen maakt?

Waargemaakt door de nerds van Infi.
Nerds met liefde voor softwareontwikkeling en die kunnen communiceren. En heel belangrijk: wat we doen, doen we met veel lol!

Wij willen het fixen. Laat jij van je horen?

Voor wie heb je een vraag?