SlideShare a Scribd company logo
Licenza Creative Commons
Attribuzione - Non commerciale - Non opere derivate 3.0 Unported
.NET Web App
con WebAssembly
Nicolò Carandini
n.carandini@outlook.com
@TPCWare
Licenza Creative Commons
Attribuzione - Non commerciale - Non opere derivate 3.0 Unported
Un’alternativa a
JavaScript
Prima di HTML5 ci sono stati molti
tentativi di creare degli strumenti
che si imponessero come standard di
fatto per creare applicazioni Web,
tutti falliti perché ogni azienda aveva
la sua specifica proposta,
incompatibile con le altre.
Microsoft già dal 1999 parlava di
Rich Client App, ma fu Macromedia
nel 2002 a coniare il termine
RIA – Rich Internet Application.
Licenza Creative Commons
Attribuzione - Non commerciale - Non opere derivate 3.0 Unported
La guerra ai plugin
Uno dei difetti più noti dei vari metodi
per la realizzazione delle RIA consisteva
nella necessità di utilizzare i famigerati
plugin, che determinavano problemi di:
• Compatibilità coi diversi web browser
• Consumo risorse
• Introduzione bug
• Falle di sicurezza (soprattutto con Adobe Flash)
L’uso di plugin per l’esecuzione di framework esterni
termina nel 2014 con l’avvento di HTML5.
www.google.com/googlebooks/chrome
Licenza Creative Commons
Attribuzione - Non commerciale - Non opere derivate 3.0 Unported
WebAssembly
alla riscossa
E’ uno standard W3C sviluppato
con il contributo di Mozilla, Apple
e Microsoft.
Consente l’uso di linguaggi diversi
da Javascript per generare codice
compatto, portabile ed
estremamente veloce.
E’ molto recente, visto che la prima
versione è di marzo 2017, ma è già
supportato da tutti i maggiori
browser.
Licenza Creative Commons
Attribuzione - Non commerciale - Non opere derivate 3.0 Unported
Licenza Creative Commons
Attribuzione - Non commerciale - Non opere derivate 3.0 Unported
Formato WASM
WASM è il formato
binario di WebAssembly,
che contiene codice di
basso livello (molto vicino
al linguaggio macchina)
che può essere parsato,
compilato ed eseguito in
modo estremamente
veloce in tutti i web
browser che lo
supportano.
S-Expression assembly bytecode
Licenza Creative Commons
Attribuzione - Non commerciale - Non opere derivate 3.0 Unported
Licenza Creative Commons
Attribuzione - Non commerciale - Non opere derivate 3.0 Unported
WASM toolchain
Vi sono diversi strumenti
per la scrittura e
compilazione di codice
WASM, anche online,
tutti basati sulla LLVM
toolchain e il suo
linguaggio intermedio IR.
ToolchainWebBrowser
LLVM
Optimizer
x86
WASM
LLVR IR LLVM
x86 Backend
LLVM
Wasm Backend
Clang
Frontend
Rust Rustc
Frontend
C / C++
HTML
WASM
JavaScript
JS VM
DOM
Licenza Creative Commons
Attribuzione - Non commerciale - Non opere derivate 3.0 Unported
Demo WebAssembly
Da C a WAT / WASM
link
da S-EXPR a WASM
link
Uso di WASM e JavaScript
in una pagina HTML
Licenza Creative Commons
Attribuzione - Non commerciale - Non opere derivate 3.0 Unported
Licenza Creative Commons
Attribuzione - Non commerciale - Non opere derivate 3.0 Unported
.NET
per le Web App
Il team di Xamarin ha
sviluppato una versione di
Mono compilata in
WASM.
In questo modo è
possibile eseguire codice
.NET nei Web browser
che supportano
WebAssembly.
Mono runtime | C Library
LLVM bitcode
C# assemblies
clang
-target=wasm32
mono
-aot=llvmonly
Index.wasm
Index.js browser
mono – wasm
(bitcode -> wasm)
mono.wasm
load, compile
+ rum main()
load
metadata
(runtime)
libc
syscalls
Licenza Creative Commons
Attribuzione - Non commerciale - Non opere derivate 3.0 Unported
Browser + Razor = Blazor!
Utilizza tecnologie web standard
come HTML e CSS, ma con C# e la
sintassi Razor al posto di JavaScript
per creare una Web UI basata su
componenti riutilizzabili.
Creato da Steven Sanderson
autore di Knockout, uno dei primi
framework JavaScript per realizzare
applicazioni SPA, da febbraio 2018 è
stato inserito (come esperimento) in
ASP.NET.
Licenza Creative Commons
Attribuzione - Non commerciale - Non opere derivate 3.0 Unported
Web UI basata su
componenti
Un componente rappresenta
un elemento della UI, come una
pagina, un dialog, un tabset, o un
data entry form.
In Blazor, un componente è una
classe .NET, che può essere scritta a
mano (un file .cs) o più comunemente
tramite una pagina di markup Razor
(un file .cshtml).
I componenti possono essere
nidificati, riutilizzati e condivisi tra
progetti.
Licenza Creative Commons
Attribuzione - Non commerciale - Non opere derivate 3.0 Unported
BlazorComponent class
La UI del componente è definita
tramite HTML.
La logica di rendering dinamico viene
aggiunta con la sintassi C# di Razor.
Quando un’applicazione Blazor viene
compilata, il tutto viene convertito in
una classe C# di tipo BlazorComponent.
Il nome della classe generata
corrisponde al nome del file .cshtml.
Licenza Creative Commons
Attribuzione - Non commerciale - Non opere derivate 3.0 Unported
Demo: Blazor workshop
Licenza Creative Commons
Attribuzione - Non commerciale - Non opere derivate 3.0 Unported
Riferimenti
Documentazione ufficiale
blazor.net
Sito GitHub
github.com/aspnet/Blazor
Gitter channel
gitter.im/aspnet/Blazor
Blazor: a technical introduction
blog.stevensanderson.com/2018/02/06/blazor-intro
Experimenting with Blazor
blog.tpcware.com/2018/03/experimenting-with-blazor
Licenza Creative Commons
Attribuzione - Non commerciale - Non opere derivate 3.0 Unported
Blazor FTW! ☺
Nicolò Carandini
n.carandini@outlook.com
@TPCWare

