WebAssembly: The Browser is your OS

Slides:



Advertisements
Similar presentations
Microsoft Confidential. An incubation effort to: Support client -> server communication in native code with a modern C++ API design Support writing Azure-based.
Advertisements

Hattan Shobokshi mvcdotnet.wordpress.com Web Development in the Past (Microsoft Stack)
Mike Taulty Developer & Platform Group Microsoft Ltd
DEV395 No Touch Deployment for Windows Forms Jamie Cool Program Manager.NET Client Microsoft Corporation.
TypeScript for Alfresco and CMIS Steve Reiner CTO Integrated Semantics.
1 WebAssembly: WASM means more powerful web apps. 류철 한국전자통신연구원 모바일서비스플랫폼연구팀.
Agenda Steps of App Building The Runtime Environment Managing App Data Debug and Test an App Validate an App Publish an App to a Store Packaging Apps.
跨平台 Hybrid App 開發簡介 - 使用 Visual Studio Tool for Apache Cordova + HTML/JavaScript 陳葵懋 (Ian)
Solving Modern Day Business Problems Using Power Apps
Three Runtimes, one standard… .NET Standard: All in Visual Studio 2017
Ramping Up On The SharePoint Framework (SPFx)
Modernizing your. NET applications with. NET Standard,
1/10/2018 9:33 PM Cloud Roadshow © 2014 Microsoft Corporation. All rights reserved. MICROSOFT MAKES NO WARRANTIES, EXPRESS, IMPLIED OR STATUTORY, AS TO.
Introduction to ASP.NET Core
Angular 4 + TypeScript Getting Started
Introduction to Web Assembly
What's new in the world of SharePoint development and deployment
ASP.NET Core: Web apps, cloud apps, and containers
TechEd /1/2018 7:56 AM © 2013 Microsoft Corporation. All rights reserved. Microsoft, Windows, and other product names are or may be registered trademarks.
6/2/2018 4:08 AM BRK3327 Ten things you didn't know about building .NET UWP apps in Visual Studio 2017 Daniel Jacobson Program Manager – Visual Studio.
The Modern ASP.NET Tech Stack!
UI Test Automation with Appium
Presented by Kenny Duenke and Patrick Witbrod
3 Things Everyone Knows About Node JS That You Don't
SQL Server Data Tools for Visual Studio Part I: Core SQL Server Tools
ASP.NET in Linux and Windows containers
Modern Web Development
DNN Connect 2017 Microsoft Keynote
Introducing ASP.NET Core 2.0
A lot of Software Development is about learning
SPA Revolution with WebAssembly and Blazor Rainer Stropek | software
DotnetConf 11/14/2018 3:27 AM © 2016 Microsoft Corporation. All rights reserved. MICROSOFT MAKES NO WARRANTIES, EXPRESS, IMPLIED OR STATUTORY, AS TO THE.
Microsoft Ignite /14/ :21 AM BRK2101
Microsoft Build /14/ :29 PM © 2016 Microsoft Corporation. All rights reserved. MICROSOFT MAKES NO WARRANTIES, EXPRESS, IMPLIED OR STATUTORY,
Blazor C# in the Browser Derek codeopinion.com.
Introduction to SharePoint Framework (SPFx)
Learn. Imagine. Build. .NET Conf
Microsoft Connect /23/ :48 AM
Getting Started With TypeScript
SPA Revolution with WebAssembly and Blazor Rainer Stropek | software
Microsoft Build /30/2018 2:15 AM Migrating Silverlight Windows Phone apps to the Universal Windows Platform Ricardo Villalobos Principal SDE Manager.
Docker Workflows with Visual Studio
Microsoft Connect /1/2018 2:36 AM
12/3/2018 7:56 PM © Microsoft Corporation. All rights reserved. MICROSOFT MAKES NO WARRANTIES, EXPRESS, IMPLIED OR STATUTORY, AS TO THE INFORMATION IN.
Nathan Totten Technical Evangelist Windows Azure
Overview of Silverlight 2
Modern cloud PaaS for mobile apps, web sites, API's and business logic apps
Web Development in Visual Studio 2017
Microsoft Connect /17/2019 9:04 AM
Serverless Architecture in the Cloud
TechEd /22/2019 9:22 PM © 2013 Microsoft Corporation. All rights reserved. Microsoft, Windows, and other product names are or may be registered trademarks.
Microsoft Connect /23/ :38 AM
Microsoft Connect /24/ :10 PM
Microsoft Connect /28/2019 2:20 AM
.NET Conf 2018 Keynote Jose Barbosa Aaron Amm Theeranit.
Understand design from code with code maps
Introduction.
5/25/2019 2:40 PM © Microsoft Corporation. All rights reserved. MICROSOFT MAKES NO WARRANTIES, EXPRESS, IMPLIED OR STATUTORY, AS TO THE INFORMATION IN.
Microsoft Connect /28/2019 1:25 AM
Blazor C# running in the browser via WebAssembly
WEBASSEMBLY I .NET - WEB APLIKACIJE BUDUĆNOSTI
The Future is Now with ASP.NET Core 3.0
#01# ASP.NET Core Overview Design by: TEDU Trainer: Bach Ngoc Toan
Running C# in the browser
Build’an’Office add-in- using’modern JavaScript tools and techniques
Blazor A new framework for browser-based .NET apps Ryan Nowak
What if I told you….
11/11/2019 1:15 PM © Microsoft Corporation. All rights reserved. MICROSOFT MAKES NO WARRANTIES, EXPRESS, IMPLIED OR STATUTORY, AS TO THE INFORMATION IN.
Microsoft Connect /14/ :11 AM
Presentation transcript:

