Budoucnost .NET

26. 9. 2011 10:43 (aktualizováno) zboj

Při nedávném představení Windows 8 a nového Windows Runtime (WinRT) Microsoft oznámil, že tzv. „Metro“ aplikace bude možné psát v C++ (s rozšířeními Component Extensions, označované C++/CX), C#, Visual Basicu a Javascriptu (v kombinaci s HTML5). Tím jistě potěšil vývojáře, kteří v minulých letech přešli na .NET a před konferencí BUILD se obávali, jak Microsoft s .NET v budoucnu naloží. Přesto je role .NET ve Windows 8 značně odlišná, než tomu je ve Windows 7.

Nové OO rozhraní WinRT je napsané v C++ a vývojář, pokud v C++/CX definuje třídu, ve skutečnosti vytváří COM objekt. Novou knihovnu (třídy a rozhraní ve jmenném prostoru Windows::…) je tak možné z kódu v C++/CX přímo využívat. WinRT nemá automatickou správu paměti (garbage collector, GC), každý objekt má čítač referencí a je uvolněn, když tento klesne na nulu (což nastane, když už není nikde v programu potřeba). Kód v C++/CX se překládá do nativního kódu (podle typu procesoru).

Program v C# (nebo jiném jazyce nad .NET) se přeloží do bajtkódu, jak jsme v prostředí .NET zvyklí, knihovnu ale používá z WinRT. Takový program běží sice v CLR (Common Language Runtime), které mu poskytuje např. GC, ale ve skutečnosti jsou veškeré třídy COM objekty (s čítačem referencí) a CLR je pouze jakýmsi můstkem k WinRT. Konkrétně to například znamená, že GC sice automaticky uvolňuje objekty, ale jedná se jen o wrapper nad WinRT, který sníží nativnímu objektu, na který odkazuje, čítač referencí na nulu a tím ho zruší.

Z výše uvedeného vyplývá, že pro Metro je lepší psát aplikace přímo v C++/CX, protože C# (a ostatní .NET jazyky) vyžadují k běhu CLR, přičemž knihovna se využívá nativní. Každému je asi zřejmé, který způsob je efektivnější (hlavně na mobilních zařízeních je paměťová náročnost aplikací důležitá).

Hodně vývojářů tak pravděpodobně přejde k C++/CX a .NET se přesune na vedlejší kolej. Tak jako dříve bylo C++/CLI vedlejší (a používané v podstatě jen k „zabalování“ nativních knihoven pro aplikace v .NET), stává se teď C++/CX (jež s C++/CLI sdílí syntax) první volbou.

Sdílet