Studio 10 Seattle – první pohled

RAD Studio 10 Seattle je nová verze multiplatformního vývojového prostředí. Pokrývá platformy Windows, OSX, Android (6.0 Marshmallow) a iOS (9.1). Aplikace je možné vytvářet v jazycích objektový Pascal (Delphi) a C++ 11. Produkt uvedlo na trh Embarcadero na podzim 2015. RX, CX, DX – zkratky vládnou všem.
Perestrojka

Promiňte, ale nedá mi to a začnu prastarou anekdotou, ve které se vypráví, jak za mistrem ve fabrice přišel dělník a chtěl vysvětlit co je to perestrojka (starší vědí o co jde, mladší si to laskavě najdou na wiki). Tak ho mistr vzal k ponku, kde byly kovové krabice s hřebíky. Vzal jednu plnou a jednu prázdnou a do té hřebíky přesypal. Dělník na to kouká a pak říká: „Ale to je přeci úplně stejný?”. A mistr na to: “Jo je. Ale ten rachot!”.

Symbol RAD Studio

Narážím na změnu označování verzí. Před čtyřmi roky, v roce 2011, přešlo Embarcadero z označování verze rokem vydání na nové označení XE. Stalo se to pravděpodobně proto, že se nově začaly objevovat dvě nové verze za rok a označení letopočtu by už nestačilo. Radek Červinka (díky za připomínky) mě upozornil, že jedním z důvodů mohl být fakt, že verze 2007 byla nová v roce 2008.

Symbol Delphi

Nyní nastala nová změna, označení je číselné, včetně kódového označení projektu. Překvapivě však číslování nenavazuje, poslední XE8 je totiž nahrazena verzí 10 Seattle. Můžeme jen spekulovat, zda to má nějakou souvislost s Windows 10, nebo s lákavou možností používat v marketingu magické označení X (nechci spekulovat nakolik chtěl MS srovnat krok s OS X a Embarcadero s nimi). Každopádně se změnila symbolika na ikonách – tradiční ikonu chrámu v Delfách nahradily písmenné zkratky produktů RX (RAD Studio), DX (Delphi) a CX (C++ Builder). Že by inspirováno ikonami Adobe?

Symbol CX Builder

Avšak moje zvědavost je značně podrážděna tím, jak bude vypadat označení verze následující. Bude to verze 11? Ikony se změní na RXI, DXI, CXI (13 bude zajímavá – RXIII)? Nebo je verze 10 „poslední“ klasická, jak to prohlašuje Microsoft o Windows? Přejde snad Embarcadero na SaaS, kde sice budete mít k dispozici vždy aktuální verzi, ale bez předplatného nebude možné produkt používat? Dle oficiálního vyjádření Embarcadera je verze 10 další novou modelovou řadou, která bude pro různé verze používat názvy měst. Takže by se asi měly začít objevovat hlášky typu „To máš psaný v Prague? Ne, to je ještě ve starém Seattlu“.

Takže k věci

Po trochu delším úvodu tedy už k věci. Vezměme to ze začátku encyklopedicky, koneckonců nové vlastnosti jsou důležité.

Ještě více C++ (dle specifikace C++ 11)

Ke stávajícímu 32bitovému C++ překladači přibyl další, založený opět na LLVM (stejně jako 64bitový) dle specifikace Clang 3.3. V nastavení projektu je možné si vybrat, který překladač má být použit.

Nejsem „céčkový“ expert, takže spíše spekuluji, že tímto překladačem bude možné psát univerzálnější kód využitelný mimo ekosystém Embarcadera, a naopak použít již existující zdroje napsané dle standardu C++ 11. A už vůbec nechci spekulovat, nakolik souvisí zavedení C++ 11 s lambdafunkcemi a s asynchronností WinRT. Možná je záměr mnohem přímější, a sice sjednocení kompilátorů pro 32 a 64 bitů.

Ještě více IDE

Pravidelné volání uživatelské komunity se již tradičně týká vývojového prostředí. V Seattlu se objevila spousta drobností, a nutno přiznat, že velmi často jde o drobnost typu „no konečně!“.

