V souvislosti s nedávným představením Windows Store se opět píše o Windows 8. V únoru má být k dispozici beta verze a vývojářům bude umožněno nabízet v novém obchodě aplikace (v beta verzi zatím pouze zadarmo). Protože jádro Windows 8 je zcela překopané, neuškodí shrnout si některé poznatky o novém systému. Nebudu psát o novém UI (Metro), jež je věcí osobního vkusu. Zaměřím se na to, jak chce Microsoft zvýšit výkon aplikací běžících nad novým Windows Runtime (WinRT).
Nativní kód
Staré, ale stále používané Win32 API má nahradit WinRT. Jedná se o objektově orientované API napsané v C++. Rozhodování mezi Win32 a .NET dopadlo stejně, jak kdysi církev vyřešila problém dvou papežů: zvolili třetího.
WinRT je založené na technologii COM, již už všichni považovali za překonanou. V případě komponent z WinRT API (a komponent třetích stran) se jedná o staré dobré COM objekty zkřížené s metadaty z .NET. Tato metadata (pro účely WinRT je překladač zapisuje do souborů s příponou winmd) umožňují využití nativních komponent z řízeného kódu mnohem efektivněji než přes P/Invoke.
Vývojářům nabízí Microsoft pro Metro API v C++. Nebyl by to ale Microsoft, aby si nevymyslel něco extra. Vzniklo tak C++/CX (CX=Component Extensions), které rozšiřuje syntax C++ právě o ony renovované COM komponenty. Syntax je z větší části převzata z C++/CLI (pokud nesnášíte nestandardní rozšíření, můžete psát v čistém C++ s využitím knihovny WRL).
Dobrou zprávou je, že Visual Studio 2011 (současné preview) podporuje velkou část nového standardu C++11. Oficiální stanovisko Microsoftu je, že vývojáři by měli psát svůj kód v čistém C++ a rozšířenou syntax používat je pro komunikaci s novým API nebo s UI (které se definuje v již používaném deklarativním jazyce XAML).
Paměť
Jak na svém blogu sdělil Steve Sinofsky, Microsoft došel po „rozsáhlém výzkumu“ k závěru, že v telefonech a tabletech je nejlepší mít co nejméně paměti. Ne že by to zrychlilo systém či aplikace, ale šetří se tak baterie. Celé WinRT je proto navržené tak, aby pamětí neplýtvalo. Předně nemá garbage collector. To lze samozřejmě obejít (UI lze napsat v .NETu nebo Javascriptu), ale narozdíl od CLR není GC součástí runtimu.
Asynchronní API
Náročnější operace se dají ve WinRT provádět pouze asynchronně (např. práce se soubory). Nové rozhraní IAsyncOperation<> se přitom stará o předávání výsledků. C# nově dostalo klíčová slova async a await, aby mohli vývojáři psát vlastní asynchronní metody způsobem, na který jsou zvyklí (sekvenčně).
Pokud přesně nevíte, o co jde, doporučuji podívat se na NodeJS a jeho způsob práce s callbacky. Trochu zamrzí, že Microsoft ignoroval možnosti, které poskytuje nové C++11 (např. std::future) a vytvořil si vlastní, nekompatibilní API.
Jak je na tom .NET?
.NET se ve Windows 8 dostává na vedlejší kolej, ale pořád je možné jej volitelně využívat (CLR může běžet nad WinRT, ale standardní API, tedy knihovna BCL, je osekané). Pokud máte hodně kódu, bude snadné upravit jej (pokud se netýká UI) pro .NET v Metru (úplně beze změn to bohužel většinou nepůjde).
Předpokládám, že Microsoft napíše nový JIT překladač pro procesory ARM, protože v současné době běží .NET na ARM neuvěřitelně pomalu, zatímco na Intelu řádově stejně rychle jako nativní kód. Jenže .NET Micro Framework je okrajová záležitost, kdežto na Windows 8 sází MS svou budoucnost. Doufám, že to dopadne lépe než na Androidu, kde podle vyjádření společnosti ARM běží nativní kód vygenerovaný jejich vlastním překladačem 4× rychleji než kód nad Dalvik VM.
NB: Že to celé funguje, dokazuje preview verze Win8, která bootuje podstatně rychleji než Windows 7 (ovšem zatím jí toho dost chybí) a vystačí si s podstatně menším množstvím operační paměti.
@8 Tak zrovna u netbeans se vůbec nedivím, taky mi to neběželo moc plynule. Jinak s tím C++11 to je zajímavá myšlenka, asi si fakt nemůžou dovolit čekat (i když na druhou stranu návrh C++0x tu byl už dost dlouho). Navíc Microsoft rád tlačí vlastní řešení (zde má k tomu i objektivní důvod - interoperabilitu s ostatními jazyky nad WinRT).
Tak to je peklo. Zacinam mat pocit ze nieto chce silou mocou znicit MS.
Mozno sa tam podarilo prepasovat neakeho linuxaka.
Takze ActiveX, COM, DOT.NET, C#, C++/CLI. Zarezeme WinXP, WinCE.
Zrusime kompaktibilitu s Win32 a hlavne, za kazdu cenu menime WinAPI a to napriec verziami, servis packmi a platformami.
Vazne ma to unavuje. Naucil som sa robit pre WinCE vymysleli WP7. Dotlacil som svoje vedomosti k tomu aby som packal C# a C++/CLI a zistujem ze je to k nicomu. To ze som sa niekedy venoval ActiveX to pomlcim. Som aj rad ze sa to dalej nepodporuje.
Celkom zavidim javistom. Ty s tym co vedia dokazali vydrzal pekne dlho.
Tak snad Qt ked uz som sa to naucil trochu vydrzi.
Jaaaaaj nekupi Nokiu MS !!!
No nevim, zariznout WinApi asi tak snadno nepujde. Prece kompatibilita s dosavadnimi aplikacemi. Dokonce se vsadim, ze funkce GetMessage, TranslateMessage, DispatchMessage tam budou do skonani sveta. To samy zakladni window managment (RegisterClass a CreateWindowEx). Dokonce se vsadim, ze cokoliv objektoveho bude stale nadstavba nad timhle zakladem)
@11 Je to fakt, že oproti Applu v technologiích Microsoftu člověku ujede vlak mnohem rychleji. Kdyby se člověk z roku 1996 (kdy Apple koupil NeXT) dostal do současnosti, nebyl by v programování pro platformu Apple úplně ztracen, kdežto pro platformu Microsoftu pravděpodobně ano.
Jinak opět díky za hodnotný článek.
Od roku 1981 rostly a rostly hardwarove naroky tvurcu tzv. operacnich systemu od M$. Po totalnim pruseru s WOW, trestuhodnym zanedbanim mobilniho trhu se Microsoft zjevne zalekl a jeho reakce jsou proto mozna az prilis divoke. Jeste nedavno vsichni babolisti hlasali, ze netbooky vytlaci PC, ted se to same pise o tabletech. Snaha udelat univerzalni system pro PC a netbooky mi pripada trochu divoka a krecovita, ale v ramci moznosti celkem zajimava. Byl bych velice smutnej, kdyby diky preslapum M$ nakonec trh ovladli jablona(r)ciste z Apple.
Pro enterprise trh je to ale take dalsi zprava, ze je potreba uvazovat mnohem vice o pouzitych technologiich a platformach. Neni mozno spolehat na to, ze bude Microsoft podporovat 20 let stare API. Neni ani mozne spolehat na to, ze nejaky Microsoft vubec za 20 let bude. Je to dobra sance pro nektera opensource prostredi, jako je Mono a predevsim Java.
@15 argumentovat tím, že je to 20 let staré API je nesmysl. V jiným oboru jsou technologie ještě starší. Vemte si třeba auta. Dnešní motory jsou sice dost jiné, než ty před 100 lety, ale princip se za tu dobu nezměnil. API se dá přírovnat k normě, principu, zatímco konkrétní implementace ke konkrétnímu motoru.
@14 Dobrá poznámka, Apple na přikoupeném OpenStepu postavil nejen OS X, ale i iOS, navíc na něm dlouho jel jejich webový server (WebObjects). Dodnes jdou cestou evoluce, ne revoluce, ale pokrok za těch patnáct let je značný (nový rychlý překladač, rozšíření ObjC o mnoho moderních vlastností apod.).
@15 On to nebude tak úplně univerzální systém, resp. jsou to dva systémy v jednom. Opravdu univerzální bude jen Metro (pojede na ARM), ovšem aplikace bude i tak nutné překompilovat pro různé procesory (sem s "fat binary"!).
@16 Že to stojí na COM usnadňuje Microsoftu implementaci. Nemají času nazbyt. Nicméně pokud celý COM zůstane pod pokličkou, nemusí to vývojáře běžných aplikací znepokojovat. Např. aplikace pro Windows Phone 7 (kde se používá podmnožina .NET a XAML) lze překompilovat pro WinRT. Uvidíme, kam až to MS dotáhne. BTW VS2011 už Intellisense pro C++/CLI má (dokonce i v C++/CX, takže někdy Intellisense hlásí chybu, ale v C++/CX se kód přeloží bez problémů).
@24 Umíš anglicky? http://www.infoq.com/news/2011/09/WinRT-API
Google is your friend ;-)
@25 Jasne ze viem anglicky.
To summarize, WinRT does not replace .NET, nor does it compete with .NET – and the same applies to Win32. You can write server and client applications using .NET, including WPF and Silverlight. You can write server and client applications using C++, including Win32 and MFC. However, if you choose to believe in the Metro way, you can write Metro applications for Windows 8 using .NET languages or using C++ or using JavaScript, with a consistent set of APIs exposed through WinRT.
Este raz to opakujem WinRT nema nahradit Win32 API. Zucastnil som sa prednasky o programovani na Win 8 a tam sa toto dost rozoberalo. Vo windows 8 bude teda aj WinRT aj Win32 API.
@26 Ve Windows 8 na ARM ale Win32 API nebude. Myslím, že tak je myšlen i název toho článku na infoq.com (na Intelu pochopitelně zůstane i staré API, byla by blbost ho zrušit). Bavil jsem se s lidmi z MS (v USA) o SQLite a oficiální stanovisko je, že SQLite v Metru nepojede, protože závisí na WinAPI, které tam nebude. Je tam jistá podmnožina (pár procent funkcí), pro kterou teď SQLite portují. Běžná aplikace by ale na toto API sahat neměla. (Současné preview jede jen na Intelu a WinAPI tam je kompletní, ale výsledná aplikace neprojde verifikací, tj. nemohla by do storu a hlavně by vůbec nešla přeložit pro ARM).
@27 Tazko povedat ako to bolo myslene to by sme asi potrebovali stanovisko autora. Ja som chcel hlavne reagovat na to co teraz casto vidam a to ze WinRT ma nahradit Win32 API. O situaciu na ARM som sa velmi nezaujimal ale na x86 je to tak ako pisete a teda Win32 API ostava aj nadalej dokonca myslim, ze v nom urobili dost zmeny ale neviem ci si to teraz nepletiem. Predpokladam ale, ze na ARM budu mat nejake ine rozhranie a nie len WinRT pretoze z toho co som pochytil na prednaske bolo zrejme, ze WinRT bude urcene na klientske aplikacie (zaujimavy fakt bol, ze sa nedali vypnut len uspat).
@28 WinRT v Metru nejede nad WinAPI (nemají ani smyčku zpráv), seznam funkcí (hodně omezený) z WinAPI, které je možné volat, je někde na webu. Obávám se, že žádné "jiné rozhraní" tam nebude, v podstatě člověk bude psát přímo nad WinRT (mají tam kolekce, přístup k UI a k HW jako např. kamera, akcelerátor apod.) nebo v osekané verzi BCL (v C# a VB). Tak alespoň vypadá současné preview, v únoru bude beta, tak se dozvíme víc (a třeba pod tlakem komunity ještě něco změní/přidají).
@29 Tak to by ma potom zaujimalo ako by to bolo s pc postavenom na ARM kedze vsetky programy by museli byt postavene nad WinRT, ktore je sice moderne ale znacne osekane kvoli svojmu urceniu. Predpokladam ze na ARM bude mat WinRT viac menej tu istu funkcionalitu ako na x86 alebo mate nejake blizsie info?
Autor se zabývá vývojem kompilátorů a knihoven pro objektově-orientované programovací jazyky.
Přečteno 36 200×
Přečteno 25 361×
Přečteno 23 795×
Přečteno 20 177×
Přečteno 17 874×