Test: RAD Studio XE6



RAD studio XE6 je nová verze vývojových nástrojů od firmy Embarcadero Technologies. Podobně jako předchozí verze umožňuje vyvíjet v C++ a v Pascalu podnikové aplikace pro 32bitová a 64bitová Windows, Mac OS X, iOS a Android, a to i pro několik 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. V následujícím článku se na RAD Studio XE6 velmi podrobně podíváme.

Edice

RAD Studio XE6 je k dispozici v edicích Architect (nejsilnější), Ultimate, Enterprise a Professional (nejslabší profesionálně použitelná). Jednotlivé edice se liší především v rozsahu podpory tvorby databázových aplikací; podrobné informace o jednotlivých edicích lze získat na adrese [1], kde si lze stáhnout pětadvacetistránkovou „matici vlastností“ (feature matrix).

Tento článek je založen na prvních zkušenostech s edicí Architect.

Poznamenejme, že je k dispozici i edice Starter samostatného Delphi nebo C++Builderu určená začínajícím programátorům; její možnosti jsou ovšem velice omezené a pro komerční vývoj ji lze použít jen velice omezeně.

Novinky

Znáte-li předchozí verzi, jistě vás zajímá, jaké novinky verze XE6 přinesla. Podívejme se alespoň na nejdůležitější z nich (podle mého názoru).

Důležitou, i když poměrně nenápadnou novinkou je oprava celé řady chyb z předchozích verzí (údajně více než 2000). Také vzhled integrovaného vývojového prostředí se poněkud změnil; nemohu si pomoci, úvodní formulář mi připadá poněkud pouťový (obr. 1).

Obr. 1: Úvodní stránka RAD Studia Obr. 1: Úvodní stránka RAD Studia

 

Ovšem první opravdu významnou novinkou verze XE6 podpora programování pro operační systém Android v C++. Tím se vyrovnala podpora platforem v obou jazycích (v předchozích verzích byl C++Builder vždy o něco pozadu za Delphi). Nyní mohou vývojáři používající C++Builder vytvářet aplikace stejných typů a pro stejné platformy jako vývojáři v Delphi.

Nová verze RAD Studia také přináší komponenty pro webové služby založené na technologii cloud, označované jako BaaS (Backend as a Service). Jde o komponenty pro správu uživatelů, generování notifikací apod.

Knihovna VCL nyní podporuje moderní styly Windows 7 a Windows 8.1, komponenty pro náhledy a interakce s aplikacemi s více okny, komponentu Taskbar a mnohé další.

Jednou z velkých novinek je tethering, tedy zřetězení – nebo spíše propojení – aplikací běžících na různých platformách pomocí protokolu HTTP a architektury REST. Slouží k tomu komponenty TTetheringManager a TTetheringAppProfile. Díky tomu má nyní vývojář možnost rozšíření aplikací pro Windows o doprovodné mobilní aplikace.

Nelze opominout ani možnost přístupu k řadě databázových serverů pomocí komponent FireDAC. Tyto komponenty nyní poskytují přístup k serverům InterBase, SQLite, MySQL, SQL Server, Oracle, PostgreSQL, DB2, SQL Anywhere, Advantage DB, Firebird, Access, Informix a k řadě dalších lokálních, vnořených, mobilních a jiných databází.

Přibyla také podpora DirectX 11.

Instalace

Zde máme na vybranou dvě možnosti: RAD Studio lze instalovat z webu nebo si lze stáhnout si obsah instalačního DVD, tedy soubor .ISO. Velikost tohoto souboru lehce přesahuje 5 GB, takže pokud si ho chceme vypálit, musíme použít DVD s dvouvrstvým záznamem. Jednodušší ovšem je připojit soubor .ISO jako virtuální mechaniku a instalovat RAD Studio XE6 z ní.

Při instalaci jsem se nesetkal se žádnými problémy. Také následná registrace proběhla hladce; snad jen registrační formulář byl o něco jednodušší než u předchozích verzí.

Cílové platformy

Integrované vývojové prostředí RAD Studia XE6 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. Jak Delphi, tak C++Builder by samozřejmě mohly generovat nativní kód pro toto prostředí; ovšem použití některých běžných knihovních funkcí, například funkce pro úklid zásobníku při vzniku výjimky, způsobí, že takováto aplikace bude pod systémem Windows Phone označena jako neautorizovaná a nebude spuštěna.

Pokud vím, jediným vývojovým nástrojem, který umí generovat fungující kód pro toto prostředí, je MS Visual Studio, jež používá ve svých aplikacích jistý druh zabezpečení. Uvidíme, zda se časem podaří firmě Embarcadero získat tuto možnost i pro RAD Studio – nepochybně jde „jen“ o obchodní problém.