Vylepšená práce s pamětí

Zásadní vylepšení ale spočívá v přepracované architektuře IDE, která umožní zpracovávat projekty dvojnásobné velikosti – moduly realizující IDE byly přepracovány, aby používaly WLMA (Windows Large Memory Address), takže mají přístup ke 4 GB paměti místo původních 2 GB.

Jelikož se zabývám především vývojem mobilních aplikací v Delphi, mám na chování IDE nepěkné vzpomínky. Překvapilo mě, že tam, kde dokáži XE8 zaseknout takřka systematicky, Seattle běžel jako by se nechumelilo. Vlastně si nevzpomenu, že by mi během prvních náhledů IDE spadlo (pravda, na Delphi.cz zase někdo psal, že mu Seattle padal nejvíc, co kdy zažil). Jinak subjektivně jsem měl dojem, že to zase kompiluje rychleji a to i šílené debug-verze pro mobilní platformy. Při pozdějším intenzivnějším používání to občas spadlo, ale v porovnání s předchozími XE verzemi to považuji za výjimky.

Na úvodní konferenci přednášející zmiňoval v této souvislosti, že IDE úspěšně testovali na rozsáhlém projektu s více než 20 milióny řádek kódu. Jeden z velkých českých podnikových IS má pro ilustraci více než 5 miliónů řádek.

Sem asi patří i zmínit automatické uložení a obnovu posledního stavu před pádem IDE. Neměl jsem možnost zkusit, fakt mi to nikdy nespadlo tak, abych obnovu potřeboval, ale pokud to funguje, je to určitě velmi příjemná funkce. Já už mám automatismy, kdy před překladem nebo „deployem“ klikám na „Save all“, ale pochopitelně člověk zapomene, zrovna když to spadne.

Vylepšení uživatelského rozhraní

Jak už jsem psal na začátku, jde o celou řadu drobností, ze kterých namátkou vybírám:

• Je možné schovat nevizuální komponenty. Úžasné, konečně jsem přestal řešit letitou otázku „Kam s nimi“.

• Ve „Structure View“ jsou objekty označené vlastními ikonkami, takže se lépe vizuálně hledají.

• „Object Inspector“ má filtr atributů. Hledat opakovaně atribut „Width“ nebo „Text“ (jsou na konci seznamu), to bývalo ubíjející – už ne.

• Automatické párování závorek všeho druhu. To je opravdu šikovné. Já jsem si už za ta léta zvykl nejdřív napsat obě závorky a pak psát dovnitř, ale vybrat text, ťuknout na otvírací závorku a ona se zavírací doplní na konec, je vskutku fajn.

• Zkratka na komentování/odkomentování řádky. Člověk to dělá při ladění pořád. Po stiknutí CTRL +/se řádka komentuje a kurzor skočí na další řádek. Když chcete víc řádek, stačí pár ťuknutí.

• Vylepšená podpora vícemonitorových systémů. Je příjemné si panely odložit na vedlejší plochu.

Historie (vícenásobný) Copy/Paste

Vylepšená vizualizace struktury kódu, například vizuální vyznačení „Abort“, „Break“, „Continue“, „Exit“… Už samotná vizualizace bloků v XE8 se mi líbila a tohle je další krok správným směrem. Například když po sobě člověk čte po půl roce zdrojáky, tak to rozhodně přispěje k lepší a rychlejší orientaci.

Rozšíření možnosti full-screen na další nástrojová okna, a to na každém monitoru zvlášť (vypadá to jako samozřejmost, ale kolikrát se mi už stalo že jsem něco přetáhl na druhý monitor, ťukl na full-screen a šup… už to bylo zase na hlavním monitoru).

RTL podporuje od verze W8.1 rozdílné rozlišení na každém monitoru, takže to funguje i v IDE.

Možnost přidat do manifestu příznak o tom, že aplikace rozeznává rozlišení (DPI/resolution-aware), výsledný vzhled na monitorech a vysokým rozlišením (DPI>125 %) je nativní a nikoliv jen zvětšený.

