Bob Swart (aka Dr.Bob)
CodeGear RAD Studio 2007

Twee weken voor de Software Developer Conference 2007 kwam CodeGear met de definitieve aankondiging van wat jarenlang met de codenaam Delphi Highlander is aangeduid, maar nu als CodeGear RAD Studio 2007 door het leven mag gaan. Delphi for Win32, Delphi for .NET 2.0 alsmede C++Builder in één IDE.
CodeGear RAD Studio 2007 was de definitieve versie van de omgeving die eerder dit jaar al in onderdelen was uitgebracht. In het eerste kwartaal was dat Delphi 2007 for Win32, wat in het tweede kwartaal gevolgd werd door C++Builder 2007. Nu is met de Delphi for .NET 2.0 smaak de CodeGear RAD Studio 2007 IDE eindelijk compleet. Samen met de release van CodeGear RAD Studio 2007 werden de verbeteringen aan de Win32 kant voor zowel Delphi als C++Builder uitgebracht als Update #3 voor Delphi 2007 (net als het uitkomen van C++Builder gelijk stond aan Update #1).
Om de verwarring echter iets groter te maken, werden ook de losse onderdelen van de CodeGear RAD Studio 2007 opnieuw uitgebracht, maar nu met “R2” in de naam. Wie vanaf dus Delphi 2007 for Win32 koopt, krijgt “Delphi 2007 for Win32 R2”, net als C++Builder. De Delphi for .NET 2.0 wordt niet los aangeboden – wie aan .NET wil doen met Delphi zal de gehele CodeGear RAD Studio moeten aanschaffen.

Wie eerder dit jaar Delphi 2007 for Win32 heeft aangeschaft, kan overwegen om naar CodeGear RAD Studio 2007 over te stappen. Indien gelijk met de aanschaf van Delphi 2007 for Win32 ook “subscription” is aangeschaft (of al eerder met bijvoorbeeld de aanschaf van Borland Developer Studio 2006), dan kan deze overstap gratis zijn. Ontwikkelaars met een niet-verlopen subscription (na 12 maanden kun je weer verlengen, maar dat moet je (reseller) - niet vergeten) krijgen namelijk automatisch bericht om de nieuwe versie te downloaden. Bij een identity level subscription op Delphi 2007 for Win32 levert dat de Delphi 2007 for Win32 R2 op, en bij een Studio Level subscription kun je de hele CodeGear RAD Studio 2007 downloaden. Wat je in beide gevallen download is overigens dezelfde setup.exe – het is het bijbehorende serienummer dat de setup vertelt welke editie (en in welke taal) er geinstalleerd wordt.

Overstap naar R2?
Tijdens de Delphi Product Address sessie bij de SDC 2007 liet Nick Hodges zich nog ontvallen dat hij gaat kijken of er een speciale aanbieding kan komen voor wie de eerste release van Delphi 2007 for Win32 heeft gekocht zonder subscription, en dus niet automatisch de R2 zal ontvangen. Het verschil tussen Delphi 2007 for Win32 zoals die begin dit jaar uitkwam en Delphi 2007 for Win32 R2 zit hem met name in de toevoeging van Blackfish SQL en DBX4 meta data classes en uitbreidingen. Verderop in dit artikel ga ik wat dieper in op Blackfish SQL, maar wie daar geen behoefte aan heeft of al een andere database gebruikt, zal dus weinig voordeel behalen bij een upgrade naar R2. Dan kun je beter op Delphi 2008 wachten die medio volgend jaar uitkomt en behalve Unicode support ook Generics voor Win32 zal bevatten (volgens de huidige Roadmap tenminste).

