Blogg

Här finns tekniska artiklar, presentationer och nyheter om arkitektur och systemutveckling. Håll dig uppdaterad, följ oss på Twitter

Callista medarbetare Anders Forssell

WebAssembly - lågnivå JS tar webben till nya höjder

// Anders Forssell

WebAssembly - WASM - är en ny teknologi för att köra applikationer skrivna andra språk än Javascript direkt i webbrowsern. Det är designat för ge “near native” prestanda och korta nedladdningstider. Till att börja med finns stöd för C & C++, men flera andra språk är på gång: Kotlin, Rust, Go, Haskel m.fl.

Användningsområdet är inte bara att kunna köra C/C++-applikationer i browsern. Även Javascript-utvecklare kan genom direkta anropsmöjligheter dra nytta av det stora utbud av C/C++-bibliotek som finns tillgängligt.

Några av de egenskaper som gör WebAssembly intressant är:

  • Effektivt och snabbt - bygger på en enkel stackmaskin och ett kompakt binärt format som är portabelt, ger snabba nedladdningstider och mycket bra prestanda vid exekvering
  • Säkert - exekvering sker i en “sandboxed” runtimemiljö och efterlever alla policys gällande säkerhet som finns i browsern
  • Öppet - den finns ett textformat för den kompilerade koden som underlättar vid experimenterande och debugging
  • Del av webben - kan samexistera och interagera med Javascript i en gemensam miljö

“The desktop is dying, and the JDK is dying with it” - Brian Sletten, ArchConf 2017

I grunden bygger WebAssembly på LLVM - en kompilatorinfrastruktur som används för ett stort antal språk, C, C++, Python, Swift för att bara nämna några. WebAssembly kompilerar LLVM IR (Intermediate Representation) till ett binärt format som kan köras i browserns Javascript-motor. Användningen av LLVM ger en robust utgångspunkt och bidrar till en hög optimeringsgrad på genererad kod.

Vad är det då som gör att WebAssembly ser lovande ut, trots att många liknande ansatser har (mer eller mindre) misslyckats förut? Vi har ju sett många försök segla förbi under årens lopp - Java Applets, Flash, ActiveX, Silverlight… - listan kan göras lång.

Det är bara tiden som kan utvisa om WebAssembly blir den succé som många tror, men det finns en del som talar för att så blir fallet:

  • WebAssembly drivs som en öppen standard av W3C och är uppbackat av fyra stora browser-motorer (Chrome, Firefox, Edge och WebKit)
  • Kan köras utan någon plugin i browsern
  • Utnyttjar befintlig Javascript-infrastruktur och följer därmed browserns normala säkerhetsinställningar
  • Drar nytta av den snabba utveckling gällande bl.a. prestanda som sker i befintliga Javascript-motorer

Några exempel på WebAssembly-demos som du kan köra i browsern redan idag hittar du nedan.

https://msorvig.github.io/qt-webassembly-examples/widgets_wiggly/widgets_wiggly.html

http://webassembly.org/demo/Tanks/

http://aws-website-webassemblyskeletalanimation-ffaza.s3-website-us-east-1.amazonaws.com

https://www.funkykarts.rocks/demo.html

Några övriga referenser

http://webassembly.org

http://webassembly.org/roadmap/

https://wasdk.github.io/WasmFiddle/

https://www.infoworld.com/article/3239129/web-development/rust-language-gets-direct-webassembly-compilation.html

Tack för att du läser Callistas blogg.
Hjälp oss att nå ut med information genom att dela nyheter och artiklar i ditt nätverk.

Kommentarer