Viditelné komponenty
Když se schovají nevizuální komponenty, je rozdíl nejen vidět, ale dle jedné známé reklamy málem i cítit
Vyznačený Exit z procedury
Jak rychle vyhledat vlastnost „Text“
Komponenty ve stromu struktury jsou reprezentovány stejnými ikonami jako všude jinde; výsledek je nesporně vzhlednější, a dle mého soudu i přehlednější

Ještě více Windows (10)

Windows 10 jsou samy o sobě fenomén, který zatím nelze přesně zhodnotit. Díky obchodní politice lze předpokládat, že nahradí velké procento stávajících verzí Windows – kdo by nebral upgrade zdarma. Embarcadero uvádí, že dle jejich průzkumu přejde do dvou let na Windows 10 okolo 70% korporátních uživatelů. Uvidíme, ale když se divám na statistiky používaných OS při prohlížení internetu (www.netmarketshare.com/operating-system-market-share.aspx), mají Windows 10 skoro 7 %. Tedy víc než OSX s necelými 5 % a těsně za Windows 8.1 s 10 %. A to dva měsíce po jejich uvedení. Vím, že tyto statistiky mohou být zavádějící, ale pro ilustraci trendu jsou myslím dostatečné.

Jak jsou tedy Windows 10 podporované?

Integrace WinRT/UWP (UAP) – jak VCL, tak FireMonkey obsahují přímou podporu API Universal Windows Platform. Jde nejen o kompletní WinRT API wrapper pro Delphi (asi si na označení Object Pascal nezvyknu) včetně podpory použitých datových typů, ale k dispozici jsou i nevizuální komponenty, které lze snadno použít ve VCL i FireMonkey. Jak dobrý příklad může sloužit komponenta NotificationCenter. Dokáže odesílat notifikace na všechny dostupné platformy (Android, iOS, OSX a Windows).

Jako alternativa pro mobilní komponenty Windows ShowShareSheet je k dispozici SharingContract. Funguje velmi obdobně, nabídne data z Windows, která mohou zpracovat různé aplikace. Princip na mobilních platformách běžný a často používaný, lze nyní použít i v Delphi – zatím jen jako zdroj dat, dá se očekávat že v budoucnu i jako konzument.

Pochopitelně očekávám, že v nějaké další verzi bude možné vytvářet v RX i aplikace, které bude možné umisťovat na Windows Store. Embarcadero mluví o využití projektu MS Centennial, až bude k dispozici ve finální verzi. Centennial je jedním z „bridge“ projektů Microsoftu, který má umožnit umístit na Windows Store standardní aplikaci Win32.
Mimochodem, nepatří to úplně sem, ale nedávno psal Marco Cantú o svých pokusech portovat aplikaci pro Android vytvořenou v Seattlu pomocí projektu MS Astoria do smartphonu Lumia s Windows 10 Insider Preview pro mobily.

Působí to na mě dojmem, že v RX asi nebude hned tak možné rovnou psát univerzální aplikace pro všechny platformy Windows 10, ale díky multiplatformnímu charakteru by mělo být snadné vytvořit se stejným kódem Win32, kterou přes Centennial dostanu do Windows Store a verzi pro Android, a přes Astorii ji dostat pro Windows 10 na mobilní zařízení. Ale to bude asi o několika dalších verzích RAD Studia, ať už se bude jmenovat jakkoliv. Každopádně to bude opět podmíněné vydáním finální verze Astorie.

Nové ovládací VCL prvky

Poprvé po několika letech se objevily ve VCL nové ovládací prvky, které mají sloužit k lepší podpoře uživatelského rozhraní Windows 10. Mapují sice obecné ovládací prvky Windows 10 (uskutečněné ve Windows pomocí prvků WinRT), ale jsou vytvořené nezávisle pomocí klasické architektury VCL. To znamená, že nový vzhled „Windows 10“ je vidět i ve Windows 7 a 8 (něco prý i v XP). K dispozici jsou:

• RelativePanel

• ToogleSwitch

• SearchBox