More Related Content

What's hot (20)

PDF
Training Signal Webtrends
Stefano Iaboni
 
PDF
[Alam aeki] Guida illustrata alla modellazione di un dominio con Event Sourci...
Andrea Balducci
 
PPTX
2015.04.23 Azure Community Bootcamp 2015 Keynote Italy
Marco Parenzan
 
PPTX
Sviluppo di soluzioni embedded moderne con .NET Micro Framework by Lorenzo Ma...
Codemotion
 
PPTX
Mob01 mobile services e webapi
DotNetCampus
 
PDF
jQuery
Salvatore Paone
 
PDF
Microsoft Fast - Overview
Francesco Sciuti
 
PDF
Introduzione a Service Fabric e Actor Model
Andrea Tosato
 
PPTX
Multi-Device Hybrid Apps con Visual Studio e Apache Cordova
Andrea Dottor
 
PDF
Xamarin.Forms Performance Tips & Tricks - Francesco Bonacci - Codemotion Rome...
Codemotion
 
PPTX
Slide typescript - net campus
DotNetCampus
 
PPTX
Sviluppare Azure Web Apps
Andrea Dottor
 
PPTX
Realizzare applicazioni cross-platform con Xamarin e il pattern MVVM
Codemotion
 
PPTX
Del furia signalr-to-the-max
DotNetCampus
 
PDF
Meetup DotNetCode A.I. Bot Framework and Azure Functions
dotnetcode
 
PPTX
.NET Core, ASP.NET Core e Linux per il Mobile
Pietro Libro
 
PPTX
Web Api – The HTTP Way
Luca Milan
 
PPTX
APPSTUDIO: DA ZERO ALLO STORE IN 50 MINUTI!
DotNetCampus
 
PPTX
ASP.NET MVC: sfruttare la piattaforma al 100%
DomusDotNet
 
PPTX
ASP.NET MVC 6 - uno sguardo al futuro
Andrea Dottor
 
Training Signal Webtrends
Stefano Iaboni
 
[Alam aeki] Guida illustrata alla modellazione di un dominio con Event Sourci...
Andrea Balducci
 
2015.04.23 Azure Community Bootcamp 2015 Keynote Italy
Marco Parenzan
 
Sviluppo di soluzioni embedded moderne con .NET Micro Framework by Lorenzo Ma...
Codemotion
 
Mob01 mobile services e webapi
DotNetCampus
 
Microsoft Fast - Overview
Francesco Sciuti
 
