Windows vznikaly od počátku v jazyce C, je proto logické, že i rozhraní pro psaní aplikací bylo (a dodnes je) v céčku. Toto Windows API, později nazývané Win16, nebylo nijak extra dobře navržené, ale protože Microsoft vždy kladl důraz na zpětnou kompatibilitu, vydrželo (v rozšířené formě nazývané Win32) až do dnešních Windows 7 (a jeho podmnožinu najdeme i v Metru).
COM, DCOM, COM+
S rozmachem objektově orientovaného programování začaly vznikat různé nadstavby i nad WinAPI, vesměs v C++. V 90. letech navíc začaly vznikat rozsáhlé objektové systémy založené na komunikaci mezi nezávislými komponentami, v podstatě každá důležitá IT firma měla svůj: Sun měl NEO (přejmenované DOE=Distributed Objects Everywhere), v IBM měli SOM (System Object Model), NeXTStep vytvořil PDO (Portable Distributed Objects) atd. Odpovědí Microsoftu na tento trend byl Component Object Model (COM).
Stejně jako se zkušení vývojáři smáli složitosti kódu pro „hello world“ ve WinAPI, dělali nyní to samé při porovnání COM a PDO, protože v prvně jmenovaném byl kód se stejnou funkčností cca. 10× větší. Dělat s COM bylo vskutku složité a i když později to usnadňovaly některé vývojové nástroje, nikomu tato technologie asi k srdci nepřirostla.
Variantou COM byl DCOM (distribuovaný COM) a nakonec COM+ spojující obě sesterské technologie.
.NET
Když soud zatrhnul Microsoftu upravit si Javu, pustili se v Redmondu do vývoje vlastního virtuálního stroje a jazyka nad ním. V roce 2002 představený .NET s novým C# a knihovnou BCL byly ve své první verzi jen obyčejnou kopií Javy, nicméně v následujících deseti letech byl vývoj značně dynamičtější než u Javy a dnes je Java minimálně o generaci pozadu.
Na přelomu tisíciletí se obecně predpokládalo, že .NET ve Windows nahradí WinAPI a jednoho krásného dne bude i jádro Windows běžet v řízeném kódu (takový experimentální systém v MS skutečně existuje). Bohužel (nebo bohudík) i Windows 7 jsou založené na WinAPI a od MS téměř žádné aplikace v .NET dodnes nemáme. Jiní vývojáři sice občas s něčím v .NET přijdou, ale problémy s instalací runtimu spolehlivě odrazují od .NET, má-li být výslednou aplikaci schopen nainstalovat každý běžný uživatel (o jejichž inteligenci se tu asi rozepisovat nemusím).
Azure a Windows Phone 7
Postavit Azure nad .NET bylo jistě velmi snadné rozhodnutí, Ballmer teď může tvrdit, že .NET je úspěšným projektem, protože na něm jede v rámci Azure spousta aplikací.Povolil tak tlak na WinDiv, jež vždy tíhla k nativnímu kódu, aby více využívala .NET, a zároveň má DevDiv (jež vyvíjí .NET a věci kolem) záminku k existenci.
Proti Flashi se snažil MS bojovat také pomocí .NET a vyvinul Silverlight. Ten se sice na webu neujal, ale našel uplatnění alespoň jako runtime pro Windows Phone 7. Relativní úspěch Azure se ale asi opakovat nebude, neboť ve Windows Phone 8 bude .NET nahrazenen novým WinRT.
WinRT a „nové“ C++
S trochou nadsázky se dá říci, že .NET měl být jednodušší a modernější náhradou za COM. Svým způsobem i byl a v serverovém prostředí bychom těžko hledali lepší konkurenci k Javě. Jenže dnešním trendem jsou mobilní technologie a jak v MS veřejně připouští, .NET se na relativně pomalá zařízení s omezeným množstvím paměti nehodí.
Nástupcem zastaralého WinAPI má být WinRT (jak jsem už zmínil, před několika lety to měl být .NET). WinRT je zbrusu nové jádro s API postaveným na, a teď pozor, staré dobré technologii COM. Největší nevýhodu COM, složitost pro vývojáře, má odstranit „nové“ C++ (píšu v uvozovkách, protože skutečné nové C++ je pro mě C++11), označované dříve WinC++ a nyní C++/CX. Jde o C++ s rozšířenou syntaxí pro COM komponenty (teď se ovšem nazývají WinRT komponenty). Z .NET se do WinRT dostal pouze formát metadat popisující rozhraní komponent. Existuje sice tzv. projekce nového WinRT do C# a VB, jenže jejich knihovna (BCL) je natolik omezená, že existující kód pro .NET bez úprav nepřeložíte.
Microsoft tak během deseti let udělal zajímavé kolečko. Opustil COM, vyvinul .NET a věci kolem, uplatnil jej v serverových produktech a, paradoxně, v operačním systému pro mobily, aby se nakonec pokorně vrátil k nativnímu a jen mírně modernizovanému COM. Nabízí se srovnání s Applem, který šel místo několika veletočů cestou evoluce a od koupě OpenStepu v roce 1996 pracuje stále se stejnou technologií, již postupně modernizuje. Místo bajtkódu se používají „tlusté“ binárky (fat binary), takže lze jeden soubor spustit na různých procesorech (dříve PowerPC a Intel, dnes to samé používají pro ARMv6 a ARMv7), runtime sice nezpracovává bajtkód, ale nemá žádnou nevýhodu oproti VM s JIT, správa paměti je pro programátora stejně nenáročná jako v .NET atd. Buďme rádi, že je Microsoft (nebo aspoň jeho akcionáři) schopen sebereflexe a vrací se k osvědčené technologii.
Protože jsem kdysi musel s technologií COM/DCOM dělat, dovolím si opravit větu "stará dobrá" na "stará špatná". Myslím, že snad není nic ohavnějšího, než tato nepřehledná a překombinovaná technologie.
Jinak odklon od .NET jako příznivec C++ a rychlých programů kvituji pozitivně.
Mrkvosoft již mnohokrát prokázal, že slovem vizionář se nemůže označovat ani náhodou. A souboj dvou koncepcí/sekcí uvnitř firmy to jen dokazuje.
Peněz na vývoj zbytečností, které sežerou v součtu milióny hodin práce jak jejich tvůrcům tak i všem, kdo je chtějí/musí používat, měl vždy víc než dost. Však mu jej ovce, používající Widle, zaplatí. Stačí občas vydat novou WOW-verzi a přestat podporovat starou, která už byla konečně jakžtakž zbavená bugů a se servicepacky mohla klidně fungovat dalších 10 let.
Problém není v tom, že obecně virtuální počítače jsou vyžrané, ale že vyžraný je dotnet. Je to obrovský, splácaný, nakynutý, vyžraný bastl. Např. javový VM funguje na kdejakým malým, podělaným telefonku a jde to (tím se nezastávám Javy jako jazyku). Takže předpokládám, že až bude existovat Winrt, bude to zase (jak je u MS zvykem) obrovský, splácaný, nakynutý, vyžraný bastl.
Správně je v článku řečeno, že .NET zvítězil na (web) serverech, tam se jasně chytil, vznik Azure to jen potvrdil. Takže kdo dělá s MS technologií server side záležitosti, tak je myslím v klídku, tam bych žádnou revoluci ve stylu WinRT nečekal. C# samotný je určitě životaschopná věc ať s MS nebo bez něj, Anders Hejlsberg odvedl a odvádí výbornou práci, poslední ukázky compiler as service jsou pecka. Spíš se divím, že pořád přežívá VB.
A jeste jedna vec ohledne WinRT. Jak "bohate" je vlastne to WinRT, neni urcene jen pro nejake primitivni tabletove-dlazdicove-mobilni aplikace ? Lze pomoci neho napsat nejakou opravdu komplexni GUI aplikaci typu MS Office ci ucetnictvi, nebo tam zbyva opet jen WinAPI pripadne .NET + WPF + kopa koupenych komponent ?
@22 Těžko říct, kam MS míří. Sotva si můžou dovolit vykašlat se na zpětnou kompatibilitu, takže Windows 8 bude v podstatě Windows 7 s dlaždicovou nadstavbou. Na zařízeních s ARM (většinou tablety, ale třeba i nějaké netbooky nebo ultrabooky, to ještě uvidíme) ale bude jen Metro, a tedy jen aplikace postavené nad WinRT. Apple vždy při změně procesoru dodával emulátor předchozí architektury, takže staré aplikace běžely pomalu, ale aspoň šly použít, než vývojáři svůj výtvor překompilují. MS nic takové neohlásil.
@22 Tady ale nejde o alternativu ani o zpetnou kompatibilitu, WinRT zkratka neni nastupcem WinAPI, jak bylo obcas prezentovano, pro komplexni desktopove GUI aplikace (a to je stale typicke vyuziti Windows na PC). Coz je fakt, ktery se asi ne dostatecne objasnuje a nahrava tak nekterym prvoplanovym blabolum typu ".NET konci". Ohledne .NETovych desktopovych aplikaci, dobrym prikladem ze to jde je napriklad Paint.NET
Spise se desim smeru, kterym se vydavaji konzumni edice Windows. Zda se, ze jako "workstation" system na praci s klavesnici a monitorem (vyvoj serverovych .NET aplikaci ve VS) bude v budoucnu pouzitelny asi jen Windows 2008 Server Standard z MSDN ve virtualu :-/
@22 Apple nemal problém dodať emulátor, lebo menil architektúru zo slabšej na výkonnejšiu (ppc -> intel). Staršie osx programy potom na výkonnejšom hw inej architektúry bežali relatívne uspokojivo v emulácii (emuláciu na iOS pod ARM neriešil, len nové natívne programy). MS si toto ťažko dovolí pri prechode z výkonnejšieho intelu na slabší, ale úspornejší arm.
Jestli ono to není trochu jinak. .NET Framework měl nahradit hromadu těch VBRUNů, MFC, OWL, VCL a dalších wrapperů nad Win32. A to se celkem povedlo, v .NETu dnes jede veliká spousta aplikací. Jenže zatím co napsat účetnictví v .NETu není problém, je daleko větší výzvou napsat HTML layout engine, databázi nebo multimediální codec. Tady byli vývojáři nadále odkázaní na Win32, navíc spojení Win32 a .NETu nebylo tak úplně bezešvé. Teď MS nahrazuje Win32 pomocí WinRT. Ve WinRT budou psány výkonově kritické komponenty, například ty databázové stroje, html layout engine, multimediální komponenty. Většina front-end aplikací bude nejspíš nadále psaná v .NETu/C#/VB.NET, který má lepší interoperabilitu se světem WinRT, než míval se světem Win32.
Ach jo, proc MS dela vzdy vse tak komplikovane...
BTW, nebylo by od Jabka chytrejsi, kdyby misto tlustych binarek davali instalace pro ruzne architektury, vse v ramci jednoho instalacniho media? Kompilovat se to stejne musi pro kazdou architekturu, tak proc to cpat do jedne binarky a ne do vice oddelenych, kdyz pulka toho pak akorat zabira misto a disku? Tlusta binarka by pak byl akorat instalator nebo cim se to na Jabku instaluje, ktery by vybral, co je potreba. Ze jsou dnes disky velke a relativne levne neni duvodem plytvat mistem. Zadny disk neni nadmerne velky a zadarmo.
@34 Vlastně to není tak komplikované, vývojáři mají konečně rozumně navržené OO rozhraní. To C++/CX kašle na standard, ale dokonale skryje všechny složitosti COMu, takže jednoduchostí kódu pak aplikace se neliší od .NETu. Celé to je velká změna, ale UI jde pořád naklikat ve VS, které taky vygeneruje potřebné třídy. A hlavně už má VS zase intellisense.
@36 COM pochází někdy z roku 1993 a pokud se nepletu, napsali ho v C (ani ne C++), takže to snad vysvětluje, proč je to celé tak složité k použití. Schovali to v C++/CX asi proto, že se jim to nechtělo celé přepisovat, tak vzali starý COM a vymysleli si nad ním svoji variantu C++. Netvrdím, že to je ideální postup, ale tlačí je čas, tak prostě udělali to, co bylo nejrychlejší na implementaci.
Ted jsem byl minuly mesic na seminari Delphi/C++Builder. Nativni kod pro Intel/ARM, pro Windows/iOS/MAC, pry bude i Linux, 32/64 bitu. Knihovny FireMonkey renderuji formulare na graficke karte, pokud menim velikost formulare, tak se mi plynule meni velikost fontu, graficke efekty jsou tam perfektni a bez programovani. To jsem docela koukal, co to umi, proti tomu je WinAPI a COM+ neprehledny moloch. Ukazky chodily na PC, MACach, tabletech, mobilech. K cemu mi bude COM+, kdyz to bude zase jen moloch pod Windows a za 2 az 3 roky ho zase poslou do kytek. Trapna a pomala komunikace pres COM je kapitola sama pro sebe. COM melo OS zbavit problemu s verzemi DLL, aby kdyz se zmeni DLL, tak s tim nebyly problemy, pokud nastala zmena v predavani parametru, bohuzel podle me je prinos nulovy. Typicka ukazka je vytvoreni zastupce na plose, parametry jsou ve strukturach, co jim pomalu nikdo nerozumi, je to mizerne popsane v helpu, jako kdyby k tomu nemohla byt obycejna funkce v C/C++.
Vývoj Javy není tak překotný, což je na druhou stranu dobře. Autoři Javy zastávaji názor, že překotným vývojem trpí robustnost jazyka/platformy. Je lépe, když je jazyk ne nějakou feature připraven od začátku, než když se tam dodatečně naroubuje. NET moc neznám, ale mám pocit, že MS se tam snaží nacpat všechny možné novinky které zrovna letí. A to neni dobře.
@39 "NET moc neznám, ale mám pocit, že MS se tam snaží nacpat všechny možné novinky které zrovna letí"
V podstatě to tak je, viz např. "dynamic" v .NET 4.0 (nebo await/async v nejnovější verzi). Ono se to hodí, problém je, že většina instalací .NETu je nějaká stará verze (na desktopech). Další z důvodů, proč se .NET šíře prosadil jen na serverech (tam si každý dá verzi, jakou chce).
@32 To se jim právě moc nepovedlo. Dřív na člověka vyskočila hláška, že si musí nainstalovat nějaký balíček, který měl pár mega. Dneska si musí s každou novou aplikací instalovat nějaký balíček, který má pár stovek mega. Protože nové aplikace nevznikají tak rychle jako nové verze dotnetů. Navíc dodnes ty instalátory neprovádí kumulativní instalace, některé verze se musí instalovat postupně, třeba postup .NET 3.5, .NET 3.5 SP1, .NET 3.5 SP1 critical update, .NET 4.0 (pak to teprve funguje).
Chudák uživatel!
@42 no mé zkušenosti vyplývají ze stížností různých uživatelů a v reprodukci jimi nahlášených problémů při hledání nejjednoduššího řešení jako problém vyřešit. V postu @41 jsem uvedl postup, jak na čerstvě aktualizovaném Windows XP SP2 nainstalovat .NET pro MusicJet :-)
@43: Od Windows 2003 obsahuje každá verze Windows nějakou verzi .NET Frameworku. Samozřejmě když máte starší verzi Windows, nový framework se musí doinstalovat. .NET Framework si může setup aplikace táhnout s sebou, nebo může uživateli nabízet linky na jeho download. Aktualizace se instalují automaticky přes Windows Update.
.NET 3.5SP1 lze stáhnout jako kumulativní package.
.NET 4 je nezávislý na .NET 3.5, takže se opravdu instaluje zvlášť. Je ovšem neobvyklé, aby jedna aplikace vyžadovala dvě verze .NET Frameworku.
@44: .NET Framework 3.5 podporuje běh aplikací psaných pro verze 2.0 a 3.0. Verze 1.1 podporuje běh aplikací psaných pro verzi 1.0.
@39 "Je lépe, když je jazyk ne nějakou feature připraven od začátku, než když se tam dodatečně naroubuje"
Souhlasim, Java byla od zacatku navrzena jako interpreter. JIT tam musel udelat az Symantec, protoze Sun byl zrejme neschopny takovou vec technologicky vubec uchopit. Stejne tak jsou tam velmi "dobre" udelane treba (ne)generika na urovni JVM atd ...
@39 "NET moc neznám, ale mám pocit, že MS se tam snaží nacpat všechny možné novinky které zrovna letí"
Spise maji cloveka, ktery je schopen s temi novinkami vubec prijit :-) Ne vsechno se mi taky libi, napriklad defaultni hodnoty parametru ve spojeni s pretezovanim je zmatek. Stejne tak ono "dynamic", to melo byt vypinatelne v kompilatoru podobne jako "unsafe" (protoze to svym zpusobem je). Jedine smysluplne vyuziti vidim v COM interop pro MS Office, coz je tak strasne rozhrani, ze se ho zrejme nikdy nepovedlo striktne typove popsat :-)
Vetsinu ostatnich novinek jako LINQ (obecne), WCF Routing nebo Task Parallel Library vnimam velmi pozitivne.
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×