the web in action as the platform − “Native” programming languages running in your browser − Sneak Peek: Single-Page Applications with .NET − Demos ☺ − WebAssembly/mono-wasm/ Blazor Deep Dive − Future-proof tutorial (WebAssembly is stable, but mono-wasm/Blazor aren’t) − Flash, Silverlight, Java Applets or other Plugins .NET auf dem Weg, den Browser zu erobern?
APIs • WebAssembly • Web Audio API • Gamepad API • Media Capture and Streams • Web Bluetooth API Single-Page Web Applications • Angular • React • Vue Backend Technologies • .NET Core • Node.js .NET auf dem Weg, den Browser zu erobern?
users − Windows, Linux, macOS, Android, iOS: a mixture of everything, anywhere − Desktop is still important: not everything is mobile − Software developers need to care about & target ubiquitous systems − Depending on the actual audience, on the actual use cases − The Web has proven to be a universal platform − Modern browsers are power horses – more or less like an operating system .NET auf dem Weg, den Browser zu erobern?
− Fast, efficient, portable − Readable and debuggable − Uses existing sandboxing tools − Part of the open, backwards- compatible web .NET auf dem Weg, den Browser zu erobern?
(Chrome 57, Edge 16, Firefox 52 (not yet in ESR), Safari 11) − Desktop and mobile − Feature parity with asm.js was the goal − Native technology (i.e. no plug-ins!) − Idea: Bring all programming languages to the browser − Targeted at languages such as C, C++ or Rust (= languages without garbage collection) − Achieves superior performance for some use cases − Addition to JavaScript (not a replacement!) − JavaScript glue code is still required to load a WebAssembly − Currently, JavaScript counterpart is required for accessing the DOM .NET auf dem Weg, den Browser zu erobern?
new features − Threads (already in Chrome 70) − Garbage Collection − Reference Types − Direct DOM access − Many more things… − https://github.com/WebAssembly/design/blob/master/FutureFeatures.md − BTW: WASM also works on the server − e.g. WASM loader for Node.js − https://github.com/wasm-tool/node-loader .NET auf dem Weg, den Browser zu erobern?
JavaScript/HTML application − Anything from simple helper libraries, to compute-oriented task offload − Main application frame & logic in WebAssembly, UI in JavaScript/ HTML/CSS − Entire code base in WebAssembly − With a tiny bit of loading and Web API – bridging JavaScript .NET auf dem Weg, den Browser zu erobern?
the browser − C/C++ tools & compilers − Binaryen: compiler and toolchain infrastructure library for WebAssembly, written in C++ − LLVM: The modern C/C++ compiler toolchain − Emscripten: LLVM-to-JavaScript-or-WASM compiler − Tools cross-compiling from major languages − Cheerp (from C++) − TeaVM (from Java) − Rust − mono-wasm (from C#) .NET auf dem Weg, den Browser zu erobern? C / C++ Source code .wasm module HTML doc JS glue code Emscripten +
Xamarin is based on Mono, Unity as well − Support for .NET Standard − Mono team is working on tooling to compile Mono/.NET code to WASM − Two approaches − JIT – for fast development cycles, including live reload (part of mono-master) − AOT – for optimized runtime deployment & execution (aka mono-wasm) .NET auf dem Weg, den Browser zu erobern?
args) { Yell("Hack"); } public static void Yell(string text) { Console.WriteLine($"{text.ToUpperInvariant()}!!!"); } } .NET auf dem Weg, den Browser zu erobern?
based on .NET − Blazor projects run 100% in the browser − On top of a WASM build of the Mono .NET runtime * − Compiled .NET assemblies are loaded into the browser and JIT compiled * − Uses Razor/.cshtml templates for rendering HTML/CSS − Uses C# for writing application logic .NET auf dem Weg, den Browser zu erobern? * as of December 12, 2018
in the browser − We still have a sandbox − Various .NET Standard APIs will just not work in the browser − It is NOT a way to port Razor/MVC/server-side web applications to an SPA − It is NOT a way to bring XAML/WPF/Xamarin into the browser − You may want to look at the Ooui.WASM open source project for this − It is NOT production-ready − Therefore, it is NOT suitable for real-world applications (yet?) .NET auf dem Weg, den Browser zu erobern?
Electron or Cordova • Add a manifest to the web application to enhance it as a downloadable and offline-capable PWA .NET auf dem Weg, den Browser zu erobern?
to know HTML, CSS and JavaScript. Period. − Progressive Web Apps − Emerging technologies enable more “app-like” feeling and behaviors of Web apps − including offline capabilities − WebAssembly − Brings any programming language and sandbox-aware framework to the browser − May pave the way to write business applications without large JavaScript parts – some day… maybe − Blazor − Experimental SPA Framework by the ASP.NET Core team, very early stages – do not use in production! − Shows possibilities of WebAssembly with .NET/possible future UI framework? .NET auf dem Weg, den Browser zu erobern?