S novým WinRT se zásadně mění vnitřnosti celé platformy .NET (pro nové „Metro“ aplikace, které poběží i na procesorech ARM). Použil jsem kus kódu z reálné výpočetně náročné aplikace k porovnání rychlosti C++/CX a C#.
Aplikace v nativním kódu je (nepřekvapivě) rychlejší, zajímavé ale je, že zhruba dvakrát, což je podstatný rozdíl. Na vině je zřejmě mezivrstva CLR mezi aplikačním kódem a WinRT, která u aplikace napsané v C++/CX chybí.
Co z toho vyplývá? Pokud píšete aplikaci, která kromě UI obsahuje také netriviální aplikační logiku, je jasnou volbou C++/CX. .NET se pro „Metro“ aplikace, je-li prioritou rychlost, hodí méně, nemluvě o vyšší spotřebě paměti díky plně automatické správě paměti. Pokud tedy chcete mít svou aplikaci rychlou (ARM je stále ještě pomalejší než procesory od Intelu) a schopnou běhu na pozadí (pokud spotřebujete příliš mnoho paměti, operační systém vám ji ukončí), která zbytečně neždímá baterku, je jasnou volbou C++/CX (snad s výjimkou aplikací typu „stáhni z webové služby informace o počasí a zobraz sluníčko, mráček a číslo s teplotou“).
Je dost pravděpodobné, že .NET skončí jako Java, tedy na servrech.
Doplnění: Při porovnání C++ a C++/CLI (resp. C++/CLI při volbě /clr a /clr:pure) je nativní kód pomalejší (v .NET 4.5). To ovšem může být implementací knihovny STL (ve druhém případě se používá novější STL.NET). Vzhledem ke složitosti testovaného kódu (strojový překlad) lze tedy konstatovat, že JIT překladač je dost povedený. Ve WinRT je evidentně brzdou mezivrstva CLR. V .NET 4.0 stejné porovnání provést nemůžu, kód se nepřeloží kvůli chybě překladače (naštěstí je v preview VS 2011 opravená).
Flame: nekdo mi vysvetlete, jake vyhody maji .NET prostredi a CX prostredi oproti nativnimu C++. Setkavam se zejmena s .NETem casto, a v zasade jsou s tim problemy. Velke, pomale a nutnost pri nasazeni u uzivatele instalovat rozsahle a zpravidla nekolikrat zaplatovane knihovny, takze kolikrat vyzaduje nasazeni odbornika (BFU nema sanci to zvladnout). Jako priklad uvedu klienta sluzby MusicJet, ktery vyzaduje instalaci dvou verzi .NET a jeden jejich SP a jeden balik z Windows Update a to cele trva na paterni siti neco pres hodinu
Pomalost .NETu je ciastocne mytus, sposobeny podla mna tym, ze je v nom lahke programovat a tak to robi kazdy "jouda", ktory nechape implikacie jednotlivych postupov.
Osobne som .NETom nadseny, robil som pred tym c++, ale s .NETom vyvyjam ovela rychlejsie a .. na vsetkych paltformach mam napr ten isty DateTime, momenalne dokonca testujem pouzitelnost monotouch a monodroid pre iPhone a android...
moznost zdielat kod pre azure, windows, adroid ci iphone je velmi prijemna
@4
Ako uz PH napisal, rychlejsi vyvoj, nemusim riesit tisic inych veci popri pisani kodu, beha to vsade, kde je .Net nainstalovany a prostredie Visual Studio je uzasne.
A teraz to mylim vazne, Visual Studio je zatial to najlepsie IDE na programovanie, s ktorym som sa stretol(aj najdrahsie) a preskakal som ich vela. Spustim, neriesim, programujem a zobrazuje mi to len veci, co potrebujem, nie dalsich tisic inych okien.
Este som sa nestretol s tou aplikaciou MusicJet, zda sa mi to divne, ze to tak zle bezi, kedze .Net verzie su medzi sebou kompatibilne, teda vyssia je kompatibilna s nizsou.
Co sa tyka aplikacie, ktoru vyvijam, tak staci dvakrat kliknut na nu, povolit instalaciu a clovek nic viac neriesi, je to typ ClickOnce Application, pri ktorej sa nevybera ani miesto instalacie, ono si to zvoli niake nahodne a vsetko si ponastavuje podla poteby :) Dokedy som to nevidel, nevedel som, ze nieco tak uzasne existuje, da sa to velmi jednoducho pouzit na updaty, co bol vaecny problem u nas skorej, kedze aktualizacie vychadzaju dennodenne.
Teraz nechcem vyzerat ako zastanca Windowsu ani spustit flame, sam mam doma aj Linux a android na telefone :)
@10 MusicJet je ClickOnce aplikace a přesto to dobře funguje jen v aktuálně záplatovaných Windows 7, starší verze se naproston nechytají a vyžadují instalaci .NET 3.5, .NET 3.5 SP1 a .NET 3.5 nějaký fix z Windows Update a .NET 4.0 v tomto pořadí. Zkoušel jsem to různě zkrátit a bez úspěchu. Sorry, ale fail, nicméně netuším, kteří soudruzi udělali chybu, jestli Microsoft, nebo autoři aplikace (ale podle mě spíš Microsoft)
Jinak technologie ClickOnce by mohla bez problémů fungovat s nativními aplikacemi, jenže to nespadá do Microsoftích plánů a přestav.
@5 Z mého úhlu pohledu to není o jazyku, ale o knihovnách. Valná většina "vlastníků platforem" si tu svou platformu vyšperkovává vším možným. C++ nikomu nepatří a proto neexistuje autorita, která by chtěla tenhle jazyk rozšiřovat o nové věci, které by přecházely do defacto standardu. OpenSource komunity v tom pak akorát dělají bordel.
Jistě, je to o knihovnách. S C++0x (teď už vlastně C++11) a novou verzi STL má C++ velmi dobrou knihovnu. Co chybí je standardní GUI (i když Qt nebo wxWidgets jsou celkem použitelné). Každopádně jazyk jako takový je skoro stejný, C++ a C# jsou téměř identické (C++ je mnohem mocnější díky šablonám, za což ale platíme pomalejším překladem). Velká výhoda C++ je absence GC (což u Windows 8 pochopil už i Microsoft a GC do WinRT díky Bohu nezahrnul).
Líbí se mi citát: "In 2001, .NET replaced COM. In 2011, COM replaced .NET" :-)
@12 neviem si predstavait, ze by microsoft spravil chyby v .net platforme, potom by nesli dalsie tisicky app a robili by podobne blbiny. Okrem toho, ako som povedal, vyssie verzie su kompatibilne s nizsimi, takze ak nieco ide na 2.0, tak potom (takmer) isto aj na 4.0 (stale to tak moze byt, ako vravis a potom je to niaky rare bug)
Hej, som za, aby ClickOnce fungovalo aj s nativnimi aplikaciami, vela chyb, co robia bezny uzivatelia pri instalacii/odinstalovani/updatovani by sa odstranila a kludne by sa to potom mohlo dat aj jave a inym cudzim technologiam.
@12 MusicJet je ClickOnce aplikace, jenže s ní je mnohem více problémů, než bych si původně myslel. Každá aktualizace hlásí, že se nepodařila, a přitom program samotný se aktualizoval a funguje v pořádku. Co se týče instalace .NETu, tak .NET Framework 4 Client Profile by měl stačit, jsou to základní komponenty .NET Frameworku verze 4. (Ve Visual Studiu jde nastavit, pro kterou verzi .NETu se bude aplikace sestavovat, což je nejspíš případ i této aplikace.)
Pokusím se to ještě otestovat na virtuálním stroji s XP.
<i>Pro ondra.novacisko.cz:</i>
Tak jsem otestoval jak instalaci .NET Framework 4 Client Profile, tak instalaci samotného MusicJetu na VM s Windows XP SP3 (host Windows 7 x86, Pentium 4 3,2GHz; bez podpory HW virtualizace).
Instalace .NET Framework 4 Client Profile zabrala zhruba 9 minut a to jsem mimo VM instaloval ještě další balík. Jsem zvyklý, že instalace takových .NET věciček běžně trvá až půl hodiny, tohle bylo docela rychlé.
A MusicJet? Ten byl do půl minuty v PC a spuštěný. :-)
Autor se zabývá vývojem kompilátorů a knihoven pro objektově-orientované programovací jazyky.
Přečteno 36 203×
Přečteno 25 362×
Přečteno 23 796×
Přečteno 20 178×
Přečteno 17 875×