Windows 8 a WinRT

19. 9. 2011 21:03 (aktualizováno) zboj

Microsoft nedávno poodhalil budoucnost Windows 8. Základem aplikací je nové běhové prostředí (Windows Runtime, zkráceně WinRT). WinRT je implementované v C++ a aplikace nad WinRT v C++ budou nejefektivnější (.NET jazyky můžou k WinRT přistupovat přes wrapper, stejně jako JS). Kód pro WinRT se píše v jazyce zvaném C++/CX (=C++ Component Extensions), což je C++ s rozšířenou syntaxí vypůjčenou z C++/CLI. Paměť je spravována deterministicky (chybí garbage collector), ale automaticky. Třídy ve WinRT jsou vlastně poněkud upravené COM objekty, jejichž čítač referencí je aktualizován samočinně direktivami překladače (to má výhodu oproti nedeterministickému GC, ale vývojář si musí dávat pozor na cykly v odkazech mezi objekty).

Je celkem jasné, proč Microsoft zvolil tento postup. C++ je efektivnější. Nejde ani tak o rychlost, kód C# běží díky JIT kompilaci v podstatě stejně rychle, ale o paměť. I ten nejdokonalejší garbage collector má vyšší nároky na paměť než C++ s manuálním (byť pro vývojaře chytrým překladačem generovaným) uvolňováním nepotřebných objektů. Stejnou cestu zvolil ostatně od počátku i Apple ve svém iOS, díky čemuž si nejnovější iPhone i iPad bohatě vystačí s 512 MB operační paměti. (Nejnovější překladač clang/LLVM nabízí tzv. Automatic Reference Counting, tedy ani v Objective-C pro iOS už se nemusí vývojaři starat o aktualizování čítače referencí u objektů).

Zde podobnost s iOS nekončí. WinRT nápadně připomíná běhové prostředí (runtime) pro Objective-C (které nepochází původně od Applu, ale Brada Coxe, jenž tento jazyk navrhl jako objektově-orientované rozšíření jazyka C). Jde o podobnost náhodnou, protože Microsoft  s WinRT jen oprášil a trochu upravil svou „prastarou“ technologii COM a upravil pro ni překladač pro C++, díky ní ovšem můžeme očekávat hladký běh aplikací (a hlavně nižší spotřebu baterie) psaných pro Metro na zařízeních s pomalejším procesorem a menší pamětí.

Poměrně důležité je (za předpokladu, že WinRT bude po dokončení k dispozici pro Windows Phone), že bude možné psát aplikace v C++ pro všechny důležité mobilní platformy (kromě zmíněného WP tež pro iOS, Blackberry (ať už Blackberry 6/7 nebo QNX) i Android). Stále zůstává dost odlišností (zejména v UI), ale alespoň část kódu bude přenositelná.

NB: Protože občas se vyskytnou nejasnosti, zdůrazňuji, že aplikace pro WinRT nejsou založené na .NET, i když rozšířená syntax se téměř neliší od C++/CLI, které naopak překládá pouze pro .NET (byť s možností nativního kódu ve smíšených binárkách). Může se tedy stát, že naprosto stejný kód půjde přeložit kompilátorem pro C++/CLI i C++/CX, i když výsledek (a sémantika) se budou značně lišit.

Sdílet