Professional, Enterprise of Architect?
Er zijn weer drie smaken van de CodeGear RAD Studio. De Delphi 2007 for Win32 en C++Builder waren alleen nog in Professional en Enterprise versies beschikbaar, maar voor de CodeGear RAD Studio is er nu ook weer de Architect editie bijgekomen. Het voornaamste verschil tussen Architect en Enterprise bestaat uit ECO IV. Zoals de naam zegt is dit de vierde release van Enterprise Core Objects. Deze keer zonder ondersteuning voor WinForms (want die zit niet meer in Dephi for .NET 2.0 – hierover later meer), maar naast ASP.NET nu voro het eerst ook ondersteuning voor VCL for .NET.
Bij Delphi 2006 zaten er verschillende onderdelen van ECO ook in de Professional of Enterprise versie van Delphi, maar dit is niet langer het geval. Alleen de Architect editie bevat ECO IV, alhoewel er wel een trial editie gedownload kan worden voor het gebruik van ECO IV in Professional en Enterprise. Het ECO Team dat voorheen onderdeel van Borland was, heeft zich nog verder dan CodeGear zelf afgesplitst, en het zelfstandige bedrijfje CapableObjects gevormd. Hun doel is het succes van ECO – en dat hoeft niet uitsluitend met de Delphi IDE, want ze zijn zelfs al bezig met een integratie in Visual Studio. Ik hoop dat dat niet ten koste gaat van de ontwikkeling aan de Delphi kant, en met name de documentatie die op dit moment behoorlijk achter loopt (en met name C# voorbeelden bevat omdat de auteur daar een grotere liefhebber van is). De tijd zal leren of de afsplitsing van het ECO Team en de verdeling van de aandacht ECO goed zal doen.

Delphi for .NET 2.0
Een van de zaken die nieuw is in de CodeGear RAD Studio is natuurlijk de Delphi for .NET 2.0 identiteit. Deze is niet los te krijgen als “Delphi 2007 for .NET 2.0”, maar uitsluitend als onderdeel van de hele RAD Studio aan te schaffen. In de naam is .NET 2.0 expliciet opgenomen, maar er is ook ondersteuning voor .NET 3.0 assemblies, alhoewel daar geen designers voor aanwezig zijn. Tijdens SDC liet Pawel Glowacki echter al in een sessie hoe we met CodeGear RAD Studio gebruik kunnen maken van de Windows Communication Foundation (WPF). Een artikel over deze sessie staat inmiddels op BDN (en ook op de SDN website?).

ASP.NET 2.0
Met Delphi for .NET 2.0 verdwijnt de ondersteuning voor WinForms, maar krijgen we eindelijk ondersteuning voor ASP.NET 2.0 en de mogelijkheden die daarbij worden aangeboden. Master pages, Membership, Roles en verschillende Providers, en nog veel meer. Een van de handige nieuwe features is terug te vinden in de CSS Layouts sectie van de Delphi for .NET Projects in de Object Repository:

Object Repository – CSS Layouts

Het kiezen van een van deze CSS Layout items resulteert in een nieuw ASP.NET 2.0 Web Forms applicatie, waarbij er meteen een MasterPage is toegevoegd met een layout zoals die grogweg in de omschrijving van het item is aangegeven. Dus voor de “Two Columns Fixed Centered” icon krijgen we het volgende resultaat:

CodeGear RAD Studio 2007 IDE

Je kunt nu aan de MasterPage aanpassingen maken, en vervolgens een of meerdere Content Pages toevoegen die afgeleid zijn van de Master Page. Een beetje als Form Inheritance in de VCL.

Object Repository – New ASP.NET Files

Dit is overigens een essentieel verschil tussen Delphi en Visual Studio betreffende de manier waarop Master Pages in ASP.NET 2.0 zijn gerealiseerd. Waar Visual Studio dit met code beside (zgn partial classes) doet, daar gebruikt Delphi gewone (form) inheritance. Dat werkt veel eenvoudiger, en is was dan ook geen grote noodzaak om partial classes te implementeren in Delphi for .NET 2.0 (en wie denkt dat Delphi dan nog achterloopt moet eens kijken naar de C# ‘nieuwe feature’ die onder de naam Extension Methods een beetje lijken op wat Class Helpers al in Delphi 8 for .NET konden doen).
Let ook op de andere New ASP.NET Files items in de Object Repository (van Figuur 3), zoals de Site Map en Skin File, die ook nieuw zijn in CodeGear RAD Studio 2007. Het enige nadeel is dat je nog zelf de Site Map – een XML document - moet invullen, maar ik heb al een klein tooltje geschreven dat van een gegeven directory alle .aspx pagina’s in een sitemap bestand plaatst – hoef je zelf alleen nog maar de naam en descriptions op te geven.
ASP.NET 2.0 biedt als een van de nieuwe features het zgn. memberships en roles model aan, alsmede een standaard provider waarmee je deze data in een SQL Server database kunt stoppen. Da’s leuk, maar niet iedereen zal SQL Server willen of kunnen gebruiken. En daarom zit er bij CodeGear RAD Studio 2007 nu ook een deploybare versie van de nieuwe Blackfish SQL database. Deploybaar, omdat je maar één enkele .NET assembly in je virtual directory hoeft neer te zetten. Alle configuratie details kun je in je web.config kwijt (default staan die er zelfs al in!), dus je internet service provider hoeft niet eens te weten dat je een Blackfish SQL database gebruikt in je ASP.NET 2.0 toepassing. De volgende keer laat ik meer voorbeelden zien van ASP.NET 2.0 in combinatie met Blackfish SQL.

Blackfish SQL
Blackfish SQL is een managed SQL-compliant embedded database die naast onze Delphi toepassingen kan worden gedeployed. Er zijn drie Blackfish SQL for Windows connection drivers: als eerste DBXClient – een Win32 DBX4 driver om via Delphi en C++Builder naar een remote Blackfish SQL database te praten, als tweede een Local ADO.NET 2.0 Provider (voor een local Blackfish SQL database – de driver en de Blackfish database kernel draaien hierbij in-process), en als derde een Remote ADO.NET 2.0 Provider, waarbij je een .NET remote connection naar een Blackfish SQL database kan maken. Je kan bijvoorbeeld Blackfish SQL als .NET assembly op een web server zetten en er dan ASP.NET toepassingen tegen aan laten werken.
CodeGear RAD Studio 2007 Professional bevat een unlimited Blackfish SQL desktop database deployment license voor systemen met 1 CPU, 1 gebruiker of 4 connecties, met databases die 512 MB kunnen worden.
CodeGear RAD Studio 2007 Enterprise en Architect geven een ongelimiteerde Blackfish SQL database deployment license voor systemen met 1 CPU, maximaal 5 gebruikers of 20 connecties en databases die 2 GB groot kunnen worden.
In alle gevallen kunnen extra deployment licenties gekocht worden (ook voor meer gebruikers, connecties, CPUs of grotere databases)– voor prijzen die te vergelijken zijn met die van InterBase.

BlackfishSQL gebruik als databases het formaat .jds – hetzelfde als JDataStore, en BlackfishSQL is dan ook de uiteindelijke versie wat destijds als NDataStore begonnen is. Blackfish SQL draait dan ook als managed databse onder zowel Java als .NET.

Active Query Builder
Een leuke uitbreiding is de Active Query Builder. Hiermee kun je tabellen naar een designer slepen, velden aanklikken die je hebben wilt als resultaat van je query, en vervolgens velden bijelkaar slepen die de tabellen aan elkaar moeten JOINen. Ziet er gelikt uit, en werkt erg makkelijk.

Generics
Een andere feature van .NET 2.0 die nu in Delphi for .NET zit staat bekend onder de naam Generics. Onder Generics worden in feite geparametriseerde types bedoeld; een type met een parameter, waardoor het bijna type-loos is. Voor de syntax hierbij maakt Delphi for .NET gebruik van de syntax, net als C++ templates dus als het ware.
Een voorbeeld van een eenvoudig generic Delphi array is als volgt:

 type
   Some<T> = Array of T;
Hierbij geeft de T aan over wat voor soort array we het eigenlijk willen hebben. We kunnen bijvoorbeeld een Integer, String maar ook een DataSet array maken op deze manier. Dit kan als volgt:
 type
   IntegerArray = Some<Integer>;
   StringArray = Some<String>;
   DataSetArray = Some<DataSet>;

 var
   X: SomeIntegers;
Nadeel van dit eenvoudige voorbeeld is dat het maar een array is – wel data, maar verder geen (extra) functionaliteit, dus eigenlijk weinig toegevoegde waarde aan het gebruik van een Generic type hier. Een leuker voorbeeld is de Queue, waarbij we wel functionaliteit toevoegen, en niet van te voren hoeven op te geven wat voor type elementen we in de Queue stoppen. De definitie van een Generic TQueue type kan als volgt zijn:
 type
   TQueue<AnyType> = class
   protected
    FList: System.Collections.Generic.List<AnyType>;
   public
    constructor Create;
    destructor Destroy; override;
    function Count: Integer;
    function AtLeast(count: Integer): Boolean;
    function Push(const itemT: AnyType): AnyType;
    function Peek: AnyType;
    function Pop: AnyType;
   end;
De implementatie van de TQueue methods zoals de Constructor en Destructor maken ook gebruik van de nieuwe syntax, als volgt:
 constructor TQueue<AnyType>.Create;
 begin
   inherited Create;
   FList := System.Collections.Generic.List<AnyType>.Create
 end;

 destructor TQueue<AnyType>.Destroy;
 begin
   FList.Free;
   inherited Destroy
 end;
Voor de implementatie van de onderliggende structuur om de generic types in op te bergen, kunnen we gebruik maken van een reeds bestaand Generic type uit het .NET 2.0 Rramework (waarmee ik laat zien dat we niet alleen zelf nieuwe Generic types kunnen maken, maar ook bestaande Generic types zoals de System.Collections.Generic.List kunnen importeren en gebruiken).
 function TQueue<AnyType>.Count: Integer;
 begin
   Result := FList.Count
 end;

 function TQueue<AnyType>.AtLeast(count: integer): Boolean;
 begin
   Result := FList.Count >= count
 end;

 function TQueue<AnyType>.Push(const itemT: AnyType): AnyType;
 begin
   FList.Insert(0, itemT);
   Result := itemT
 end;

 function TQueue<AnyType>.Peek: AnyType;
 begin
   Result := FList[FList.Count-1]
 end;

 function TQueue<AnyType>.Pop: AnyType;
 begin
   Result := Peek;
   FList.RemoveAt(FList.Count-1)
 end;
Het declareren en gebruiken van deze TQueue kan vervolgens in Delphi for .NET 2.0 op de manier en met de syntax die ik al eerder liet zien (zie volgende pagina):
 type
   TStringQueue = TQueue<string>;

 var
   S: TQueue<string>; // or TStringQueue;

 begin
   S := TStringQueue.Create;
   try
    S.Push('Delphi 2007 for Win32');
    S.Push('C++Builder 2007');
    S.Push(' CodeGear RAD Studio 2007');

    writeln(S.Pop);
    writeln(S.Pop);
    writeln(S.Pop);
  finally
    S.Free
   end
 end.
Met als resultaat de output die we zouden verwachten van een Queue:
  Delphi 2007 for Win32
  C++Builder 2007
  CodeGear RAD Studio 2007
Overgens worden Generics alleen ondersteund in Delphi for .NET 2.0, en niet in de Win32 versie van Delphi 2007 (maar wel in Delphi 2009).

Prijzen
CodeGear RAD Studio 2007 is beschikbaar in een Architect, Enterprise en Professional editie. Ik verkoop met name Electronic Software Delivery (ESD) edities, die je kunt downloaden en kunt installeren met een bijbehorend serienummer dat je ontvangt.


This webpage © 2006-2008 by webmaster drs. Robert E. Swart (aka - www.drbob42.com). All Rights Reserved.