Projekt

Po spuštění RAD Studia XE6 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 založenou na VCL s grafickým rozhraním Metropolis UI pro Windows 8, desktopovou aplikaci založenou na knihovně FireMonkey, mobilní aplikaci založenou na knihovně FireMonkey aplikaci založenou na knihovně FireMonkey s rozhraním Metropolis UI. 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 atd. (jde v podstatě o nabídku projektů, které jsme v Delphi a v C++Builderu znali před příchodem verzí XE).

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 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 sice 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 XE6 k vývoji aplikací.

Object Pascal

Implementace Object Pascalu se, jak se zdá, v současné verzi neliší od implementace v předchozích verzích. To znamená, že zde najdeme mj. možnost deklarovat generické typy (šablony). Filozofie generických typů v Object Pascalu je podobná jako v C++: Za běhu existují pouze specializace vytvořené překladačem dosazením konkrétních typů za typové parametry.

Object Pascal umožňuje 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++

Soulad implementace jazyka C++ podle standardu ISO 14882 a jazyka C podle standardu ISO 9899 byl v C++Builderu vždy velmi dobrý. Proto mne zajímalo, jak je na tom současná verze s implementací aktuální verze standardu jazyka C++ publikovaného v roce 2011.

Překvapením pro mne bylo, že překladač pro Win32 se liší od překladačů pro Win64 a pro mobilní platformy. (Je to těžko pochopitelné, ale je to tak.) Některé z rozdílů, na které jsem přišel, shrnuje následující tabulka. Další rozdíly se týkají voleb překladače, hlášení některých chyb při překladu šablonových konstrukcí a některých syntaktických nekorektností, které dvaatřicetibitový překladač toleruje a čtyřiašedesátibitový nikoli.

Win32 Win64 Android
Příkaz foreach (nové for) Ne Ano Ano
Klíčové slovo auto Ano Ano Ano
Jednotná inicializace Ne Ano Ano
Nové typu řetězců a znaků Ano Ano Ano
Reference na r-hodnotu Ano Ano Ano
Klíčové slovo nullptr Ne Ano Ano
Statické aserce Ano Ano Ano
Diakritika v identifikátorech Ano Ne Ne
Silné výčtové typy Ano Ano Ano
Delegování konstruktorů Ne Ano Ano
Dědění konstruktorů Ano Ne Ne
Metody deleted Ne Ano Ano
Metody default Ne Ano Ano
Sperifikátor override Ne Ano Ano
Sperifikátor final Ne Ano Ano
Inicializace nestat. složek tříd v deklaraci Ne Ano Ano
Nová syntax deklarace funkce Ne Ano Ano
Identifikátor __func__ Ano Ano Ano
Specifikátor declspec Ne Ano Ano
Lambda-výrazy Ne Ano Ano
Specifikátor noexcept Ne Ano Ano
Specifikátor constexpr Ne Ano Ano
Variadické šablony Ne Ano Ano
Zápis „>>“ ve specializaci šablony Ne Ano Ano

V některých případech jsem narazil na chování překladačů, které v této tabulce nešlo zachytit; na tyto situace se podíváme podrobněji.

Dědění konstruktorů

V jazyce C++ podle starších standardů se konstruktory objektových typů nedědily; místo toho volal konstruktor potomka konstruktor předka. Standard C++ z roku 2011 dědění konstruktorů umožnil. V C++Builderu tyto možnost podporuje pouze překladač pro 32bitová Windows, ale ani zde to není bez problémů. Podívejme se na příklad, který jsem – až na zkrácení jmen – převzal ze Stroustrupovy učebnice [1] a který by podle standardu měl fungovat. Deklarujeme třídy

class X

{

int x;

public:

X(int x) : x(x) {}

};

class Y: public X

{

public:

using X::X; // Přikazuje zdědit konstruktory

};

To překladač přijme. Jestliže ale nyní deklarujeme proměnnou

Y y(1);

ohlásí, že neumí generovat implicitní konstruktor třídy Y (E2125 Compiler could not generate default constructor for class 'Y'), i když ho není třeba. Jestliže do třídy X doplníme implicitní konstruktor, program se přeloží a bude fungovat. Dědění konstruktorů je zde tedy implementováno, i když ne zcela podle požadavků standardu.

Lambda-výrazy

Lambda-výrazy představují možnost, jak deklarovat lokální nebo globální objekt představující nepojmenovanou funkci. Jsou k dispozici pouze v 64bitovém překladači a překladačích pro mobilní platformy; v něm fungují dle očekávání. Zmiňuji se o nich jen proto, že na webových stránkách s dokumentací RAD Studia [3], [4] je naprosto nesmyslný příklad, který použití lambda-výrazů spíše zatemňuje: lambda-výraz je v něm definován v místě, kde je ihned použit, není přiřazen proměnné ani předán jako parametr, takže je zcela zbytečný.