WebAssembly: The Browser is your OS @JeremyLikness Microsoft

Jeremy Likness https://blog.jeremylikness.com/ @JeremyLikness Cloud Advocate @ Microsoft Professional Developer for Quarter Century 👟 Likes to “run” 🥑 99.9765% plant-based diet 🎱 Shoots pool whenever possible   https://blog.jeremylikness.com/ @JeremyLikness Jeremy.Likness@microsoft.com

JS

JS? C# F# Java .NET Rust Ruby Go Python 9/13/2019 8:46 AM © Microsoft Corporation. All rights reserved. MICROSOFT MAKES NO WARRANTIES, EXPRESS, IMPLIED OR STATUTORY, AS TO THE INFORMATION IN THIS PRESENTATION.

Let’s back up a second … 9/13/2019 8:46 AM © Microsoft Corporation. All rights reserved. MICROSOFT MAKES NO WARRANTIES, EXPRESS, IMPLIED OR STATUTORY, AS TO THE INFORMATION IN THIS PRESENTATION.

In the beginning … const computePrime = () => { var lastPrime = -1;     for (let i = 2; i < 50000; i+=1) {         let isPrime = true;         for (let j = i-1; j >= 2; j-=1) {             if (i % j == 0) {                 isPrime = false;                 break;             }         }         if (isPrime) {             lastPrime = i;     }     return lastPrime; }

Along came asm.js …

Along came asm.js … C/C++/Rust/Go/etc.

C/C++/Rust/Go/etc. Clang (or other) Along came asm.js …

C/C++/Rust/Go/etc. Clang (or other) LLVM Bytecode Along came asm.js …

Along came asm.js … C/C++/Rust/Go/etc. Clang (or other) LLVM Bytecode Emscripten Along came asm.js …

Along came asm.js … C/C++/Rust/Go/etc. Clang (or other) LLVM Bytecode Emscripten Asm.js Along came asm.js …

primes.c int computePrimesAsm() { int lastPrime; int i; int j; int isPrime; for (i = 2; i < 50000; i = i+1) { isPrime = 1; for (j = i-1; j >= 2; j--) { if (i % j == 0) { isPrime = -1; break; } if (isPrime == 1) { lastPrime = i; return lastPrime;

Demo: Build asm.js

primes.js function _computePrimesAsm() { var $0 = 0, $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0; var $8 = 0, $9 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = 2; while(1) { $4 = $1; $5 = ($4|0)<(50000); if (!($5)) { break; } $3 = 1; $6 = $1; $7 = (($6) - 1)|0; $2 = $7; $8 = $2; $9 = ($8|0)>=(2); if (!($9)) { $10 = $1; $11 = $2; $12 = (($10|0) % ($11|0))&-1; $13 = ($12|0)==(0); if ($13) { label = 6; break; } $14 = $2; $15 = (($14) + -1)|0; $2 = $15; if ((label|0) == 6) { label = 0; $3 = -1; $16 = $3; $17 = ($16|0)==(1); if ($17) { $18 = $1; $0 = $18; $19 = $1; $20 = (($19) + 1)|0; $1 = $20; $21 = $0; STACKTOP = sp;return ($21|0);

JavaScript vs. asm.js in Chrome

Then, in 2017 …

Wasm is Binary, this is a textual representation (module (type $t0 (func)) (type $t1 (func (result i32))) (func $__wasm_call_ctors (type $t0)) (func $computePrimesWasm (export "computePrimesWasm") (type $t1) (result i32) (local $l0 i32) (local $l1 i32) (local $l2 i32) (local $l3 i32) (local $l4 i32) i32.const 1 set_local $l0 i32.const 2 set_local $l1 loop $L0 get_local $l0 set_local $l2 block $B1 block $B2 loop $L3 get_local $l2 i32.lt_s br_if $B2 get_local $l1 i32.rem_s set_local $l3 i32.const -1 i32.add get_local $l3 br_if $L3 end i32.const 1 i32.add set_local $l0 get_local $l1 tee_local $l1 i32.const 50000 i32.ne br_if $L0 br $B1 end set_local $l4 get_local $l0 get_local $l4) (table $T0 1 1 anyfunc) (memory $memory (export "memory") 2) (global $g0 (mut i32) (i32.const 66560)) (global $__heap_base (export "__heap_base") i32 (i32.const 66560)) (global $__data_end (export "__data_end") i32 (i32.const 1024)))

Demo: Wasm and Performance

…and also in 2017… .NET

Wait. Why use .NET for browser apps? Modern languages (C#) .NET ecosystem Performance Full-stack Tools Stable & mature

“Blazor” experimental project Full-stack web development with .NET via WebAssembly No plugin or code transpilation Works in all modern browsers including mobile browsers Browser + Razor = Blazor!

Get started

@JeremyLikness

@JeremyLikness

@JeremyLikness

@JeremyLikness Blazor

@JeremyLikness Blazor

Pros Cons > Thin client > Full runtime > Latency > Simpler arch. Cons > No offline > Latency > Server resources https://... File View Edit https://... DOM DOM macOS 1. Client-side 2. Server-side (Razor Components) 3. Desktop app (Electron)

Blazor DEPENDENCY INJECTION SERVER-SIDE RENDERING COMPONENT MODEL FORMS & VALIDATION DEBUGGING PUBLISHING Blazor ROUTING LAYOUTS UNIT TESTING AUTO REBUILD ASSEMBLY TRIMMING JAVASCRIPT INTEROP INTELLISENSE & TOOLING COMPONENT PACKAGES

Reusable Components

.NET Standard libraries and JS/.NET interop

Implement Code-behind

Using the MVVM Pattern

Debugging

💻 Demo source code: https://jlik.me/fli 9/13/2019 8:46 AM https://blog.jeremylikness.com/ @JeremyLikness Jeremy.Likness@microsoft.com 💻 Demo source code: https://jlik.me/fli ▶ Get Started with Blazor: https://jlik.me/flf 👋🏻 Introduction/Overview of Blazor: https://jlik.me/flg 🔪 Intro to Blazor Components: https://jlik.me/flh © Microsoft Corporation. All rights reserved. MICROSOFT MAKES NO WARRANTIES, EXPRESS, IMPLIED OR STATUTORY, AS TO THE INFORMATION IN THIS PRESENTATION.