Tempo di recuperare le prime informazioni su WinRT, ecco quanto ho saputo parlando direttamente con diverse persone di diversi team.
Esistono due stack in Windows 8 per costruire applicazioni:
- Modalità classica (Win32 / .NET)
- Modalità Metro-Style
La modalità classica è quella che tutti conosciamo, non cambierà e sarà mantenuta per il futuro. Le applicazioni WPF, Winform e Html continueranno a funzionare. Queste applicazioni funzionano nell'ambiente del desktop classico e vengono aperte in Explorer come lo conosciamo adesso.
Le applicazioni NON possono usare entrambe le modalità. Se usano WinRT non possono usare Win32. Se usano Win32 non possono usare WinRT e perciò non sono Metro (e quindi girano nel vecchio desktop).
Nel contesto di applicazioni server tutto ciò che oggi abbiamo con il .NET Framework non ha senso che venga cambiato. Il Framework c'è e rimarrà con tutto ciò che già conosciamo.
Nel contesto di applicazioni client, può rimanere tutto come era prima (che verrà supportato) ma non potrà avere lo stile Metro.l Per essere "Metro" una applicazione deve seguire un nuovo corso e nuove modalità (vedi sotto).
…prendere un bel respiro…
La modalità Metro-Style è completamente nuova ed ha una serie di interessantissime caratteristiche:
- Metro non è solo uno stile grafico ma un insieme di specifiche per interagire con il sistema operativo. Il Metro di Windows 8 è radicalmente differente (come meccanismo) da quello di Windows Phone.
- Ogni applicazione è isolata, può utilizzare solo ciò che viene permesso dall'utente. Lo sviluppatore richiede i permessi tramite un manifest che viene controllato da WinRT tramite un broker che funziona da supervisore sulle attività dell'applicazione. L'ambiente in cui gira l'applicazione non è una virtual machine, non è il .net framework
- Il deploy delle applicazioni viene fatto tramite un package che contiene tutto ciò che serve allo Store per installare l'applicaizone sulla macchina. Le discussioni sullo Store privato (aziendale) sono tutt'ora sotto discussione.
- Tra i meccanismi più interessanti ci sono i Contracts che permettono all'applicazione di dichiarare come vuole interagire con le altre app e il sistema operativo (leggere un feed, una pagina facebook, cercare, etc.)
WinRT:
- È il Windows Runtime che espone le funzionalità del sistema operativo in modo Object Oriented.
- Non è codice managed e non necessita del .NET Framework
- Ha delle "Projection" che permettono ai vari linguaggi di interagire con il sistema operativo (C++, C#, VB.Net, Javascript)
- I linguaggi managed sopra WinRT hanno sempre bisogno del CLR e il Framework fornito con Win8 è la versione 4.5
- WinRT è costruito con tecnologia COM e conserva tutti i relativi meccanismi (IUnknown, AddRef/Release, Apartment per i modelli di threading, la message pump per gestire le STA).
- WinRT semplifica molti concetti COM. Per esempio elimina i Connection Points per gli eventi e la IDispatch per permettere ai linguaggi dinamici di interagire con esso.
- Il type system di WinRT è ristretto ma più ampio di quello COM. Per esempio non esiste più il BSTR ma la stringa ha un layout di memoria analogo a quella usata dal CLR. Questo permette di evitare le copie durante il marshalling e quindi di esporre la stessa zona di memoria sia al codice nativo che managed senza penalizzazioni di performance.
- Tra le novità nel type system ci sono le collection (anche di tipo observable) che sono costruite/mappate automaticamente dalle projection.
- Le projection di C++ mappano direttamente su strutture compatibili alle STL (Standard Template Library).
- Le projection di WinRT sono customizzate linguaggio per linguaggio e permettono di fornire la migliore resa in performance.
- È possibile scrivere estensioni di WinRT per esporre codice nativo custom alle applicazioni ma queste estensioni sono private di una applicazione e non possono essere condivise (niente regsvr32)
- I Contratti di Metro sono esposti come interfacce COM e la maggior parte di developer non avrà mai bisogno di scendere a livello di interfaccia COM per fruirne
- A livello più basso esiste WinRL, una libreria C++ usata dal team di Windows per costruire tutto ciò che WinRT espone. Si ritiene che nessuno ne abbia bisogno (tranne il sottoscritto ovviamente)
- Il versioning di WinRT è basato sui concetti COM e prevede le estensioni che verranno nelle future versioni del sistema operativo
Il Framework.NET:
- È utile a chi preferisce avere i servizi del CLR (Garbage Collection, etc.) e di conseguenza verrà usato C# e VB.NET
- Non è indispensabile e perciò Javascript e C++ non ne hanno bisogno.
- Molte librerie della BCL (Winform, e tutto ciò che fa I/O su video, disco e quant'altro) non sono utilizzabili dalle applicazioni Metro perché queste devono utilizzare solo WinRT. Tra questo tutto ciò che concerne XAML perché il suo engine (Metro-style) è stato riscritto in codice nativo.
- Esiste un nuovo interprete XAML scritto in codice totalmente nativo che mappa i controlli XAML su quelli nativi WinRT
- Allo stesso modo (stile phonegap per chi lo conosce) i tag html5 vengono mappati sui controlli nativi WinRT
- XAML e Html5 sono paritetici, interscambiabili e siedono sopra l'engine grafico (basato su DirectX) che renderizza le applicazioni Metro
I Tools. Oltre a quanto già visto e detto nelle keynote:
- Visual Studio 11 include tutto ciò che serve per creare il package e pubblicarlo sul Windows Store che non è ancora disponibile.
- Lo store privato è in fase di definizione.
- WinDBG rimane ma tutte le sue funzionalità sono state integrate dentro Visual Studio
- Visual Studio 11 include i wizard per creare driver in kernel mode, user mode, i test (static analisys) e il remote debugging (compresi i reboot e l'installazione dei certificati sulla macchina remota)
Stay tuned. Questo è solo l'inizio.
Il mio commento? WOW, è fantastico e finalmente c'è la vera platform che aspettavo da Microsoft.
So che probabilmente ci saranno tante domande e commenti ma please abbiate pazienza perché qui a build il ritmo è frenetico.