• SpiltView

• ActivityIndicator

• Generálka FireMonkey

Multiplatformní framework FireMonkey dostal řadu vylepšení, která zřejmě vyšla z poznání, že vývojáři začali používat FM i pro desktopové aplikace Windows. Pokud bych to měl hodnotit z vlastní zkušenosti, tak VCL je sice robustní a léty odladěné a FM, je však pořád poněkud syrové a je v něm více chyb a podivností, než by bylo záhodno. Má však spoustu zajímavých a nadmíru příjemných vlastností, které zřejmě mohou ty negativní snadno převýšit. FM tedy nyní podporuje vzhled Windows 10 – ovládací prvky a ikony vypadají jako z Windows 10 plus další funkcionality:

• Notifikační komponenta FMX.Notification je nyní System.Notification a nově spolupracuje s notifikacemi Windows.

Nápověda typu mouse-over-hint ve Firemonkey ve Windows

• Zobrazení nápovědy po najetí kurzoru (Mouse-over hint). V původním směřování FM na mobilní platformy tato funkce postrádá smyslu, ale na desktopu je to málem nezbytný standard, a když najedete kurzorem na tlačítko a ono se neobjeví k čemu je, berete to jako újmu.

• Podpora nativních řídících prvků Windows – Edit, Memo a ScrollBox. Tato podpora se objevovala pro některé ovládací prvky i v předchozích verzích (zejména pro platformu iOS). Použití nativního ovládacího prvku má jistá omezení (zejména pro kombinaci s nenativními) ale jeho vzhled, funkce a chování jsou platformní, jak jsou uživatelé zvyklí.

Edit realizovaný přes Firemonkey
Edit realizovaný jako nativní Win32 komponenta. Při použití stylů, jako v tomto případě, je nasazení nativních komponent diskutabilní.

• Vylepšený clipboard nyní umí kopírovat text i obrázky.

Ještě mobilněji

Obecně vzato, pro obě mobilní platformy přibylo rozšíření testovacího frameworku DUnitX. Testy Unit nejsou zase tak rozšířené, zejména u menších projektů (a mobilní aplikace nepatří mezi ty se statisíci řádky), ale pokud je někdo používá při vývoji desktopových aplikací, může to pro něj být příjemný doplněk.

Android

Na tomto místě se musím mračit a vrčet, protože ani v RX není podpora pro Intel Atom. Zařízení s OS Android s tímto procesorem se začínají čím na trhu objevovat dál víc a patří mezi ty, která mají zpravidla velmi dobrý poměr cena/výkon. Těžko pak vysvětlovat uživatelům, kteří si takové skvělé zařízení koupí, že vaše aplikace na tom nepoběží. Zaznamenal jsem sice na blogu Marca Cantu poznámku o tom, jak vyřadit v FM kontrolu, zda běží na Atomu a následnou šanci fungovat nad simulátorem ARMu libhoudini, ale přijde mi to jako zatraceně slabé.

Na druhé straně RX konečně podporuje doplnění aplikace o službu Androidu, která i po deaktivaci aplikace zůstává běžet na pozadí, je přitom schopná monitorovat hardware nebo notifikace, a reagovat na ně. Tato podpora je celkem komplexní a její použití je snadné. Kromě aplikace samotné je třeba pomocí průvodce vytvořit samostatný projekt se servisní částí. Při vytváření aplikace APK se stane její součástí i služební aplikace, a při instalaci se do zařízení přidají obě.

Za zmínku stojí i podpora aplikace jako příjemce dat z ostatních aplikací (intents). Dosud mohla aplikace Delphi Android pouze odesílat data do ostatních programů, nyní je může i přijímat.

iOS

Seznam provision profiles, jak je zobrazuje xCode

Z mého úhlu pohledu je asi nejdůležitější kompatibilita s iOS 9. Té se dá dosáhnout i s předchozí verzí XE8, ale vyžaduje to určité úpravy. V RX stačí projekt překompilovat a aplikace funguje.

Nově je doplněné ladění 64bitových aplikací (včetně univerzálních 64/32bitových) na fyzických iOS zařízeních.

