{"id":1566,"date":"2019-05-19T00:00:00","date_gmt":"2019-05-18T22:00:00","guid":{"rendered":"https:\/\/demo.sidekick.be\/itenium\/webassembly\/"},"modified":"2025-11-28T13:31:44","modified_gmt":"2025-11-28T12:31:44","slug":"webassembly","status":"publish","type":"post","link":"https:\/\/demo.sidekick.be\/itenium\/blog\/javascript\/webassembly\/","title":{"rendered":"Google I\/O &#8217;19: WebAssembly for Web Developers"},"content":{"rendered":"<h1 id=\"emscripten\">Emscripten<\/h1>\n<p><a href=\"https:\/\/github.com\/emscripten-core\/emscripten\" class=\"github\"><img decoding=\"async\" src=\"https:\/\/img.shields.io\/github\/stars\/emscripten-core\/emscripten.svg?style=social&amp;label=Star\" \/><\/a><a href=\"https:\/\/github.com\/emscripten-core\/emscripten\">emscripten-core\/emscripten<\/a>: An LLVM-to-Web Compiler<\/p>\n<p>Brings your existing C\/C++ applications to the web (ex: Autocad, Game Engines like Unity). Provides a drop-in replacement: Whatever you wrote, it should just work on the web. It emulates OpenGL, the FileSystem etc.<\/p>\n<h1 id=\"for-web-developers\">For Web Developers<\/h1>\n<p>Two main use cases<\/p>\n<ul>\n<li>Surgical replacement of tiny modules in your JavaScript, the hot paths, the bottlenecks, with WebAssembly<\/li>\n<li>Use existing libraries that do not exist on npm from another ecosystem (C\/C++, Rust, \u2026)<\/li>\n<\/ul>\n<h1 id=\"the-performance-myth\">The Performance Myth<\/h1>\n<p>WebAssembly and JavaScript both have the same peak performance. But\u2026 JavaScript can easily fall off the \u201cfast path\u201d while WebAssembly will not.<\/p>\n<figure class=\"imagewrapper\" style=\"max-width: 700px\"><img decoding=\"async\" src=\"https:\/\/itenium-be.github.io\/blog-posts-new\/assets\/blog-images\/webassembly-v8-js-vs-wasm.png\" alt=\"\" title=\"\" class=\"img-responsive\" \/><figcaption>Inside V8<\/figcaption><\/figure>\n<ul>\n<li><code>js<\/code> input\n<ul>\n<li>Ignition: Interprets the JS text and runs it. While running, collects analytics data about how the code is behaving before TurboFan kicks in.<\/li>\n<li>TurboFan: The optimizing compiler.<\/li>\n<\/ul>\n<\/li>\n<li><code>wasm<\/code> input\n<ul>\n<li>Liftoff: The streaming WebAssembly compiler which generates machine code.<\/li>\n<li>TurboFan: The optimizing compiler which generates optimized code.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p>With JavaScript input, TurboFan will deopt (deoptimization) when the assumptions from the collected analytics no longer hold true reverting back to the Ignition interpreter. With Liftoff you always stay on the fast path.<\/p>\n<p><strong>WebAssembly delivers more predictable performance than JavaScript<\/strong><\/p>\n<figure class=\"imagewrapper\" style=\"max-width: 678px\"><img decoding=\"async\" src=\"https:\/\/itenium-be.github.io\/blog-posts-new\/assets\/blog-images\/webassembly-js-vs-wasm.png\" alt=\"\" title=\"\" class=\"img-responsive\" \/><figcaption>The peak performance is about the same but in some browsers the JavaScript performance is way off!<\/figcaption><\/figure>\n<h1 id=\"the-future\">The Future<\/h1>\n<h4 id=\"webassembly-threads-and-simd\">WebAssembly Threads and SIMD<\/h4>\n<p>Will allow WebAssembly to outperform JavaScript.<\/p>\n<ul>\n<li>Shared Linear Memory<\/li>\n<li>Atomic operations<\/li>\n<li>Implemented with WebWorkers<\/li>\n<li>Ships with Chrome 74<\/li>\n<\/ul>\n<h4 id=\"host-bindings\">Host bindings<\/h4>\n<p><!-- IDL: Interface Description Language --><\/p>\n<p>Interact easily with JavaScript and DOM objects with the <strong>Web IDL interface<\/strong>. Will also greatly reduce the glue overhead that is currently required.<\/p>\n<p>Web IDL is a requirement for other proposals such as <strong>Garbage Collection<\/strong>, <strong>Tail Call optimizations<\/strong> and <strong>Exception Handling<\/strong>.<\/p>\n<h4 id=\"ecma-module-integration\">ECMA module integration<\/h4>\n<pre><code class=\"language-javascript\">import {foo} from '.\/myModule.wasm';\n<\/code><\/pre>\n<h1 id=\"an-example\">An Example<\/h1>\n<h2 id=\"windows-emscripten-sdk-installation\">Windows Emscripten SDK Installation<\/h2>\n<p><a href=\"https:\/\/emscripten.org\/docs\/getting_started\/downloads.html\">Install the Emscripten SDK<\/a><\/p>\n<pre><code class=\"language-powershell\">git clone https:\/\/github.com\/emscripten-core\/emsdk.git\ncd emsdk\n.emsdk.ps1 install latest\n.emsdk.ps1 activate latest\nemsdk_env.bat\n<\/code><\/pre>\n<h2 id=\"an-application\">An Application<\/h2>\n<p>Your original, mega complex C application <code>HelloWorld.c<\/code><\/p>\n<pre><code class=\"language-c\">#include &lt;stdio.h&gt;\n\nint main(int argc, char ** argv) {\n    printf(\"Hello Worldn\");\n}\n<\/code><\/pre>\n<p>Turning it into a <code>wasm<\/code> file:<\/p>\n<pre><code class=\"language-bash\">emcc HelloWorld.c -s WASM=1 -o HelloWorld.html\nnpx http-server\n<\/code><\/pre>\n<p>Open the generated <code>HelloWorld.html<\/code> in a browser to see your WebAssembly file executed!<\/p>\n<p>For this \u201cprogram\u201d, a 40kb <code>HelloWorld.wasm<\/code> file and 55kb of JavaScript glue in <code>HelloWorld.js<\/code> were generated.<\/p>\n<h1>Extras<\/h1>\n<p><b>Stuff that came into being during the making of this post<\/b><\/p>\n<ul>\n<li><a href=\"https:\/\/github.com\/itenium-be\/TechTalk-WebAssembly\">HelloWorld Emscripten example<\/a><\/li>\n<\/ul>\n<p><b>Other interesting reads<\/b><\/p>\n<ul>\n<li><a href=\"https:\/\/github.com\/AssemblyScript\/assemblyscript\" class=\"github\"><img decoding=\"async\" src=\"https:\/\/img.shields.io\/github\/stars\/AssemblyScript\/assemblyscript.svg?style=social&#038;label=Star\" \/><\/a><a href=\"https:\/\/github.com\/AssemblyScript\/assemblyscript\">AssemblyScript\/assemblyscript<\/a>: Definitely not a TypeScript to WebAssembly compiler<\/li>\n<li><a href=\"https:\/\/github.com\/WebAssembly\/proposals\" class=\"github\"><img decoding=\"async\" src=\"https:\/\/img.shields.io\/github\/stars\/WebAssembly\/proposals.svg?style=social&#038;label=Star\" \/><\/a><a href=\"https:\/\/github.com\/WebAssembly\/proposals\">WebAssembly\/proposals<\/a>: Tracking WebAssembly proposals<\/li>\n<li><a href=\"https:\/\/www.youtube.com\/playlist?list=PLNYkxOF6rcIATmAmz7HcCzongGvQEtx8i\">More sessions from Google I\/O &#8217;19<\/a><\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<figure class=\"youtubemovie\">\n<div class=\"iframewrapper\"><\/div><figcaption><\/figcaption><\/figure>\n","protected":false},"author":1,"featured_media":2068,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[3],"tags":[15],"class_list":["post-1566","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-javascript","tag-tech-talk"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v26.5 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Google I\/O &#039;19: WebAssembly for Web Developers - Itenium<\/title>\n<meta name=\"robots\" content=\"noindex, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Google I\/O &#039;19: WebAssembly for Web Developers - Itenium\" \/>\n<meta property=\"og:url\" content=\"https:\/\/demo.sidekick.be\/itenium\/blog\/javascript\/webassembly\/\" \/>\n<meta property=\"og:site_name\" content=\"Itenium\" \/>\n<meta property=\"article:published_time\" content=\"2019-05-18T22:00:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-11-28T12:31:44+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/demo.sidekick.be\/itenium\/wp-content\/uploads\/2025\/11\/webassembly.png\" \/>\n\t<meta property=\"og:image:width\" content=\"449\" \/>\n\t<meta property=\"og:image:height\" content=\"300\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Usdevelop\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Usdevelop\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"2 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/demo.sidekick.be\/itenium\/blog\/javascript\/webassembly\/\",\"url\":\"https:\/\/demo.sidekick.be\/itenium\/blog\/javascript\/webassembly\/\",\"name\":\"Google I\/O '19: WebAssembly for Web Developers - Itenium\",\"isPartOf\":{\"@id\":\"https:\/\/demo.sidekick.be\/itenium\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/demo.sidekick.be\/itenium\/blog\/javascript\/webassembly\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/demo.sidekick.be\/itenium\/blog\/javascript\/webassembly\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/demo.sidekick.be\/itenium\/wp-content\/uploads\/2025\/11\/webassembly.png\",\"datePublished\":\"2019-05-18T22:00:00+00:00\",\"dateModified\":\"2025-11-28T12:31:44+00:00\",\"author\":{\"@id\":\"https:\/\/demo.sidekick.be\/itenium\/#\/schema\/person\/6ab401ce01e858184ee4a8667fe0f022\"},\"breadcrumb\":{\"@id\":\"https:\/\/demo.sidekick.be\/itenium\/blog\/javascript\/webassembly\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/demo.sidekick.be\/itenium\/blog\/javascript\/webassembly\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/demo.sidekick.be\/itenium\/blog\/javascript\/webassembly\/#primaryimage\",\"url\":\"https:\/\/demo.sidekick.be\/itenium\/wp-content\/uploads\/2025\/11\/webassembly.png\",\"contentUrl\":\"https:\/\/demo.sidekick.be\/itenium\/wp-content\/uploads\/2025\/11\/webassembly.png\",\"width\":449,\"height\":300},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/demo.sidekick.be\/itenium\/blog\/javascript\/webassembly\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/demo.sidekick.be\/itenium\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Google I\/O &#8217;19: WebAssembly for Web Developers\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/demo.sidekick.be\/itenium\/#website\",\"url\":\"https:\/\/demo.sidekick.be\/itenium\/\",\"name\":\"Itenium\",\"description\":\"We build software. We build careers.\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/demo.sidekick.be\/itenium\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/demo.sidekick.be\/itenium\/#\/schema\/person\/6ab401ce01e858184ee4a8667fe0f022\",\"name\":\"Usdevelop\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/demo.sidekick.be\/itenium\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/cc8cf9b9e9d5bbe7e8d247907cc9ac8457bbfa2854b52eaddf6529adfe88ceab?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/cc8cf9b9e9d5bbe7e8d247907cc9ac8457bbfa2854b52eaddf6529adfe88ceab?s=96&d=mm&r=g\",\"caption\":\"Usdevelop\"},\"sameAs\":[\"https:\/\/demo.sidekick.be\/itenium\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Google I\/O '19: WebAssembly for Web Developers - Itenium","robots":{"index":"noindex","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"og_locale":"en_US","og_type":"article","og_title":"Google I\/O '19: WebAssembly for Web Developers - Itenium","og_url":"https:\/\/demo.sidekick.be\/itenium\/blog\/javascript\/webassembly\/","og_site_name":"Itenium","article_published_time":"2019-05-18T22:00:00+00:00","article_modified_time":"2025-11-28T12:31:44+00:00","og_image":[{"width":449,"height":300,"url":"https:\/\/demo.sidekick.be\/itenium\/wp-content\/uploads\/2025\/11\/webassembly.png","type":"image\/png"}],"author":"Usdevelop","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Usdevelop","Est. reading time":"2 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/demo.sidekick.be\/itenium\/blog\/javascript\/webassembly\/","url":"https:\/\/demo.sidekick.be\/itenium\/blog\/javascript\/webassembly\/","name":"Google I\/O '19: WebAssembly for Web Developers - Itenium","isPartOf":{"@id":"https:\/\/demo.sidekick.be\/itenium\/#website"},"primaryImageOfPage":{"@id":"https:\/\/demo.sidekick.be\/itenium\/blog\/javascript\/webassembly\/#primaryimage"},"image":{"@id":"https:\/\/demo.sidekick.be\/itenium\/blog\/javascript\/webassembly\/#primaryimage"},"thumbnailUrl":"https:\/\/demo.sidekick.be\/itenium\/wp-content\/uploads\/2025\/11\/webassembly.png","datePublished":"2019-05-18T22:00:00+00:00","dateModified":"2025-11-28T12:31:44+00:00","author":{"@id":"https:\/\/demo.sidekick.be\/itenium\/#\/schema\/person\/6ab401ce01e858184ee4a8667fe0f022"},"breadcrumb":{"@id":"https:\/\/demo.sidekick.be\/itenium\/blog\/javascript\/webassembly\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/demo.sidekick.be\/itenium\/blog\/javascript\/webassembly\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/demo.sidekick.be\/itenium\/blog\/javascript\/webassembly\/#primaryimage","url":"https:\/\/demo.sidekick.be\/itenium\/wp-content\/uploads\/2025\/11\/webassembly.png","contentUrl":"https:\/\/demo.sidekick.be\/itenium\/wp-content\/uploads\/2025\/11\/webassembly.png","width":449,"height":300},{"@type":"BreadcrumbList","@id":"https:\/\/demo.sidekick.be\/itenium\/blog\/javascript\/webassembly\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/demo.sidekick.be\/itenium\/"},{"@type":"ListItem","position":2,"name":"Google I\/O &#8217;19: WebAssembly for Web Developers"}]},{"@type":"WebSite","@id":"https:\/\/demo.sidekick.be\/itenium\/#website","url":"https:\/\/demo.sidekick.be\/itenium\/","name":"Itenium","description":"We build software. We build careers.","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/demo.sidekick.be\/itenium\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/demo.sidekick.be\/itenium\/#\/schema\/person\/6ab401ce01e858184ee4a8667fe0f022","name":"Usdevelop","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/demo.sidekick.be\/itenium\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/cc8cf9b9e9d5bbe7e8d247907cc9ac8457bbfa2854b52eaddf6529adfe88ceab?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/cc8cf9b9e9d5bbe7e8d247907cc9ac8457bbfa2854b52eaddf6529adfe88ceab?s=96&d=mm&r=g","caption":"Usdevelop"},"sameAs":["https:\/\/demo.sidekick.be\/itenium"]}]}},"_links":{"self":[{"href":"https:\/\/demo.sidekick.be\/itenium\/wp-json\/wp\/v2\/posts\/1566","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/demo.sidekick.be\/itenium\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/demo.sidekick.be\/itenium\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/demo.sidekick.be\/itenium\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/demo.sidekick.be\/itenium\/wp-json\/wp\/v2\/comments?post=1566"}],"version-history":[{"count":2,"href":"https:\/\/demo.sidekick.be\/itenium\/wp-json\/wp\/v2\/posts\/1566\/revisions"}],"predecessor-version":[{"id":2199,"href":"https:\/\/demo.sidekick.be\/itenium\/wp-json\/wp\/v2\/posts\/1566\/revisions\/2199"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/demo.sidekick.be\/itenium\/wp-json\/wp\/v2\/media\/2068"}],"wp:attachment":[{"href":"https:\/\/demo.sidekick.be\/itenium\/wp-json\/wp\/v2\/media?parent=1566"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/demo.sidekick.be\/itenium\/wp-json\/wp\/v2\/categories?post=1566"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/demo.sidekick.be\/itenium\/wp-json\/wp\/v2\/tags?post=1566"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}