Silné výčtové typy

Jednou z novinek standardu C++11 jsou tzv. silné výčtové typy, deklarované kombinací klíčových slov emum class, resp. enum struct; význam obou možností je stejný. Výčtové konstanty těchto typů používáme spolu se jménem typu. Silné výčtové typu podporují všechny překladače.

Jestliže deklarujeme např. typ

enum class A {A1, A2, A3 = 50};

můžeme v programu překládaném pro Win32 napsat

int x = A::A3; // C hybné, BCC32 akceptuje

což je v rozporu se standardem – silný výčtový typ by nemělo být možno implicitně konvertovat na celé číslo. Překladače pro Win64 a pro mobilní platformy zde – na rozdíl od BCC32 – v souladu se standardem vyžadují explicitní přetypování,

int x = (int)A::A3; // OK

Diakritická znaménka v identifikátorech

Jsem si vědom, že pro mnoho českých programátorů je používání znaků národních abeced v identifikátorech něčím jako rouháním. Zkušenosti s cizími programátory, zejména německými a francouzskými, s jejichž programy se tu a tam setkávám, mne však přesvědčují o tom, že podobnými předsudky netrpí, a protože standard C++ tuto možnost zavádí, zabýval jsem se tím i v RAD Studiu.

Ukazuje se, že zde panuje poněkud nepochopitelný chaos: Zatímco překladače Object Pascalu tuto možnost podporují pro všechny platformy, v C++ ji podporuje pouze překladač pro Win32.

Standardní knihovna C++

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, pro Win64 je to 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.

Závěrečné poznámky k programovacím jazykům

Z předchozích postřehů plyne, že překladač C++ pro Win32 se ve svých možnostech liší od překladače pro zbývající podporované platformy, což znamená, že je vyvíjen samostatně. Samozřejmě, pokud programátor v C++ zůstane u konstrukcí, které jsou pro všechny platformy společné, nebo ještě lépe u konstrukcí, které vyhovují staršímu standardu tohoto jazyka, nemusí se zabývat problémy při přenosu programu mezi platformami.

Nabízí se ale otázka, proč nejsou všechny překladače vyvíjeny zároveň. Odpověď je jednoduchá: 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.

Doufejme, že se chování těchto překladačů časem sjednotí, takže RAD Studio bude skutečně multiplatformní.

Knihovna VCL

S knihovnou VCL se programátoři setkali už v první verzi Delphi vydané v roce 1995; později byla přenesena i do C++Builderu a stala se inspirací pro řadu podobných knihoven, v nejrůznějších programovacích jazycích. Slouží k vývoji desktopových aplikací pomocí vizuálních a nevizuálních komponent.

Její současná verze obsahuje dva nové styly (Glossy a TabletDark), takže vytvořené aplikace lze lépe přizpůsobit požadavkům uživatelů.

Aplikace založené na knihovně VCL mohou nyní využít senzory, které jsme znali z knihovny Firemonkey. Při vývoji aplikace za ložené na knihovně VCL najdeme v současné verzi RAD Studia na paletě Sensors tři komponenty, a to TLocationSensor, TMotionSensor a TOrientationSensor.

Novinkou jsou také optimalizované styly pro dotykové tablety pro Windows.

Poznamenejme, že od verze XE4 podporuje knihovna VCL technologii Live Bindings (obr. 2).

Knihovna FireMonkey

Knihovna FireMonkey neboli ohnivá opice byla poprvé uvedena v RAD Studiu XE2. Je postavena na podobné myšlence jako knihovna WPF firmy Microsoft, je ale multiplatformní. Novinkou RAD Studia XE6 je, že aplikace založené na ohnivé opici můžeme vyvíjet i pro Android v C++Builderu.

Byly také vylepšeny nástroje pro vytváření nativních aplikací pro Android ARMv7 pro Gingerbread (2.3.3 – 2.3.7), Ice Cream Sandwich (4.0.3, 4.0.4), Jelly Bean (4.1.x, 4.2.x, 4.3.x), a Kit Kat (4.4).

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. Byla novinkou RAD Studia XE2 a řešila problém komunikace komponent nezávislé na platformě. RAD Studio XE3 přidalo možnost vizuálního návrhu propojení pomocí LiveBindings.

Komponenty v knihovně VCL používaly binární komunikaci, jejíž formát byl dán použitou platformou a využíval jejích služeb (posílání zpráv); to ovšem bylo v okamžiku, kdy se firma Embarcadero rozhodla podporovat multiplatformní vývoj, velmi silné omezení.

