Niet allemaal even waar.
"WinRT is de naam van de Windows API die Win32 vervangt". -> vervangt niet
"WinRT maakt .NET, als extra laag bovenop Win32, overbodig" -> .net is een framework, winrt is een OS API en runtime
"De voordelen die .NET heeft zitten nu in WinRT" -> appels met peren
WinRT is een nieuwe generatie API's voor Windows. Het is gebouwd bovenop COM en hergebruikt bestaande Win32 APIs. Alle WinRT API's zijn asynchroon. Het vervangt dus ook niet Win32 (op dit moment).
Maar het vervangt zeker niet .NET !
.NET is o.a. een framework voor programma's in o.a. C#/VB. Het is het .NET framework dat achter de schermen Win32 en COM gebruikt. En gebruik je .NET (Core) in Win10's UWP apps, dan wordt Win32, WinRT en COM gebruikt. UWP apps gebruiken zoveel mogelijk WinRT, maar Microsoft heeft wat uitzonderingen voor Win32 toegestaan.
UWP apps kunnen gemaakt worden in C++, JavaScript, iOS, Android Java en uiteraard Microsoft's .NET. De meeste UWP .NET apps hebben genoeg aan het .NET framework voor logic en UI. Je kent misschien XAML voor UI in WPF (onderdeel van .NET). Bij UWP apps is het een iets andere XAML want deze XAML zit in het UWP platform zelf. Ook C++ apps kunnen dus XAML voor UI gebruiken.
Wil je echter diepere integratie in je app met het OS dan met het .NET framework mogelijk is, dan kun je WinRT aanspreken.
En in UWP .NET apps heb je voor code hergebruik .NET Class Libraries (wat DLL assemblies worden) en WinRT Runtime Components. Verschil is dat de .NET libs alleen met .NET apps gedeeld kunnen worden en WinRT componenten met alles wat WinRT APIs (= ECMA 335 metadata format) begrijpt. Voorbeeld, een UWP C++ app kan een in C# geschreven WinRT runtime component aanspreken.
Ook wil ik nog verder inzoomen op .NET. Microsoft heeft in het verleden allerlei varianten en versies van .NET uitgebracht. Het grote .NET Framework voor de PC, Compact Framework voor Windows CE/oude Windows Mobile, .NET Micro Framework, Silverlight voor web, Silverlight voor Windows Phone en Silverlight voor Windows 8.1 Store Apps.
Maar er is nu ook .NET Core. Dat is een nieuw ontwikkeld framework, open source (GitHub), andere APIs, in kleinere delen opgesplitst (die weer op NuGet staan) en cross-platform (Windows, Mac, Linux). Het oude .NET Framework moest je 1x globaal installeren op je PC (en je moest misschien hopen dat afdeling IT dat wilde doen en dat alle programma's bleven werken) terwijl nieuwe programma's op basis van .NET Core de .NET Core DLLs in dezelfde folder nodig hebben. O.a. vanwege de mogelijkheid dat je je eigen .NET Core variant kan compileren, heeft elke app dus zijn eigen kopie van het framework.
UWP .NET apps gebruiken .NET Core. Veel UWP apps zullen dezelfde versie van .NET Core DLLs gaan gebruiken. Gelukkig is de Windows Store zo slim om bestanden te ontdubbelen. En wanneer je apps installeert of update, worden bestanden die je al hebt overgeslagen. En dan nog .NET Native. Alle UWP .NET apps gebruiken .NET Native. Dat is een pre-compilatietechniek waarbij de MSIL-tussenlaag wordt overgeslagen. Net zoiets als ngen.exe. De performance wordt dan ong 60% beter en je app kleiner, want delen van .NET Core die je niet gebruikt worden overgeslagen. De cloud-kant van de Windows Store zorgt ervoor dat je een binary krijgt die prima werkt op de processor die je gebruikt. Als app developer geef je de store dus de MSIL en de store geeft eindgebruikers native assemblies.
Wil je een website maken met ASP.NET? ASP.NET 4 gebruikt het grote .NET Framework 4.6. Bij de aankomende ASP.NET 5 kun je kiezen of je dit op .NET 4.6 of op .NET Core wil draaien. Kies je Core, dan is er een kleiner framework, maar ben je cross-platform.
Wil je een desktop applicatie met .NET maken (Win Vista-Win 10)? Gebruik het .NET Framework 4.6. Kies voor een WPF met XAML, WinForms of Console user interface.
Wil je een phone app maken voor Windows Phone 7.8/8 (wie wil dit?) Gebruik .NET Silverlight for Windows Phone.
Wil je een store app maken voor Windows 8, 8.1 of 10? Gebruik .NET Silverlight voor Windows Store.
Wil je een store app maken voor Windows 8.1 EN Windows Phone 8.1? Dat heet Universal App Platform UAP (wat vervangen is door UWP in Win10). Maak dan een Windows Universal App. Dit gebruikt geen 'silverlight' en gebruikt wel WinRT.
Wil je een store app maken in .NET voor Windows 10, Windows 10 Mobile, XBOX One, Surface Hub, IoT (zoals Raspberry Pi)? Dat heet Universal Windows Platform UWP. UWP werkt op alle nieuwe Microsoft OS-en en gebruikt WinRT met API contracts en adaptive XAML layout. Met API contracts kan je app vragen wat het OS allemaal kan en welke APIs beschikbaar zijn (in plaats van.. is dit Windows 10 of is dit een phone?). Adaptive XAML betekent dat je de UI aanpast aan een klein of groot scherm, wel of geen touch etc. Dit is wat de toekomst heeft.
Wil je een store app maken in iets anders dan .NET voor Windows 10, Windows 10 Mobile, XBOX One, Surface Hub, IoT? Dan kun je ook een UWP app maken met C++ of een HTML/JavaScript website. Ook C++ en JavaScript kunnen WinRT APIs aanroepen. Kies je voor HTML, dan kun je de HTML/JS/CSS/overige bestanden meeleveren in de UWP package voor de store, of je verwijst naar naar resources op het web... dan moet je device wel online zijn natuurlijk.
Wil je een app maken die met 1 codebase werkt op Windows 8.1, Windows Phone 8.1, Windows 10 (UWP), Android, iOS EN web browser? Dat zou helemaal cool zijn. Dat kan met Apache Cordova. Cordova apps zijn HTML/CSS/JS. In de JS doe je feature detection als dat echt nodig is. Bijvoorbeeld als UWP, doe dan native alerts via WinRT, anders een web browser alert. Dankzij Cordova/Phonegap kun je in JS de device hardware zoals GPS en camera ook gebruiken. Je kopieert de HTML/CSS/JS/overig naar een webserver voor de web site, je verpakt het met Cordova naar een APK voor Android of IPA voor iOS, naar een XAP voor Windows Phone 8.1 of naar een UWP package voor Windows 10. Grote nadeel is dat het een hybrid app is, niet native. Heel vaak prima performance op mobile devices, maar ja niet zo goed als native.
[Reactie gewijzigd door lvmeijer op 23 juli 2024 17:49]