Het is zover: Delphi XE2 is uit! Volgens Embarcadero de “grootste en beste” release sinds Delphi 1. En dat zeggen ze niet zomaar, als je kijkt naar de nieuwe features. Dus heel waarschijnlijk halen ze hiermee met gemak een 4e jaar (achterelkaar) van 15% groei of meer!
Features:
- 64bit compiler
- FireMonkey: Compleet nieuwe vector based GUI controls (ter vervanging van VCL), volledig door GPU gerenderd met hele mooie effecten (en dit alles is heel snel!). Vergelijkbaar met WPF.
- Cross platform: MacOsX en iOS (iPad etc)
- VCL Styles (voor moderne look van bestaande applicaties), inclusief VCL Style Designer
- Geavanceerde databinding (LiveBindings genaamd)
- Standaard cloud support (Azure en Amazon)
- etc
Al met al veel nieuwe features in deze release! Ze zijn al een poosje bezig met een “World Tour”, en de eerste reacties zijn erg positief.
64bit: It. Just. Works.
Zelf heb ik al een poos als beta-tester mogen “spelen” met deze versie, en het is echt de moeite waard. Ik heb bij mijn huidige klant bijna alle software (vrij groot pakket) al “64bit ready” gemaakt, en dit ging heel eenvoudig: 3rd party componenten updaten en een paar kleine wijzigingen in de code en alles werkte gewoon! Dus geen grote migratie is nodig (of je moet veel low level assembly en pointer trucs gebruiken…). Trouwens, onder water werken bepaalde dingen in 64bit wel anders, zoals exception handling, maar daar merk je normaal gesproken niets van.
FireMonkey
Het mooiste vind ik zelf FireMonkey: eenvoudig in gebruik (makkelijker dan WPF!), snel (volgens anderen stuk sneller dan WPF) en flexibel. Alles is een container, dus je kunt bijvoorbeeld in een ListView buttons en images stoppen, of een button in een button. Ook is het uiterlijk en de werking van elkaar gescheiden, wat inhoud dat je bijvoorbeeld voor 1 (of voor alle) buttons het uiterlijk kunt aanpassen (bijvoorbeeld een roterende video, om maar iets geks te noemen). Standaard worden een aantal (5?) “styles” meegeleverd, die gebruik maken van dit principe.
Zelf heb ik als voorbeeld de X van een checkbox veranderd in een butterfly (svg).
Verder zijn allerlei animations (rotate, path, etc) en effecten (glow, blur, reflections, etc) eenvoudig mogelijk. Ook kan alles in een 3d wereld gepresenteerd worden, zodat een form of component naast x en y ook z coördinaten heeft (en je de achterkant van een scherm kunt bekijken) en zelfs 3d objecten kunnen geïmporteerd worden!
Maar het mooiste van dit alles is dat het cross platform is! Dus dezelfde code en GUI kun je met een paar klikken compileren voor MacOsX en iOS! Bekijk de volgende video maar eens, waarbij het 1 en ander gedemonstreerd wordt.
Trouwens: doordat het vector based is, kun je alles roteren en zoomen/scalen zonder dat het lelijk en brokkelig wordt! (hardware anti-aliasing).
FireMonkey en VCL gaan niet samen
Nadeel van FireMonkey (FMX) is dat het niet gecombineerd kan worden met de VCL. Dus in een bestaand applicatie kun je niet een FMX form gebruiken (of andersom). Dit is bewust gedaan, om zo min mogelijk problemen te krijgen in de 1e release. Misschien dat het later toch nog mogelijk wordt gemaakt, maar ze wilden eerst alle energie en tijd voor de ontwikkeling van FMX zelf gebruiken.
Je hebt dan 3 mogelijkheden:
- alles ombouwen van VCL naar FMX (als je MVC of MVP pattern gebruikt is dit eenvoudig toch!?)
- Toch gewoon FMX gebruiken
(het is met een “hack” wel degelijk mogelijk, zelf nog niet geprobeerd, alleen kun je dan geen VCL forms openen/aanpassen, omdat alleen de FMX designer actief is) - RemObjects Hydra gebruiken. Hiermee kon je al eerder WPF, Winforms en Silverlight binnen Delphi gebruiken (en andersom), maar nu dus ook FMX.
Unit Scope Names
Om FMX en cross plaform (MacOs etc) mogelijk te maken, hebben alle units een namespace prefix. Bijvoorbeeld “MacApi.OpenGl” en “WinApi.OpenGl”. Dit wordt “Unit Scope Names” genoemd.
Voor compatibiliteit met “oude” (VCL) code, maar ook voor cross platform code, worden de normale uses automatisch omgezet naar de volledige. Bijvoorbeeld code die de unit “OpenGl” in de uses heeft staan, zal voor de Windows target de unit “WinApi.OpenGl” gebruiken. Ga je dezelfde code voor MacOs compileren, dan zal de compiler automatisch de “MacApi” variant gebruiken! Idem voor VCL en FMX: je hebt de unit “VCL.Buttons” en “FMX.Buttons”.
Dit is even wennen in het begin (alhoewel: je kunt ook gewoon de oude/korte notatie blijven gebruiken). Nadeel is echter wel dat het compileren langer duurt als je niet de volledige unit naam neerzet: Delphi probeert alle units met de standaard prefixes te zoeken in alle zoekpaden. Dit zal waarschijnlijk binnenkort dmv caching algoritme versneld worden.
Overig
Daarnaast zijn ook veel andere kleine dingen verbeterd, zoals built-in support voor zip, een uitgebreide (remote) deployment manager, verbeterde remote debugging, etc. De “What’s new” wiki bevat een compleet overzicht (tip: klik gewoon alle links aan, bijv. “RTL changes” zijn erg interresant).
C++ ben ik “vergeten”: zelf ben ik een Delphi programmeur, maar al het bovenstaande werkt ook gewoon voor C++!
Extra tools
Naast de al uitgebreide tools die bij Delphi XE geleverd werden, zijn er 2 toegevoegd:
- FastReports: snel en eenvoudig rapportages maken. Deze komt dus naast de bestaande Rave Reports (waar problemen mee zijn).
- Documentation Insight: makkelijk documentatie bekijken en aanpassen in de IDE
Toekomst
Uiteraard kunnen door de vele nieuwe features er nog kinderziektes in zitten. Ook is dit maar het begin: de volgende versie zal waarschijnlijk een Linux en ARM compiler bevatten, maar ook zal LiveBindings verder ontwikkeld worden en meer (compiler) integratie krijgen. De 64bit compiler is overigens nog niet uitontwikkeld: er wordt gewerkt aan allerlei optimalisaties.
Dit is nog maar een kort overzicht en uitleg van Delphi XE2. Als ik genoeg tijd heb hoop ik dieper op bepaalde dingen in te gaan (met demo’s en screenshots). Als er vragen zijn, stel ze gerust.