Introduzione a Service Fabric e Actor Model
Andrea Tosato
 
Multi-Device Hybrid Apps con Visual Studio e Apache Cordova
Andrea Dottor
 
Xamarin.Forms Performance Tips & Tricks - Francesco Bonacci - Codemotion Rome...
Codemotion
 
Slide typescript - net campus
DotNetCampus
 
Sviluppare Azure Web Apps
Andrea Dottor
 
Realizzare applicazioni cross-platform con Xamarin e il pattern MVVM
Codemotion
 
Del furia signalr-to-the-max
DotNetCampus
 
Meetup DotNetCode A.I. Bot Framework and Azure Functions
dotnetcode
 
.NET Core, ASP.NET Core e Linux per il Mobile
Pietro Libro
 
Web Api – The HTTP Way
Luca Milan
 
APPSTUDIO: DA ZERO ALLO STORE IN 50 MINUTI!
DotNetCampus
 
ASP.NET MVC: sfruttare la piattaforma al 100%
DomusDotNet
 
ASP.NET MVC 6 - uno sguardo al futuro
Andrea Dottor
 

Similar to Wasm and Blazor CDays keynote (20)

PDF
Blazor ha vinto? Storie di casi reali
Andrea Dottor
 
PDF
Blazor per uno sviluppatore Web Form
Andrea Dottor
 
PPTX
Blazor with .net 5 - di Gerardo Greco
Giuneco S.r.l
 
PPTX
Da Rotor a .NET Core ed indietro: Microsoft <3 Open Source
Andrea Saltarello
 
PPTX
Da DotNet a DotNetCore
Raffaele Rialdi
 
PPTX
Blazor Focus Week Bari
Michele Aponte
 
PPTX
ASP.NET Web API
Pietro Libro
 
PPTX
Swagger pertutti
Nicolò Carandini
 
PPTX
Frontend Development with Blazor
Michele Aponte
 
PPTX
Swagger loves WebAPI
Nicolò Carandini
 
PDF
Swagger loves webapi
Nicolò Carandini
 
PDF
Dynamic Language Programming For The Statically Typed Programmer
Marco Parenzan
 
PDF
Blazor - i limiti sono fatti per essere superati
Commit University
 
PPTX
Swagger per tutti
Nicolò Carandini
 
PDF
Webkit presentazione ufficiale
intoinside
 
PPTX
Silverlight 4 - Community Tour (RTM)
XeDotNet
 
PPTX
Applicazioni RESTful con ASP.NET Web Api
Pietro Libro
 
PPTX
DevDayBenevento - Blazor: Creare Single Page Application con .NET e WebAseembly
Michele Aponte
 
PDF
Sviluppo di applicazioni mobile con PhoneGap
DotNetMarche
 
PDF
Corso WebApp iOS - Lezione 06: Web Development for iOS Devices
Andrea Picchi
 
Blazor ha vinto? Storie di casi reali
Andrea Dottor
 
Blazor per uno sviluppatore Web Form
Andrea Dottor
 
Blazor with .net 5 - di Gerardo Greco
Giuneco S.r.l
 
Da Rotor a .NET Core ed indietro: Microsoft <3 Open Source
Andrea Saltarello
 
Da DotNet a DotNetCore
Raffaele Rialdi
 
Blazor Focus Week Bari
Michele Aponte
 
ASP.NET Web API
Pietro Libro
 
Swagger pertutti
Nicolò Carandini
 
Frontend Development with Blazor
Michele Aponte
 
Swagger loves WebAPI
Nicolò Carandini
 
Swagger loves webapi
Nicolò Carandini
 
Dynamic Language Programming For The Statically Typed Programmer
Marco Parenzan
 
Blazor - i limiti sono fatti per essere superati
Commit University
 
Swagger per tutti
Nicolò Carandini
 
Webkit presentazione ufficiale
intoinside
 
Silverlight 4 - Community Tour (RTM)
XeDotNet
 
Applicazioni RESTful con ASP.NET Web Api
Pietro Libro
 
DevDayBenevento - Blazor: Creare Single Page Application con .NET e WebAseembly
Michele Aponte
 
Sviluppo di applicazioni mobile con PhoneGap
DotNetMarche
 
Corso WebApp iOS - Lezione 06: Web Development for iOS Devices
Andrea Picchi
 
Ad

More from Nicolò Carandini (20)

PPTX
The absolute need of Secure Http
Nicolò Carandini
 