Obr. 2: Vizuální návrhář LiveBindingsObr. 2: Vizuální návrhář LiveBindings

 

Technologie LiveBindings je založena na komunikaci 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 (obr. 2). 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).

Přístup k datům

RAD Studio XE6 podporuje samozřejmě používání starších technologií pro přístup k datům, které jsme měli k dispozici pod Windows. Vedle nejstarší BDE (Borland Database Engine) práci se stolními databázemi, jako byla dBase nebo Paradox, to jsou komponenty dbExpress pro přístup k SQL serverům.

Vedle toho zde najdeme multiplatformní komponenty FireDAC. Reklamní slogan o nich říká, že – vynecháme-li superlativy – to je přístupová vrstva, poskytující společné aplikační programové rozhraní pro přístup k datům různých databázových strojů, aniž by se vzdala podpory specifických vlastností jednotlivých databázových serverů a aniž by vedla k jakémukoli omezení výkonu.

Ponecháme-li stranou marketing, zjistíme, že jde o knihovnu založenou na velmi podobné filozofii jako byla knihovna BDE. Najdeme zde komponenty TFDConnection, TFDQuery,TFDTable a mnohé další, které zapouzdřují obvyklé operace s databázovým serverem. Tyto komponenty podporují LibeBindings, takže programování přenosu dat je v mnoha situacích velice snadné. (To ale platí i pro komponenty dbExpress.)

Novinkou současné verze knihovny FireDAC je mimo jiné nativní ovladač pro databázový server Informix pod operačními systémy Windows a Mac OS. Komponenta TFDMemTable, jež představuje datovou sadu uloženou v paměti a kompatibilní s komponentou TClientDataSet, nyní podporuje optimalizovanou serializaci ve formátu JSON.

Integrované vývojové prostředí RAD Studia obsahuje, podobně jako v předchozích verzích, DataExplorer – nástroj pro práci se zdroji dat. Ten nyní podporuje i knihovnu FireDAC.

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í. Jako obvykle obsahuje vzorovou databázi Employee – a jen pro odlehčení poznamenám, že tvůrci tabulky Country (Země) si konečně povšimli, že v řadě evropských zemí se stalo měnou Euro; ještě relativně nedávno zde totiž byly uváděny měny, které už dávno zanikly.

Co dodat

RAD Studio je bezpochyby mocný nástroj Jeho nejsilnější stránkou je možnost vývoje aplikací pro více platforem s jediným zdrojovým kódem. Je třeba zdůraznit, že jde o nástroj pro vývoj obchodních aplikací; zabýváte-li se např. vývojem počítačových her, budete se nejspíš muset poohlédnout po něčem jiném.

Verze XE6 přinesla řadu vylepšení – zkušenosti ukáží, nakolik jich vývojáři dokáží využívat.

Jeho nevýhodou pro nového uživatele je poměrně vysoká cena: Jedna licence nejsilnější edice Architect stojí v současné době 130 600 Kč, nejslabší edice Professional stojí 52 500 Kč. Za samotné Delphi nebo C++Builder v edici Architect zaplatíte v současnosti 116 100 Kč, za edici Professional je to 29 000 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.

Miroslav Virius

Odkazy

  1. http://www.embarcadero.com/products/rad-studio
  2. Stroustrup, B.: The C++ Programming Language. 4th Edition. Addison-Wesley 2013. ISBN 978-0-321-56384-2
  3. http://docwiki.embarcadero.com/RADStudio/XE6/en/C%2B%2B11_Features_Supported_by_RAD_Studio_Clang-based_C%2B%2B_Compilers#Lambda_expressions_examples
  4. http://docwiki.embarcadero.com/CodeExamples/XE6/en/Generic_Stack_(C%2B%2B)

(červen 2014 | redakce2)


Komentáře, názory a rady

Zatím sem nikdo nevložil žádný komentář. Buďte první...

>>> Číst a vkládat komentáře <<<

Tip - Konference: Cloud computing v praxi - 23.3.2017!


Otázky a odpovědi z IT: Diskusní portál Bizio.cz
Pozoruhodné IT produkty pro rok 2017
Věříme, že v tomto přehledu pozoruhodných produktů najdete ty, které vám pomohou ve vaší práci v IT.




Anketa


©2011-2017 BusinessIT.cz, ISSN 1805-0522 | Názvy použité v textech mohou být ochrannými známkami příslušných vlastníků.
Provozovatel: Bispiral, s.r.o., kontakt: BusinessIT(at)Bispiral.com | Inzerce: Best Online Media, s.r.o., zuzana@online-media.cz
Používáme účetní program Money S3
O vydavateli | Pravidla webu BusinessIT.cz a ochrana soukromí | pg(2403)