Titulek článku jsem si půjčil z Channel9. Je nepřehlédnutelné, že C++ se pomalu vrací na výsluní. Na přelomu tisíciletí jej nahradily tzv. řízené (managed) jazyky. Co si budeme povídat, C++ toho tehdy hodně postrádalo, a právě v té době se výkon počítačů dostal na úroveň, kdy si vývojáři mohli dovolit obětovat trochu výkonu za vyšší produktivitu.
Myšlenka mezikódu nebyla nová, měl jej kdysi dávno například Smalltalk. Java však tuto techniku se svým virtuálním strojem zpopularizovala. Sun přitom už jedno kvalitní objektově orientované prostředí měl. Nazývalo se OpenStep a vyvinul je společně s NeXTem pro své počítače. Nakonec se však rozhodli pro vlastní jazyk a prostředí. U Sunu (teď už Oraclu) OpenStep dál žije v některých standardních knihovnách Javy.
Sun učinil s Javou první krok, Microsoft se svým .NETem však změnu trendu završil. Vznikl jazyk C# (ve svých raných verzích kopie Javy) a Microsoft začal vývojáře tlačit k přechodu na .NET. Kromě svých vývojářů, v dnešních Windows 7 moc aplikací v .NET není a Windows 8 se od .NETu odklání definitivně.
Během posledních deseti let ve stínu Javy a .NET se však C++ podstatně změnilo. Alexandrescu objevil sílu šablon (při návrhu většiny jazyků se specifikuje, co má jazyk umět, a to se pak implementuje, do C++ však kdysi přidali mocné nástroje jako šablony a přetěžování operátorů a teprve dodatečně se zjistilo, co všechno se s tím dá dělat), k tehdy chudé standardní knihovně STL přibyl boost, z nějž se stal de facto (a letos v rámci C++11 do značné míry i de iure) standard, navíc C++ dostalo lambda výrazy a spoustu dalších užitečných vylepšení.
Když Apple vydal první SDK pro iPhone, mnozí kritizovali nemožnost použití Javy pro vývoj aplikací. Na pro většinu tehdejších vývojářů neznámé Objective-C se všichni dívali s nedůvěrou (někdy i despektem) a kroutili hlavou nad „zastaralostí“ jazyka, knihoven a Xcode. O pár let později (rozuměj dnes) Microsoft při práci na OS pro tablety opouští .NET a vrací se k C++, konkrétně ke své starší technologii COM.
Nedávné skokové vylepšení C++ a STL v kombinace se změnou požadavků na software (trend přechodu ze stolních počítačů na mobilní zařízení s méně výkonným procesorem, menší operační pamětí a velkým displejem žeroucím baterku) učinily nativní kód opět nejlepší možnou cestou vývoje OS a aplikací. Jak Steve Sinofsky nedávno uvedl na svém blogu, méně paměti znamená vyšší výdrž baterie, proto nebude garbage collector a paměť může být poloviční (přičemž systém zůstane plynulý). Moderní syntax se vyrovná C# i Javě, takže produktivita programátora neutrpí. Automatické počítání referencí hravě nahradí GC (vývojový tým clangu ukázal, že to jde). A tak dále…
Tak jako C# vyšlo z C++ a Javy, do C++11 bylo přijato mnoho syntaktických a knihovních konstrukcí z řízených jazyků. V roce 2011 je C++ (opět) moderním jazykem na úrovni C#, Javy a Objective-C.
Zkuste si použít třeba lambda výrazy a concurrency runtime. Velmi rychle narazíte. Je fajn, že do c++ dodali, co tam dodali, ale je to poměrně k ničemu, když to v současných kompilátorech navzájem nespolupracuje. Takže dostat c++ na úroveň c# bude ještě trochu práce vyžadovat.
Já bych spíš věřil tomu, co se psalo na nějakém blogu někoho blíže MS. Je to politika. Vyznělo to tak, že .NET vs. C++ je vlastně interní souboj dvou divizí uvnitř MS. Vývojářské - .NET a Windows - C++ a podle mě to tak prostě bude. Tyto dvě spolu asi už delší dobu soupeří a nemají se moc v lásce. Tomu odpovídá i to, že samotná Windows asi ani žádný .NET kód nikdy moc neobsahovala. Win divize tak nakonec asi přesvědčila manažerské vedení, že pokud se má společnost posunout dále, musí to být skrze Windows a tím pádem se musí vsadit zejména na C++. Kdyby v Microsoftu provedli před delší dobou nějaké spojení těchto dvou interních světů a začali Windows a .NET více integrovat a .Net divize by získala převahu, tak bychom dnes naopak mohli sledovat dominanci .NETu všude, včetně tabletů - o tom že to jde svědčí úspěch Javy v Androidu - a směřování vývoje OS někam k Singularity - managed OS.
o tom že natívny kód je efektívnejší všetci dobre vieme. ostatne je o tom každý druhý článok na tomto blogu. keby si programátori vyberali Jazyk len podľa efektivity všade by sa používal asembler. Ja si myslím že imperatívne jazyky tejto doby ako C#, Java a C++ sú už dnes za zenitom a používajú sa len zo zotrvačnosti a budú sa používať stále menej (tak ako kedysi populárne fortran cobol a basic) a do budúcnosti budú mať čoraz väčšie uplatnenie jazyky ako Scala, F# a Clojure.
@5 tak to ani nahodou :), duvodu je vic, jeden je zminovany v @7 a to jsou rozsahle knihovny a frameworky napsana a nejlepe fungujici prave v techto jazycich.
Java jede skoro na vsem a proto ma oproti multiparadigmatickym jazykum velkou vyhodu,
C je zase relativne transparentni co se tyce prekladu do assemberu,
a C++ to je uz v dnesni dobe v podstate multiparadigmaticke :) ....
Je treba si uvedomit, ze programovaci jazyky se vyviji podle potreb stroju ne podle potreb lidi a uz vubec ne podle potreb teoreticke informatiky. To bychom vsichni pouzivali SmallTalk. Kdyby byla hlavni platforma soucasnosti nejaky ten zasobnikovy procesor, tak vsechno vypada jinak :)
9. súhlasím s tým že programovacie jazyky sa vyvýjajú podľa potrieb strojov, a práve dnes v dobe viacjadrových CPU, GPGU a cloudov, v dobe keď je dopyt po paralerných a distribuovaných algoritmoch IMHO bude potreba multiparadigmatických / funkcionálnych jazykoch narastať. scala sa kompiluje do bytecode javy a F# do CIL a je plne kompatibilné so všetkýmy .NET knižnicami.
@8 Ještě dlouho budou koexistovat, ale .NET se ocitá na vedlejší koleji. .NET je skvělý pro Azure a (narozdíl od Javy) pro GUI aplikace pod Windows XP/Vista/7, ale na tabletech a smartphonech je absolutně na nic (použitelný, ale overkill žeroucí paměť). Ti, co v dnešní době tak obhajují .NET na mobilních zařízeních, jsou příliš tupí na C++. Aspoň se oddělí zrno od plev :-)
@5 O tom silně pochybuji, jelikož neznám nikoho z mladší generace, kdo by se více zajímal o funkcionální jazyky, takže programátoři nebudou -> jazyky se používat nebudou.
Jinak se mi hrozně líbí, když nějací chytrolíni tvrdí, že nejpoužívanější jazyky jsou již za zenitem, škoda jen, že není nic, co by je v příštích několika letech mělo možnost nahradit...
Koukám, že většina lidí sem píše komentáře, aby ukázali, že jsou taky "programátoři", ale jejich znalosti jsou na úrovni studenta prvního ročníku informatiky, takže tu ze sebe jen dělají blbce. Doporučuju přečíst si, co je "runtime". To je totiž pojem ortogonální k pojmu "knihovna". Na Windows i Linux můžu po instalaci GCC psát programy v Objective-C, ale jediné použitelné třídy budou Object a NXConstantString. WinRT je runtime (ono "CX" v názvu C++/CX) plus sada tříd pro práci se soubory, sítí atd.
BTW zajímalo by mě, kolik lidí, kteří se tu vyjadřují k .NET vs. WinRT, si vyzkoušelo něco napsat v preview Visual Studia 2011. Moc asi ne...
Autor se zabývá vývojem kompilátorů a knihoven pro objektově-orientované programovací jazyky.
Přečteno 37 773×
Přečteno 26 419×
Přečteno 24 931×
Přečteno 21 277×
Přečteno 18 929×