Ne nebojte se, známé Java IDE nekoupil Microsoft a nadále Vám bude fungovat na Windows i bez .NET Frameworku. Jde o to, že před delší dobou vývojáři z Eclipse Foundation, respektive ta skupina, která se zabývá vývojem GUI toolkitu SWT vyhlásila podporu WPF pro Eclipse na Windows. Když jsem to uslyšel, trochu jsem se podivil a zajímalo mě, co za tím stojí, zde je příběh.
Eclipse je Java IDE a je postavené na Java GUI toolkitu SWT. Než se o něm zmíním tak to chce krátkou amatérskou exkurzi do světa Java GUI. SWT totiž vznikl zejména jako reakce na nespokojenost s knihovnou Swing, která je přímo součástí Javy od Sunu a měla být po neslavném začátku s AWT jediným univerzálním a mocným GUI toolkitem pro Javu. To skutečně je, protože veškeré widgety jsou napsány v podstatě celé v Javě a využívají jen minimum z GUI podpory operačního systému na kterém běží. Všechny vlastnosti a chování GUI komponent je napsáno a v podstatě tedy emulováno v Javě - je to high level toolkit. Z toho plyne sice robustní API, ale vzhled stejný napříč platformami a relativní neohrabanost a nekompatibilita oproti nativním aplikacím hostujícího systému. Uživatelé zvyklí na nativní aplikace systému mohou s používáním Swing aplikací mít trochu problémy. Nejznámějším zástupcem Swing aplikací je IDE Netbeans.
SWT, potažmo IBM, které za ním stojí, se tedy vydalo jinou cestou, cestou nativních low level widgetů. Spousta komponent je založena na nativních widgetech prostředí. Jsou to tedy v podstatě Java wrappery s množstvím C++ kódu nad nativními komponentami hostitelského GUI. Proto dialogová okna vypadají jak je uživatel zvyklý, na Windows jako Windows okna, na Linuxu s GTK jako GTK okna, mají také díky množství C++ lepší rychlost reakce než Swing komponenty. Velmi se tedy využívá možnosti Javy spolupracovat s nativním prostředím přes C++ pomocí JNI - Java Native Interface. Na druhou stranu díky tomu low levelu není v SWT samozřejmostí uvolňování prostředků jako ve Swingu, z toho plynoucí možné memory leaky, nemáte také tak robustní a košaté API. Zástupcem a vlajkovou lodí SWT je IDE Eclipse. SWT také není součást Java SDK, a musíte si je doinstalovat sami a s ním i pár nativních dynamických (pro windows DLL) knihoven vámi zvoleného operačního systému.
No a teď chlapíci z Eclipse Foundation oznámili, že bude SWT podporovat WPF. WPF (Windows Presentation Foundation) je relativně nový přístup ke GUI od Microsoftu, které v mnohém staví na DirectX, využívá různé 3D vychytávky, vypadá správně eye candy, podporuje deklarativní definice GUI přes XML atd. Ale je tu jeden zádrhel. Není a nikdy nebude nativním windows GUI toolkitem. Jeho API je dostupné pouze prostřednictvím .NET Frameworku. Z klasického C++ máte tedy smůlu. Zde je vidět chytrá snaha Microsoftu rvát pokud možno všechno směrem k .NET a s tím spojených C#, VB.NET. S Javou to udělal také šalamounsky, v začátcích nalákal Java vývojáře na J# a pak potichu tuto technologie stopnul. No chudák ten, kdo nad tím něco postavil, teď aby to pomalu předělal do C#. Jak si tedy s tím lidé s IBM poradili? Microsoft ne moc nahlas nabízí jedinou možnost jak v nativním prostředí použít věci s .NET Frameworku, tím je jakýsi hybrid C++/CLI. Microsoft ho sám moc nepropaguje, vše se točí okolo C#, ale množství C++ Windows aplikací ho k vytvoření tohoto hybridu pravděpodobně donutilo. Jeho dalekou budoucnost ale také nevidím moc růžově, nicméně jinou možnost ani vývojáři Eclipse neměli.
Když si tedy stáhnete třeba odtud zdrojové kódy SWT pro WPF, tak uvídíte dost C++/CLI kódu, makefile kde se linkuje .NET knihovna PresentationFramework.dll a mnoho dalšího z .NETu. Výsledek je ten, že si můžete pustit Eclipse, které z části pojede částečně nativně na Windows, částečně na .NET Frameworku a většinou na Javě. Jaká je asi cesta nějakého WPF widgetu do Javového Eclipse IDE? Myslím že proleze mnoho temných rohů než se dostane na světlo. Fakt nevím jestli tohle stojí za tu snahu a jaké s tím budou do budoucna problémy. Už jen to, že většina dokumentace k WPF a .NETu se bude točit okolo C#, takže přepsat to do C++/CLI a pak šup s tím do JNI Javy, ugh, osobně mi to připadá totálně šílené.
Komentáře (1)
"Chudáci s J#" většinou už dávno na C# přešli, protože J# pořád zůstával někde na úrovni Javy 2. Cílem J# nebylo ani tak přetáhnout Javovské programátory, jako si je udržet (přesněji udržet si J++ programátory) a pomalu je přeučit na C# nebo VB.
Převést zdrojáky z J# do C# lze bleskurychle různými nástroji. Naučit se nový lepší jazyk také není až takový problém a tak dnes nikdo J# nepoužívá. Microsoft prostě ukončil podporu produktu, o který už není zájem.
Komentáře jsou uzavřeny.