V září uvolnila firma Embarcadero Technologies další verzi svých vývojových nástrojů označenou RAD Studio XE7. Podobně jako předchozí verze umožňuje vyvíjet podnikové aplikace pro 32bitová a 64bitová Windows, Mac OS X, iOS a Android, a to i pro několik z těchto prostředí zároveň. Jeho nejdůležitějšími součástmi jsou C++Builder a Delphi – vývojové nástroje založené na programovacích jazycích C++ a Object Pascal.
Edice
Podobně jako předchozí verze je i RAD Studio XE7 k dispozici v edicích Professional, Enterprise, Ultimate a Architect (nejsilnější). Lze pochopitelně zakoupit i samostatně Delphi nebo C++ Builder, a to ve stejných edicích jako celé RAD Studio.
Rozdíly mezi jednotlivými edicemi se týkají především rozsahu podpory vývoje databázových aplikací; podrobné informace o jednotlivých edicích lze získat na adrese, kde si lze stáhnout dokument obsahující šestadvacetistránkovou „matici vlastností“ (feature matrix).
RAD Studio XE7 je bezpochyby mocný nástroj pro vývoj obchodních aplikací. Stejně jako předchozí verze, i verze XE7 přinesla řadu zajímavých vylepšení.
Pro samostatné Delphi nebo C++Builder je k dispozici i edice Starter určená začínajícím programátorům, jež neobsahuje podporu databázových aplikací a pro komerční vývoj ji lze použít jen velice omezeně (příjem z vyvinutých aplikací nesmí přesáhnout 1000 USD ročně).
Tato recenze se opírá o první zkušenosti s edicí Architect.
Novinky
Nová verze RAD Studia přinesla řadu novinek; podívejme se na nejdůležitější z nich.
Knihovna pro paralelní počítání
V současné době není zvláštností mobilní telefon, jehož procesor má 8 jader. To je skvělé, ale aby bylo možno sílu takového procesoru využít, musí programy umět využít těchto jader – musí umět využívat paralelně běžící podprocesy (vlákna, thready). Základní nástroje, jako je třída TThread představující jeden podproces (vlákno), byly v C++Builderu i v Delphi od počátku; jejich účinné využití je ale poměrně obtížné, a proto přináší nová knihovna nástroje jako je fond podprocesů (thread pool), paralelní příkaz for, atomické operace apod. Tyto nástroje jsou součástí základní běhové knihovny (RTL), takže jsou dostupné ve všech platformách.
Fond podprocesů představuje fond – nebo možná zásobník – recyklovatelných podprocesů, kterému lze předložit úkoly ke zpracování. Fond zařídí přidělení těchto úloh volným podprocesům. Je reprezentován třídou TThreadPool, kterou najdeme v Pascalu v jednotce System.Threading, resp. v C++ v hlavičkovém souboru System.Threading.hpp. Metody této třídy umožňují mj. určit minimální a maximální počet použitých podprocesů a zařadit nové úkoly do fronty na zpracování.
Pro paralelní zpracování řady nezávislých výpočtů je k dispozici třída TParallel, jež obsahuje mj. statickou metodu For. Jejími parametry jsou počáteční a koncová hodnota celočíselného parametru tohoto „cyklu“ a ukazatel na funkci, kterou chceme pro každou z hodnot tohoto parametru zavolat.
Představte si například, že potřebujete nakreslit únikový fraktál. To znamená vzít jeden každý bod v okně, který bude obrázek obsahovat, a poměrně náročným výpočtem zjistit, zda jde o bod fraktálu nebo ne – tedy určit barvu, kterou se nakreslí. V okně o rozměrech 300 x 400 pixelů to znamená 120 000 výpočtů, které jsou navzájem nezávislé. Metoda TParallel.For umožní snadno tento výpočet rozložit mezi tolik podprocesů, kolik jich je právě k dispozici.
Poznamenejme, že některé propagační materiály hovoří o exponenciálním nárůstu výkonu, který může tato knihovna přinést. To je samozřejmě obrovská nadsázka; vše, v co můžeme doufat, je, že má-li náš počítač n jader procesoru, sníží se doba provádění paralelizovaných částí výpočtu na 1/n (tedy máme-li osm jader, sníží se v ideálním případě na jednu osminu), ale i to je skvělé.
Podpora propojení pomocí standardu Bluetooth
Jinou významnou novinkou RAD Studia XE7 jsou nástroje pro propojení zařízení pomocí standardu Bluetooth a Bluetooth LE; poznamenejme, že LE znamená Low Energy, tedy s nízkou spotřebou energie (na rozdíl od klasické technologie Bluetooth), ale také s nižší kapacitou přenosu dat. Potřebné nástroje najdeme v Delphi jednotce System.Bluetooth.Components, resp. v C++ v hlavičkovém souboru System.Bluetooth.Components.hpp.
Základem komunikace pomocí standardu Bluetooth je třída TBluetoothManager, jež poskytuje správu připojení, a třída TBloetoothDevice, jež slouží k reprezentaci jednotlivých zařízení. S její pomocí pak vytvoříme zásuvky (socket), jež obstarají potřebnou komunikaci.
Komunikace pomocí standardu Blouetooth LE je založena na komponentě TBluetoothLE, jež je v IDE k dispozici na paletě System. V tomto případě budeme pracovat se třídami TBluetoothLEManagera TBloetoothLEDevice. Tato možnost se však týká pouze Windows 8.
Ohnivé uživatelské rozhraní multiplatformních aplikací
Žhavou novinkou verze XE7 je nástroj FireUI – ohnivé uživatelské rozhraní. Jeho základem je univerzální návrhář pro různá cílová zařízení (Multi-Device Form Designer), obsahující MultiView – komponentu představující univerzální kontejner, tedy obrazovku mobilního zařízení nebo okno pod Windows. K tomu jsou k dispozici nástroje zajišťující chování komponent odpovídající zvolené platformě. IDE umožňuje při vytváření uživatelského rozhraní přepínat mezi jednotlivými cílovými platformami. Na počátku zobrazí univerzální formulář, do kterého můžeme vkládat komponenty a definovat jejich vlastnosti; později se můžeme přepnout do prostředí konkrétní cílové platformy a v ní definovat vlastnosti vložených komponent jinak.
Jinou příjemnou novinkou pro vývoj multiplatformních aplikací založených na knihovně FireMonkey je možnost definovat hlavní formulář (Master) obsahující společné nástroje pro všechny cílové platformy. Po různé cílové platformy pak můžeme definovat konkrétní podobu s různými komponentami. Jde v podstatě o uplatnění objektového principu dědění na úrovni vizuálního návrhu.
Podnikové mobilní služby
Enterprise Mobility Services (tedy Podnikové mobilní služby, ve zkratce EMS) představují nový nástroj pro vytváření propojených distribuovaných aplikací. Jejich základem je snadno šiřitelný server ve střední aplikační vrstvě, jenž zajišťuje uložení a správu stažitelných aplikačních programových rozhraní a modulů pro přístup k datům. EMS využívají otevřené a standardní technologie, jako je volání REST HTTP nebo datový formát JSON.
Instalace RAD Studia XE7
Pro instalaci RAD Studia XE7 potřebujeme PC s alespoň 1 GB RAM a procesorem Intel Pentium (nebo kompatibilním) běžícím alespoň na frekvenci 1,6 GHz. Tento počítač musí být vybaven operačním systémem Windows verze 7 nebo pozdějším. Potřebný diskový prostor se liší podle edice a pohybuje se v rozmezí 3–30 GB, vedle toho je v průběhu instalace potřebný i pracovní prostor pro vybalování souborů. Monitor by měl mít rozlišení alespoň 1024 x 768 pixelů.
Poznamenejme, že uvedené požadavky jsou opravdu minimální – podle mých zkušeností je RAD studio i na počítači s 2 GB RAM velmi pomalé.
Vlastní instalace
Podobně jako v případě předchozí verze máme na vybranou – RAD Studio lze instalovat z webu nebo si lze stáhnout obsah instalačního DVD. Ten si lze vypálit na DVD s dvouvrstvým záznamem; jednodušší však je připojit stažený soubor .ISO jako virtuální mechaniku a instalovat RAD Studio z ní.
Instalace je poměrně zdlouhavá (i při vysokorychlostním připojení pomocí optického kabelu mi instalace z webu trvala přes 90 minut). V průběhu jsem se nesetkal se žádnými problémy a také následná registrace proběhla hladce.
Cílové platformy
Integrované vývojové prostředí RAD Studia XE7 běží pouze pod Windows; už však víme, že umožňuje vyvíjet aplikace pro Win32, Win64, iOS, simulátor iOS a pro Android – tedy jak pro desktopové, tak pro mobilní platformy.
Mezi mobilními platformami ovšem chybí jakákoli z verzí Windows Phone – to se od předchozí verze nezměnilo; zřejmě stále nedošlo k potřebné dohodě mezi firmami Embarcadero a Microsoft.
Projekt
Po spuštění RAD Studia XE7 si zvolíme typ projektu, s nímž chceme pracovat. Máme na vybranou, zda použijeme Delphi nebo C++Builder. Základní nabídka pro oba tyto nástroje obsahuje aplikaci založenou na VCL, aplikaci pro několik různých zařízení (Multi-Device Application) a vytvoření balíčku nebo formuláře.
Zvolíme-li v nabídce položku Other, dostaneme se ještě k dalším typům projektů, jako je konzolová aplikace, aplikace pro Control Panel, vytvoření dynamické knihovny, balíčku, aplikace s rozhraním Metropolis založené na knihovně VCL nebo FireMonkey, aplikace s rozhraním MDI nebo SDI atd.
V okně správce projektů (Project Manager) je k dispozici mj. položka Target Platform, jež označuje cílovou platformu projektu. Správce projektů umožňuje přidat k existujícímu projektu další cílové platformy (pokud to typ projektu dovoluje) a pak mezi nimi přepínat a tak překládat týž projekt pro různé operační systémy.
Při vývoji aplikací pro mobilní platformy je rozumné mít k dispozici přístroj, na kterém budeme aplikaci zkoušet; lze sice využít trik založený na tom, že aplikaci určenou pro mobilní platformu přeložíme jako aplikaci pro Windows, ale to přece jen nemusí odhalit všechny problémy. Lze použít také emulátor systému Android, ale ten je neskutečně pomalý.
Programovací jazyky
Podívejme se nyní blíže na oba programovací jazyky používané v RAD Studiu XE7 k vývoji aplikací.
Object Pascal
Implementace Object Pascalu se v současné verzi téměř neliší od implementace v předchozích verzích, i zde však najdeme několik příjemných drobných novinek. Pro práci s dynamickými poli jsou k dispozici nástroje umožňující jejich spojování (podobné jako pro práci s řetězci), snazší je také inicializace a odstranění části dynamického pole. Podle dokumentace je také vylepšen překlad generických typů, takže vzniká menší výsledný kód.
Připomeňme si, že generické typy (šablony) v Object Pascalu jsou definovány velmi podobně jako v C++ – za běhu existují pouze specializace vytvořené překladačem dosazením konkrétních typů za typové parametry. Navíc (ve srovnání s C++) umožňuje Object Pascal v deklaraci generického typu specifikovat omezení typových parametrů (constraints), tedy požadavek, aby skutečný typ použitý při specializaci byl potomkem zadané třídy nebo implementoval zadaná rozhraní.
Poznamenejme, že syntax deklarace generického typu a jeho specializace v Object Pascalu se liší od syntaxe těchto konstrukcí ve Free Pascalu.
C++
Stejně jako v předchozí verzi, ani v RAD Studiu XE7 není podpora standardu ISO 14882 z roku 2011 ve 32bitovém překladači C++ stejná jako v 64bitovém překladači a v překladačích pro mobilní platformy. Připomeňme si, že důvodem je, že zatímco dvaatřicetibitový překladač BCC32.exe navazuje na překladače z předchozích verzí C++Builderu až po verzi 1 a možná až k Turbo C++ 1.0, čtyřiašedesátibitový překladač je založen na opensourcovém překladači Clang. Rozdíly, na které jsem narazil, jsou zcela stejné jako v předchozí verzi; jejich rozbor najdete v recenzi RAD Studia XE6. Pro pohodlí čtenáře zde uvedu alespoň tabulku srovnávající podporu syntaktických konstrukcí, které zavedl standard C++ z roku 2011 a které v předchozích verzích tohoto jazyka nebyly.
Překladače pro mobilní platformy se chovají stejně jako překladač pro Win64.
Poznamenejme, že na adrese najdete i popis některých situací, v nichž se některý z překladačů chová ne zcela standardně – tedy např. neohlásí chybu v případě konstrukce, která není syntakticky správná (ani v tom se situace od minulé verze nezměnila).
Knihovny pro C++
V C++Builderu máme k dispozici všechny knihovny, které jsou k dispozici v Object Pascalu v Delphi. Vedle toho však máme i knihovny, které jsou specifické pro C++ a nemají v Object Pascalu obdobu.
Součástí C++Builderu je standardní šablonová knihovna C++ (STL) od firmy Dinkumware. I zde se ovšem liší verze – a tedy i možnosti – podle cílové platformy. Pro Win32 je k dispozici verze 5.01 (stejná jako v RAD Studiu XE6), pro Win64 je to verze 6.40 (v XE6 to byla verze 5.30). To znamená, že ve 32bitovém programu nemáme k dispozici např. nástroje z STL pro práci s regulárními výrazy, vlákny nebo s hešovými tabulkami, které zavedl standard C++ z roku 2011 a které verze pro 64bitový překladač obsahuje.
Pro mobilní platformy není tato knihovna v současné verzi podporována.
Vedle toho je k dispozici volně dostupná knihovna Boost verze 1.55 pro Win64, verze 1.39 pro Win32 a MacOS. (Aktuální verze této knihovny má v současné době číslo 1.57.) Jde opět o implementaci standardní knihovny s řadou rozšíření; o mnohých z nich se předpokládá, že budou součástí připravovaného standardu C++ 2017.
Instalace knihovny Boost je volitelná a vyžaduje cca 4 GB diskového prostoru.
Závěrečná poznámka k programovacím jazykům
V tomto oddílu jsme pochopitelně nehovořili o všech změnách v překladačích C++ a Object Pascalu. Vyčerpávající přehled lze najít na webové stránce firmy Embarcadero Technologies.
Ohnivé a další nástroje
Na závěr se krátce podíváme na nástroje, o nichž jsme dosud nehovořili, ale bez nichž by povídání o RAD Studiu nebylo úplné.
Knihovna VCL
Pro mnoho programátorů stále platí rovnost Delphi = VCL, i když dnešní Delphi poskytuje řadu modernějších a účinnějších nástrojů. S touto knihovnou jsme se poprvé setkali v první verzi Delphi z roku 1995, brzy se objevila také v C++Builderu; byl to první snadno rozšiřitelný nástroj pro vývoj desktopových aplikací pro Windows pomocí vizuálních a nevizuálních komponent.
Není proto divu, že i tato knihovna je neustále vyvíjena a zdokonalována. Například od verze XE4 v ní můžeme používat technologii Live Bindings, o níž se zmíníme dále; ve verzi XE6 do ní přibyly mj. dva nové styly (Glossy a TabletDark), optimalizované pro dotykové tablety pro Windows, a možnost využít senzory, které jsme znali z knihovny FireMonkey. Ve verzi XE7 přibyla komponenta TJumpList, jež umožňuje vytvářet „Jump list” pod Windows, tedy seznam souborů, které aplikace naposledy použila. (Jde o novinku Windows 7, kterou vyvoláme stiskem pravého tlačítka myši na ikoně aplikace v pruhu úloh.)
IDE RAD Studia XE7 také poskytuje nástroj pro snadnou konverzi projektu založeného na VCL na projekt s rozhraním Metropolis UI.
Knihovna FireMonkey
V době, kdy RAD Studio vzniklo, dostávaly nástroje popisná jména, jako byla Knihovna vizuálních komponent (Visual Component Library, VCL). Dnes musí jméno pokud možno šokovat, ale na významu příliš nezáleží – může pocházet třeba z čínského horoskopu, jako je tomu u „ohnivé opice“, knihovny pro vývoj uživatelského rozhraní, jež byla ohnivou novinkou RAD Studia verze XE2.
Knihovna FireMonkey v lecčem připomíná knihovnu WPF firmy Microsoft nebo knihovnu JavaFX v Javě 8, je ale multiplatformní. Velkou novinkou verze XE6 byla mj. možnost vyvíjet aplikace založené na této knihovně v C++Builderu i pro platformu Android (předtím jsme tuto možnost měli pouze v Delphi).
Jednou z novinek verze XE7 je možnost uložení stavu formulářů mezi relacemi. Nová je i služba pro automatické nastavení vlastností uživatelského rozhraní podle cílového zařízení.
Vedle toho byl vylepšen průvodce vytvářením mobilních aplikací založených na této knihovně a také podpora propojení mezi mobilními a desktopovými aplikacemi pomocí technologie AppTethering – nyní zahrnuje jak wifi, tak Bluetooth.
LiveBindings
Technologie LiveBindings, tedy „živé vazby“, byla původně navržena pro novější knihovnu FireMonkey, lze ji však používat i pro VCL. Zastavíme se u ní krátce, i když se její možnosti v současné verzi neliší od možností v XE6, neboť seznámení s ní může čtenářům, kteří RAD Studio nepoužívají, ukázat některé zajímavé aspekty vývoje multiplatformních aplikací.
Komponenty v knihovně VCL používaly původně pouze binární komunikaci, jejíž formát byl dán použitou platformou (Windows) a využíval jejích služeb. Při vývoji multiplatformních aplikací však je třeba, aby komunikace nezávisela na platformě, a proto přineslo RAD Studio XE2 technologii LiveBindings, jež využívá komunikace pomocí textových řetězců. Přesněji, jednotlivé komponenty mohou zveřejnit hodnoty svých vlastností ve tvaru řetězců. Program si udržuje seznam všech definovaných výrazů v komponentě typu TBindingsList a s jeho pomocí zajišťuje jejich vyhodnocování a zpracování. I když je možné programovat toto propojení „ručně“ a lze tuto technologii využít dokonce i v konzolových aplikacích, typicky se propojení komponent programuje vizuálně pomocí nástroje vestavěného do IDE. Lze ji používat i pro databázové komponenty a umožňuje, aby libovolná komponenta automaticky sledovala změny dat (byla „data aware“, jak to uměly vybrané komponenty ve VCL už dříve).
Přístup k datům
RAD Studio XE7 se nezřeklo žádné z předchozích technologií pro přístup k datům, i když nejstarší a dnes už nedoporučovanou knihovnu BDE (Borland Database Engine) určenou pro práci se stolními databázemi si musíme stáhnout z webových stránek firmy Embarcadero samostatně. Součástí RAD Studia XE7 ale stále jsou komponenty dbExpress pro přístup k SQL serverům.
Máme-li na vybranou, využijeme „ohnivé“ komponenty FireDAC. Jedná se o knihovnu založenou na velmi podobné filozofii (pokud jde o použití), jako byla knihovna BDE, i když má řadu nových možností. Najdeme zde komponentu TFDConnection, jež reprezentuje připojení, TFDQuery představující dotaz, TFDTable a mnohé další, které reprezentují obvyklé operace s databázovým serverem. Tyto komponenty podporují technologii LiveBindings, takže programování přenosu dat je zpravidla stejně snadné jako při použití starších technologií.
Knihovna FireDAC umožňuje připojení k řadě datových zdrojů. Dokumentace uvádí následující výčet: InterBase, SQLite, MySQL, SQL Server, Oracle, PostgreSQL, DB2, SQL Anywhere, Advantage DB, Firebird, Access, Informix, DataSnap, Enterprise Mobility Services a další.
Novinkou verze XE6 byl mimo jiné nativní ovladač pro databázový server Informix pod operačními systémy Windows a Mac OS a podpora optimalizované serializaci ve formátu JSON komponentou TFDMemTable. Přibyla také podpora knihovny FireDAC DataExplorerem v IDE RAD Studia.
Ve verzi XE7 přibyla mj. podpora práce s velkými binárními objekty – bloby – v knihovně FireDAC a ovladač pro databázový server IBLite pro mobilní i desktopové aplikace.
Parametry připojení jsou nyní zobrazovány v Object Inspectoru v podobě záznamu. Komponenty TFDScript, TFDBatchMove, TFDDataMove, TFDBatchMoveTextWriter a některé další byly přesunuty na samostatnou paletu FireDAC ETL.
Součástí instalace je i vývojářská edice databázového serveru InterBase XE3, jež umožňuje až 20 uživatelů a 80 logických připojení. Vedle toho tu najdeme už zmíněný server IBLite; licence umožňuje tento server neomezeně šířit. Také server IB To-Go, který plně podporuje 256bitové šifrování dat i přenosů, a to i v mobilních prostředích, je součástí instalace RAD Studia XE7.
App Tethering
Také tato technologie není novinkou verze XE7, přesto se u ní krátce zastavíme. Umožňuje snadno vyhledat jiné aplikace podporující App Tethering (na jiném nebo na stejném počítači), spouštět vybrané akce cizích aplikací podporujících tuto technologii a sdílet data mezi aplikacemi. Je založena na dvou základních komponentách (a několika dalších). Komponenta TTetheringManager slouží k vyhledání dalších aplikací podporujících tuto technologii; komponenta TTetheringAppProfile slouží k definici akcí a dat, která bude naše aplikace sdílet s ostatními.
Poznamenejme, že anglické slovo „tether“ znamená v češtině řetěz na uvazování dobytka a název technologie App Tethering chce zřejmě naznačit, že jde o velice silnou vazbu mezi aplikacemi.
Co dodat
RAD Studio XE7 je bezpochyby mocný nástroj pro vývoj obchodních aplikací. Stejně jako předchozí verze, i verze XE7 přinesla řadu zajímavých vylepšení. Jeho nejsilnější stránkou je možnost vývoje aplikací pro více platforem s jediným zdrojovým kódem.
Jeho nevýhodou pro nového uživatele je, stejně jako u minulé verze, poměrně vysoká cena: Jedna licence nejsilnější edice Architect určené špičkovým softwarovým architektům stojí v současné době 131 100 Kč, cena jedné licence edice Enterprise (jež je typickým nástrojem běžného podnikového vývojáře) je 117 400 Kč, nejslabší edice Professional stojí 52 700 Kč. Za samotné Delphi nebo C++Builder v edici Architect zaplatíte v současnosti 116 500 Kč, za edici Enterprise zaplatíte 97 800 Kč, za edici Professional je to 29 100 Kč. Edice Starter Delphi nebo C++Builderu stoji 5 900 Kč.
To znamená, že osamělý vývojář si je nejspíš nedovolí; na druhé straně pro větší firmu to může být užitečná investice.
Autorem recenze je Miroslav Virius z Katedry softwarového inženýrství FJFI ČVUT.