Velmi jsem ocenil konečně smysluplné napojení IDE na XCode. Volba certifikátů a profilů je snadná, vybírá se ze seznamů, které IDE získá přes server PA rovnou z XCode – kde že je ten středověk předchozích verzí.

K dispozici jsou také další řídící prvky, které lze provozovat nativně: TMemo, TListView, TSwitch a TCalendar.

Pokud správně vyplníte ID aplikace v profilu projektu, bude se RX snažit najít odpovídající profil provision v seznamu xCode, a dále najít odpovídající certifikát pro podepsání

Ještě databázovější

Skvělé FireDAC pochopitelně zůstává a je rozšířené o podporu databází NoSQL. Pro začátek je k dispozici jedna z nejpopulárnějších – MongoDB. Co všechno je k dispozici by asi vydalo na samostatný článek, takže se jen spokojím s konstatováním, že pro obsluhu netriviálních struktur které Mongo umí (nepracuje se s tabulkami ale s dokumenty typu JSON), je připravena celá řada datových typů a objektů.

V souvislosti s podporou MongoDB je v RTL nová podpora JSON/BSON, založená na velmi rozšířené a užívané knihovně JSON.NET. Nová architektura podporuje čtení a zápis z/do streamů JSON.

Klientská část DataSnapu dostala novou implementaci HTTP/HTTPS ze systémové knihovny System.NET – konečně nebude nutné s klientskou aplikací instalovat a konfigurovat Open SSL (veselá záležitost, zejména na mobilních platformách).

Co zbylo

Podívejme se, ještě na další funkčnosti, které podporují trendy poslední doby – IoT (Internet of Things) a AppAnalytics (analýza používání aplikace),

IoT

Embarcadero se už nějakou dobu snaží surfovat na stále vyšší vlně technologií IoT. Při bližším zkoumání ale toho v RX zase tak moc není. Je sice je k dispozici podpora Bluetooth LE a zařízení typu Beacons, stejně jako dobrá podpora standardních protokolů HTTP a REST, ale tam to končí. Když jsem se ptal na webináři o RX na případnou podporu aplikací pro Windows 10 IoT Core, tak se na to z Embarcadera moc netvářili.

Jsem fanda IoT, mám rád když na konci programu něco žije a čekal bych, že zaslechnu v souvislosti s IoT něco o Brillu (nebo alespoň o podpoře protokolu Weave). Nebo snad něco o podpoře HomeKit v iOSu? Pravda je, že všechny tyhle věci jsou příliš nové a není zatím zcela zřejmé, která technologie vyhraje (nebo se alespoň stane nejpoužívanější) a všichni zainteresovaní se spíše připravuji, experimentují a hledají svůj díl trhu.

AppAnalytics

Jde o placenou službu od Embarcadera, která umožňuje zjistit detaily o používání aplikace. Použití je snadné – stačí do aplikace přidat příslušnou komponentu, svázat jí s ApplicationID na konci SaaS, a je to. Základní informace, jako například kolikrát a na jakém OS byla aplikace spuštěna, která okna a jak často byla používána se logují standardně. Je však také možné snadno přidat do kódu i specifické hlídání konkrétní události, třeba do obsluhy stisku tlačítka.

Informace to jistě mohou být velmi užitečné jak pro manažery, tak pro vývojáře, leč je třeba zvážit, zda stojí za pravidelné poplatky. Trial verze je zdarma, ale s omezením na jednu aplikaci a 10 tisíc událostí za měsíc.

Kam kráčíš RX?

Zde na konci by možná někdo očekával shrnutí kladů a záporů a doporučení či nedoporučení ke koupi. Posoudit jeden z desítek modelů mobilních telefonů, popsat shodné parametry, vyhodnotit a porovnat cena/výkon je poměrně jasné a snadné. U vývojových nástrojů to ale asi takhle jednoduché nebude.

Kdy asi ne