PPTX
Xamarin DevOps
Nicolò Carandini
 
PDF
Code review e pair programming con Visual Studio Live Share
Nicolò Carandini
 
PPTX
Azure dev ops meetup one
Nicolò Carandini
 
PDF
The Hitchhiker's Guide to the Azure Galaxy
Nicolò Carandini
 
PPTX
Game matching with SignalR
Nicolò Carandini
 
PPTX
Xamarin Workbooks
Nicolò Carandini
 
PDF
Web app slots and webapi versioning
Nicolò Carandini
 
PPTX
Intro xamarin forms
Nicolò Carandini
 
PPTX
Windows 10 design
Nicolò Carandini
 
PPTX
Windows 10 IoT
Nicolò Carandini
 
PPTX
Mobile services multi-piattaforma con Xamarin
Nicolò Carandini
 
PPTX
Universal Apps localization and globalization
Nicolò Carandini
 
PPTX
Applicazioni web con ASP.NET Owin e Katana
Nicolò Carandini
 
PPTX
Azure Mobile Services con il .NET Framework
Nicolò Carandini
 
PPTX
Sviluppare app per iOS e Android con Xamarin e Visual Studio
Nicolò Carandini
 
PPTX
Web in real time con signalR
Nicolò Carandini
 
PPTX
Xaml introduction
Nicolò Carandini
 
PPTX
Self hosted Services with .NET OWin
Nicolò Carandini
 
PPTX
Web api 2.0
Nicolò Carandini
 
The absolute need of Secure Http
Nicolò Carandini
 
Xamarin DevOps
Nicolò Carandini
 
Code review e pair programming con Visual Studio Live Share
Nicolò Carandini
 
Azure dev ops meetup one
Nicolò Carandini
 
The Hitchhiker's Guide to the Azure Galaxy
Nicolò Carandini
 
Game matching with SignalR
Nicolò Carandini
 
Xamarin Workbooks
Nicolò Carandini
 
Web app slots and webapi versioning
Nicolò Carandini
 
Intro xamarin forms
Nicolò Carandini
 
Windows 10 design
Nicolò Carandini
 
Windows 10 IoT
Nicolò Carandini
 
Mobile services multi-piattaforma con Xamarin
Nicolò Carandini
 
Universal Apps localization and globalization
Nicolò Carandini
 
Applicazioni web con ASP.NET Owin e Katana
Nicolò Carandini
 
Azure Mobile Services con il .NET Framework
Nicolò Carandini
 
Sviluppare app per iOS e Android con Xamarin e Visual Studio
Nicolò Carandini
 
Web in real time con signalR
Nicolò Carandini
 
Xaml introduction
Nicolò Carandini
 
Self hosted Services with .NET OWin
Nicolò Carandini
 
Web api 2.0
Nicolò Carandini
 
Ad