Není žádné tajemství, že spousta uživatelů používá prastaré verze Delphi, vesele vyvíjí aplikace W32 a nemají problém. A jestli něco budou potřebovat z W10, tak si to tam nějak zbastlí, napíší „wrap“ a je to. Slyšel jsem i názory, že migrovat na vyšší verze je práce navíc a zbytečná komplikace. Když to tak vezmu kolem dokola, tak mají vlastně pravdu. Ve Windows 10 běhají i opravdu archaické W32 kousky, a kdyby náhodou něco zlobilo, tak se zapne kompatibilita – a je to. To, co běhalo v XP, poběží ve W10 také. Vzhledem k těmto faktům a ceně není divu, že vývojáři vyčkávají, a když už ugradují, tak čekají roky a roky na nějakou tu „správnou“ sudou verzi.

Aby to shrnul: pokud udržujete nějakou aplikaci už léta a nechcete ji měnit a někam posouvat, nebo, nedej, bože, významně přepracovávat, žádnou novou verzi asi potřebovat nebudete. Jestli však plánujete něco nového, co má zapadat do současných „in“ trendů a fungovat ve W10 jako by to tam patřilo, tak se bude RX hodit. Ohledně inovací mi nedá nepřipomenout podporu nerelační databáze Mongo. Pokud si osvojíte nové věci na úrovni jazyka a komponent, vaše práce bude nepochybně efektivnější a výsledky radostnější. Ale povšimněte si, prosím, onoho „pokud“.

Kdy určitě ano

Zcela naopak to však bude v případě, že budete mít v plánu vyvíjet v Delphi multiplatformní aplikace nad FireMonkey. Tady je moje doporučení zcela jednoznačné a jasné – pravidelné upgrady, včetně předplatného. Prostředí mobilních platforem a jejich operačních systémů neustále procházejí intenzivním vývojem (nebojím se použít výraz „překotným“). A Embarcadero je samostatný subjekt, který jen reaguje na tahy hlavních hráčů Google a Apple. Jen připomínám nemilou událost, kdy Apple zavedl povinnou podporu 64 bitů. XE7 se rázem staly pro vývoj appek pro iOS bezcenými a blahořečit si mohli ti, kteří dostali XE8 v rámci podpory.

Zkrátka a dobře, každá nová verze, ať už Androida, tak iOSu, může vyžadovat další podporu ze strany vývojového prostředí. Něco se dá opravit ad-hoc (například „fixnout“ XE8 aby podporovaly iOS 9), no a něco až celou novou verzí.

Tlak na předplatné

Nutnost vydávat nové verze minimálně jednou do roka se pochopitelně snaží obchodníci z Embarcadera řešit tím, že se snaží všemi možnými cestami tlačit zákazníky k předplatnému. Dá se snadno spekulovat, že čistě noví zákazníci takový masivní vývoj neufinancují. Ovšem prodlužovat každý rok předplatné v nemalé výši je poměrně drastické. A vzhledem k vývoji mobilních aplikací nijak neutěší, že když předplatné platit přestanu, mohu poslední zaplacenou verzi používat pořád (viz XE7 vs 64 iOS).
Jestli snad už také není na čase, aby si Embarcadero osvojilo model SaaS, kdy budu platit výrazně menší roční poplatky a budu mít k dispozici vždy aktuální verzi, ale jen pokud budu platit.

Těžko odhadovat, jak se projeví nedávné převzetí akvizice Embarcadera investiční skupinou reprezentovanou společností Idera. CEO Embarcadera Randy Jacops v dopise, který rozesílal všem zákazníkům píše, že vývojové nástroje takto získané jsou pro ně velkou příležitostí a že zformovali nový vedoucí tým, který se jim bude exkluzivně věnovat (pokud bych se měl pokusit číst mezi řádky, znamená to, že ze stávajícího vedení toho mnoho nezůstane). Rovněž zmiňuje plánované investice, které by měly přilákat další zákazníky.

Jen čas ukáže, zda nový majitel a vedení bude spíš jako Borland, nebo spíš jako Embarcadero anebo mnohem lepší.

Daniel Jenne je nezávislým autorem a vývojářem.

Exit mobile version