Wasm and Blazor CDays keynote

  • 1. Licenza Creative Commons Attribuzione - Non commerciale - Non opere derivate 3.0 Unported .NET Web App con WebAssembly Nicolò Carandini [email protected] @TPCWare
  • 2. Licenza Creative Commons Attribuzione - Non commerciale - Non opere derivate 3.0 Unported Un’alternativa a JavaScript Prima di HTML5 ci sono stati molti tentativi di creare degli strumenti che si imponessero come standard di fatto per creare applicazioni Web, tutti falliti perché ogni azienda aveva la sua specifica proposta, incompatibile con le altre. Microsoft già dal 1999 parlava di Rich Client App, ma fu Macromedia nel 2002 a coniare il termine RIA – Rich Internet Application.
  • 3. Licenza Creative Commons Attribuzione - Non commerciale - Non opere derivate 3.0 Unported La guerra ai plugin Uno dei difetti più noti dei vari metodi per la realizzazione delle RIA consisteva nella necessità di utilizzare i famigerati plugin, che determinavano problemi di: • Compatibilità coi diversi web browser • Consumo risorse • Introduzione bug • Falle di sicurezza (soprattutto con Adobe Flash) L’uso di plugin per l’esecuzione di framework esterni termina nel 2014 con l’avvento di HTML5. www.google.com/googlebooks/chrome
  • 4. Licenza Creative Commons Attribuzione - Non commerciale - Non opere derivate 3.0 Unported WebAssembly alla riscossa E’ uno standard W3C sviluppato con il contributo di Mozilla, Apple e Microsoft. Consente l’uso di linguaggi diversi da Javascript per generare codice compatto, portabile ed estremamente veloce. E’ molto recente, visto che la prima versione è di marzo 2017, ma è già supportato da tutti i maggiori browser.
  • 5. Licenza Creative Commons Attribuzione - Non commerciale - Non opere derivate 3.0 Unported Licenza Creative Commons Attribuzione - Non commerciale - Non opere derivate 3.0 Unported Formato WASM WASM è il formato binario di WebAssembly, che contiene codice di basso livello (molto vicino al linguaggio macchina) che può essere parsato, compilato ed eseguito in modo estremamente veloce in tutti i web browser che lo supportano. S-Expression assembly bytecode
  • 6. Licenza Creative Commons Attribuzione - Non commerciale - Non opere derivate 3.0 Unported Licenza Creative Commons Attribuzione - Non commerciale - Non opere derivate 3.0 Unported WASM toolchain Vi sono diversi strumenti per la scrittura e compilazione di codice WASM, anche online, tutti basati sulla LLVM toolchain e il suo linguaggio intermedio IR. ToolchainWebBrowser LLVM Optimizer x86 WASM LLVR IR LLVM x86 Backend LLVM Wasm Backend Clang Frontend Rust Rustc Frontend C / C++ HTML WASM JavaScript JS VM DOM
  • 7. Licenza Creative Commons Attribuzione - Non commerciale - Non opere derivate 3.0 Unported Demo WebAssembly Da C a WAT / WASM link da S-EXPR a WASM link Uso di WASM e JavaScript in una pagina HTML
  • 8. Licenza Creative Commons Attribuzione - Non commerciale - Non opere derivate 3.0 Unported Licenza Creative Commons Attribuzione - Non commerciale - Non opere derivate 3.0 Unported .NET per le Web App Il team di Xamarin ha sviluppato una versione di Mono compilata in WASM. In questo modo è possibile eseguire codice .NET nei Web browser che supportano WebAssembly. Mono runtime | C Library LLVM bitcode C# assemblies clang -target=wasm32 mono -aot=llvmonly Index.wasm Index.js browser mono – wasm (bitcode -> wasm) mono.wasm load, compile + rum main() load metadata (runtime) libc syscalls
  • 9. Licenza Creative Commons Attribuzione - Non commerciale - Non opere derivate 3.0 Unported Browser + Razor = Blazor! Utilizza tecnologie web standard come HTML e CSS, ma con C# e la sintassi Razor al posto di JavaScript per creare una Web UI basata su componenti riutilizzabili. Creato da Steven Sanderson autore di Knockout, uno dei primi framework JavaScript per realizzare applicazioni SPA, da febbraio 2018 è stato inserito (come esperimento) in ASP.NET.
  • 10. Licenza Creative Commons Attribuzione - Non commerciale - Non opere derivate 3.0 Unported Web UI basata su componenti Un componente rappresenta un elemento della UI, come una pagina, un dialog, un tabset, o un data entry form. In Blazor, un componente è una classe .NET, che può essere scritta a mano (un file .cs) o più comunemente tramite una pagina di markup Razor (un file .cshtml). I componenti possono essere nidificati, riutilizzati e condivisi tra progetti.
  • 11. Licenza Creative Commons Attribuzione - Non commerciale - Non opere derivate 3.0 Unported BlazorComponent class La UI del componente è definita tramite HTML. La logica di rendering dinamico viene aggiunta con la sintassi C# di Razor. Quando un’applicazione Blazor viene compilata, il tutto viene convertito in una classe C# di tipo BlazorComponent. Il nome della classe generata corrisponde al nome del file .cshtml.
  • 12. Licenza Creative Commons Attribuzione - Non commerciale - Non opere derivate 3.0 Unported Demo: Blazor workshop
  • 13. Licenza Creative Commons Attribuzione - Non commerciale - Non opere derivate 3.0 Unported Riferimenti Documentazione ufficiale blazor.net Sito GitHub github.com/aspnet/Blazor Gitter channel gitter.im/aspnet/Blazor Blazor: a technical introduction blog.stevensanderson.com/2018/02/06/blazor-intro Experimenting with Blazor blog.tpcware.com/2018/03/experimenting-with-blazor
  • 14. Licenza Creative Commons Attribuzione - Non commerciale - Non opere derivate 3.0 Unported Blazor FTW! ☺ Nicolò Carandini [email protected] @TPCWare