Dette er en utskriftsvennlig versjon

Test: CodeGear RAD Studio 2007

Det smarte alternativet?

Borland skilte ut avdelingen for utviklingsverktøy i 2006 til datterselskapet CodeGear. RAD Studio 2007 er det nyeste programmet fra dette selskapet.

Side 1: Introduksjon

De siste årene er Microsoft blitt en mer dominerende leverandør av utviklingsverktøy på Windows plattformen, spesielt med de siste versjonene av Visual Studio for .NET. Borland har hele tiden hatt gode (og ofte teknisk bedre) alternativer i Delphi og C++Builder.

I 2006 ble avdelingen for utviklingsverktøy skilt ut i et eget datterselskap, CodeGear, slik at Borland kunne konsentrere seg om verktøy for applikasjonslivsyklus (såkalt ALM – Application Lifetime Management). Dette har medført mer ressurser og bedre fokus på hva utviklere på Windows plattformen virkelig trenger. Siste produkt fra CodeGear er RAD Studio 2007, som er en samling av verktøy (eller personligheter) som inneholder Delphi for Win32, Delphi for .NET 2.0 og C++Builder for Win32.

RAD Studio 2007

CodeGear legger i disse dager siste hånd på et produkt med et langt og stolt slektstre. RAD Studio 2007 bygger videre på Delphi 2007 for Win32 som ble sluppet i februar 2007, og C++Builder 2007 som ble sluppet i mai 2007. Den inneholder nå også en oppdatert versjon av Delphi for .NET som endelig fungerer mot .NET 2.0 og som bl.a. gir tilgang til generisk programmering.

Bilde 1 - Installering av CodeGear RAD Studio 2007
Bilde 1 - Installering av CodeGear RAD Studio 2007

Andre nyheter er støtte for ASP.NET 2.0 for rask utvikling av dynamiske websider generert fra databaser og bruk av såkalt AJAX (Asynkron JavaScript og XML) for rask oppdatering av deler av websiden (slik som f.eks. Google og Facebook bruker). Blackfish er navnet på en ny databasemotor som kjører helt og holdent i .NET og dermed kan brukes overalt hvor .NET kjører. Hjelpesystemet er oppgradert og raskere, innholdet og indekseringen er kraftig forbedret fra tidligere versjoner.

Side 2: Generisk programmering

Generisk programmering

Generisk programmering gjør det enklere å lage og bruke klasser for beholdere som fungerer med mange typer innhold (forskjellige type klasser, strukturer, interface osv). Det er en slags meta-programmering der typene som skal brukes på felt, parametre og returverdier kan spesifiseres uavhengig av implementasjonen. Det fører til enklere gjenbruk av algoritmer, strukturer og kode samtidig som det bedrer type-sikkerheten og effektiviteten.

type TStack<T> = class private type Node<U> = class Value: U; Next: Node<U>; constructor Create(AValue: U); end; private Head: Node<T>; public procedure Push(Value: T); function Pop: T; end; constructor TStack<T>.Node<U>.Create(AValue: U); begin inherited Create; Value := AValue; end; procedure TStack<T>.Push(Value: T); var NewNode: Node<T>; begin NewNode := Node<T>.Create(Value); if not Assigned(Head) then Head := NewNode else begin NewNode.Next := Head; Head := NewNode; end; end; function TStack<T>.Pop: T; begin if Assigned(Head) then begin Result := Head.Value; Head := Head.Next; // Note: no need to free nodes in .NET end else Result := Default(T); // User error end;

Kode-eksempel 1 - En generisk implementasjon av en klassisk stack struktur

Kode-eksempel 1 viser hvordan man kan skape nye generiske klasser. Her er det en klassisk stack struktur som er implementert ved hjelp av en enkel lenket liste. Hver node i listen inneholder en verdi og en referanse til den neste noden i listen. Det er typen av verdien som kan lagres i nodene og dermed i stack’en som styres av den generiske parameteren T. Ved bruk av Stack klassen, byttes T parameteren ut med et faktisk argument som må være en kjent type i Object Pascal – f.eks. integer, string eller en bruker definert type (TPerson).

Her er et eksempel på hvordan Stack klassen kan brukes.

procedure Test1; var Stack: TStack<integer>; begin Stack := TStack<integer>.Create; Stack.Push(13); Stack.Push(42); Stack.Push(0); Writeln(Stack.Pop); Writeln(Stack.Pop); Writeln(Stack.Pop); end;

Kode-eksempel 2

Her skaper vi en Stack av integer (eller hel-talls) verdier. Den samme klassen kan brukes som en Stack av streng verdier, bare ved å bytte ut T parameteren med string – se kode-eksempel 3.

procedure Test2; var Stack: TStack<string>; begin Stack := TStack<string>.Create; Stack.Push('CodeGear'); Stack.Push('RAD Studio 2007'); Stack.Push('Rocks'); Writeln(Stack.Pop); Writeln(Stack.Pop); Writeln(Stack.Pop); end;

Kode eksempel 3

Side 3: Webteknologier

Bred støtte for web-teknologier

RAD Studio inneholder flere rammeverk som støtter de fleste sider innen web-utvikling.

ASP.NET 2.0

ASP.NET 2.0 med støtte for AJAX er Microsofts siste svar på Web 2.0 bølgen. Dette er et rammeverk som inneholder mye standardfunksjonalitet som mange web-steder vil trenge (login, lagring, caching, osv). Med Delphi for .NET 2.0 kan du nå utvikle avanserte, dynamiske web-sider og -steder på en relativt enkel måte. Det følger med mange maler (templates) som gjør det enkelt å komme i gang – og man kan raskt endre utseende på websidene ved å endre på en sentral .CSS fil (Cascading StyleSheets).

Bilde 2 - Utvikling av ASP.NET 2.0 applikasjoner
Bilde 2 - Utvikling av ASP.NET 2.0 applikasjoner

IntraWeb

I tillegg finnes det et annet rammeverk for web-utvikling som heter IntraWeb. Her programmerer man tett opp mot modellen man er vant til med fra standard Win32 applikasjoner. Dette gjør terskelen lavere for å gå over til web-utvikling. IntraWeb er spesielt godt egnet til å utvikle små applikasjoner for web, leveres både for Win32 og .NET og støtter også AJAX teknikker (for raske og interaktive sider).

WebBroker og WebSnap

I tillegg støttes de eldre rammeverkene WebBroker og WebSnap. WebBroker er en relativt tynn abstrahering av forskjellige webserver APIer som ISAPI, CGI og Apache moduler. Vi har brukt denne med visse utvidelser og optimaliseringer med stort hell (tilgjengelig som WebBroker on Steroids). WebSnap er modell for å generere database-sentriske websteder med støtte for enkel scripting i HTML maler – en slags tidlig variant av ASP.NET for Win32. Denne utvikles ikke aktivt lenger, men gamle prosjekter fungerer fremdeles fint.

Indy

På et lavere nivå følger en pakke som heter Indy – denne gir komplett tilgang til internett protokoller som HTTP, FTP, SMTP, Ping, Sockets og så videre. Disse komponentene kan f.eks. brukes i egen-utviklkede servere eller klienter som skal kommunisere over internett. Vårt firma har bl.a. brukt Indy til å utvikle en server som streamer realtidskurser til mobiltelefonklienter skrevet i Java.

Side 4: Databasetilgang

Databasetilgang

Delphi har fra første versjon hatt glimrende støtte for et bredt utvalg av databaser. Denne trenden fortsetter og utvides i denne versjonen.

Blackfish SQL

Som nevnt tidligere følger det med et nytt produkt som heter Blackfish SQL. Dette er en managed .NET database server som er uhyre lett å installere og drifte. Den støtter standard SQL, transaksjoner samt å skrive kode (såkalte Triggers, User Defined Functions og Stored Procedures) direkte i et valgt .NET språk (Delphi, C# eller VB.NET). De fleste andre databaser tvinger deg til å skrive i et annet språk for å gjøre slike avanserte ting.

Etter installasjon av RAD Studio, kjører Blackfish SQL automatisk som en service i bakgrunnen. Det gjør det enkelt å komme i gang med å definere databaser og tabeller osv. Dersom du ikke kommer til å bruke Blackfish, kan du slå av servicen i kontrollpanelet.

Blackfish er et nytt produktnavn, men bygger faktisk på et produkt som har modnet over flere år, først kjent som JDataStore, så NDataStore. Den finnes i to utgaver Blackfish SQL for Windows og Blackfish SQL for Java. Begge er binært kompatible i lagringsformat (database filer kan kopieres mellom versjonene) og på protokollnivå. En liten genistrek CodeGear har gjort her er å utvikle en Java-til-C# kompilator som de bruker for å vedlikeholde de to versjonene fra ett sett med kildekode (i Java).

Blackfish støtter fullt ut Unicode og kan kjøres i én av tre modus – enten som en Windows Service, som en Standalone Server eller in-process med din egen applikasjon. Det siste er spesielt aktuelt for å erstatte enkle lokale databaseformater som dBase og Paradox, og gir ekstra god ytelse.

Versjonen som følger med CodeGear Studio kan distribueres fritt med utviklede applikasjoner, men lisensen har begrensninger med henhold til antall samtidige brukere (1 for Pro, 5 for Architect), utnyttede CPUer (1) og størrelse på database filen (512 MB for Pro, 2 GB for Architect). Det betyr at den er fin til utvikling og til lokale applikasjoner, men dersom du skal kjøre en sentral database-server med mange samtidige brukere, må du kjøpe en egen lisens for dette.

DbExpress 4

dbExpress er CodeGears arkitektur for tilgang til databaser. Det er tilgjengelig for både native og managed programmering – og man kan dermed enkelt flytte og gjenbruke kode på tvers av Win32 og .NET plattformene. Versjon 4 er oppgradert til å utnytte ADO.NET 2.0 som følger med i .NET 2.0. I tillegg støtter dbExpress 4 direkte koblinger til en rekke forskjellige database servere, inkludert Microsoft SQL Server, Oracle, IBM DB2, Informix, Sybase og SQL Anywhere.

Personlig jobber jeg sjelden direkte mot databaser (vi har våre egne servere med egne APIer), så jeg har ikke så stor erfaring med disse teknologiene. Tradisjonelt har både Microsoft og Borland/CodeGear kommet med stadig nye og forbedrede teknologier for å få tilgang til databaser, men CodeGear har vært flinke til å holde program¬merings¬grensesnittet og database komponentene som programmereren bruker, bakover-kompatible.

Side 5: VCL og ECO

VCL for .NET med Vista støtte

Delphi 2007 for Win32 var trolig det første RAD verktøyet som ga enkel tilgang på de nye brukergrensesnitt mulighetene i Windows Vista. Dette inkluderer støtte for glass-effekt i vinduer (og ikke bare i rammer), support for nye standard dialoger (for å åpne og lagre dokumenter, osv), og enkel tilgang til den nye modellen for å bygge opp meldings-dialogbokser med brukervennlig grensesnitt.

Denne nye funksjonaliteten er nå også tilgjengelig for VCL for .NET – en managed versjon av den samme VCL som gir Delphi de store fordelene i Win32. Internt ser det faktisk ut at CodeGear bruker felles VCL kildekode for de to plattformene – bare med strategisk plasserte IFDEF’er for å skille mellom plattformforskjeller.

Bilde 3 - Debugging av en VCl.NET applikasjon
Bilde 3 - Debugging av en VCl.NET applikasjon

ECO IV

ECO er på mange måter juvelen i kronen – en godt skjult hemmelighet for de ikke-innvidde. ECO står for Enterprise Core Objects og er et rikt rammeverk for bygging av modell-drevne applikasjoner. Når man utvikler en ECO-basert applikasjon jobber man på et mye høyere nivå enn vanlig. Man definerer klasser, felt og relasjoner med en UML (Unified Modelling Language) designer og ECO genererer den tilsvarende Delphi koden.

Bilde 4 - Design av ECO klasser og relasjoner i UML
Bilde 4 - Design av ECO klasser og relasjoner i UML

Ved programmering jobber man direkte med objekter i minnet – lagring og mapping til database skjer automatisk. Man kan også enkelt koble ECO data til visuelle eller ASP.NET komponenter slik at man slipper å skrive kjedelig ”lim-kode” mellom brukergrensesnitt og databasen. For avansert spørringer brukes OCL (Object Constraint Language) som er en objekt-orientert variant av SQL.

ECO er nå i sin fjerde generasjon og finnes kun på .NET plattformen. Det er en videreutvikling av Bold for Win32. ECO utvikles nå av det svenske selskapet Capable Objects og vil derfor i tiden fremover komme i nye versjoner som ikke nødvendigvis er knyttet til nye Delphi versjoner. Utvilsomt et kraftig og imponerende verktøy som lar programmereren konsentrere seg om å løse den aktuelle problemstillingen og ikke behøver å skrive generelle funksjoner (lagring, caching, mapping mellom database og objekter, mapping mellom objekter og GUI komponenter) fra grunnen av.

Side 6: Hjelpesystem og fokus

Hjelpesystem – på bedringens vei

Den integrerte hjelpen i Delphi har vært veldig bra – til om med i Delphi 7. Fra Delphi 8 og frem til Delphi 2006 er hjelpesystemet byttet ut med Microsoft Document Explorer, Siden da har det vært problemer både med hastighet, funksjonalitet og innhold, og CodeGear har (fortjent nok) fått mye tyn for dette. Selv har jeg stort sett brukt hjelpen fra Delphi 7 når jeg har hatt behov for det.

Bilde 4 - Forbedret hjelpesystem og -innhold
Bilde 4 - Forbedret hjelpesystem og -innhold

Sakte med sikkert har dette bedret seg og i RAD Studio 2007 nærmer endelig kvaliteten på hjelpen seg nivået i Delphi 7. Mange av kode-eksemplene er tilbake, F1 fungerer nå på de fleste nøkkelord og metoder og hastigheten er akseptabel. En av grunnene til dette er at de har valgt å skille ut Microsofts .NET og Windows dokumentasjon fra CodeGears Delphi, VCL og C++Builder dokumentasjon. Smart valg!

Forbedret fokus

Tidligere hadde Borland/CodeGear et produkt som het C#Builder som ga full støtte for C# utvikling mot .NET 1.1. Dette ble smeltet inn i Delphi/BDS 2005 og 2006. Siden har man funnet ut at man skal fokusere på sine egne unike løsninger i Delphi og C++Builder og i RAD Studio 2007 er den fulle støtten for C# applikasjoner med design av WinForms vinduer fjernet. WinForms er Microsofts første grafiske applikasjonsrammeverk for .NET, men det er nå blitt lagt mer eller mindre død. Det er derfor ikke overraskende at CodeGear velger å droppe WinForms helt – også for Delphi.NET.

Legg merke til at man fremdeles kan skrive og kompilere C# kode – og dermed enkelt bruke f.eks. eksisterende prosjekter og moduler (assemblies) i C#. Den samme støtten finnes faktisk også for VB.NET (Visual Basic). Jeg synes denne refokuseringen er en riktig avgjørelse – CodeGear kan konsentrere seg om sine sterke sider og legge mer av ressursene ned i forbedring av Delphi og C++Builder.

Unik blanding; RAD for native Win32 og .NET, Vista støtte

CodeGear RAD Studio 2007 er nå det eneste verktøyet som gir tilgang til rask applikasjonsutvikling (RAD) i både native Win32 (Delphi og/eller C++) og .NET 2.0 (Delphi). Det er også det eneste verktøyet som gir enkel tilgang til de nye GUI mulighetene i Windows Vista (glass-effekt på vinduer, nye dialogbokser, åpne og lagre dialoger osv). Mange trodde lenge at .NET ville erstatte native utvikling for godt – nå innrømmer selv Microsoft at for mange applikasjoner og situasjoner er en native løsning best (en liten indikasjon er at 99 % av alle programmer og moduler som følger med Vista er native kode).

I denne sammenhengen er CodeGears verktøy i en unik posisjon, og med fremtidige versjoner som lover generisk programmering for native Win32 Delphi og Delphi versjon for native Win64 programmering, i tillegg til fortsatt satsing og støtte for nye .NET teknologier, ser fremtiden lys ut.

Bilde 5 - Design og utvikling av en VCLNET applikasjon
Bilde 5 - Design og utvikling av en VCLNET applikasjon

Delphi programmerere har lenge vært bortskjemt med ypperlig bakoverkompatibilitet, og muligheten til å ta vare på det som er investert i eksisterende kode. Det ser ut til at vi vil fortsette å bli bortskjemt også i fremtiden. På 80-tallet sa man at man ikke kunne gjøre feil ved å velge IBM – på mange måter har Microsoft kommet i den samme situasjonen for Windows utviklingsverktøy i dag. Men det viser seg at de smarte velger verktøy som gir de en langsiktig, strategisk fordel – jeg tror at RAD Studio fra CodeGear er en slik løsning for de innvidde og smarte.

Side 7: Miljø og fremtiden

Et miljø uten sidestykke

Selve RAD Studio IDE’en (Integrated Development Environment) gir deg et avansert, brukervennlig og utvidbart miljø som du raskt vil føle deg hjemme i. I tillegg er selve Delphi og C++Builder miljøet som Borland/CodeGear og deres brukere har klart å bygge opp igjennom mange år både internasjonalt og her hjemme i Norge, veldig imponerende.

F.eks. kan du legge ut et spørsmål eller en problemstilling på en av de relevante nyhets¬gruppene under borland.public.delphi og raskt få svar fra en av de mange hundre som besøker gruppene daglig. Bare i Oslo er det nå over 120 medlemmer av Oslo Delphi Club som ble startet opp for under ett år siden. Det finnes massevis av gratis kode og komponenter i tillegg til kommersielle komponenter og kode-bibliteker av imponerende bredde og kvalitet.

Personlig har jeg lang og god erfaring med bruk av Delphi i profesjonell sammenheng. Jeg har jobbet i bedrifter som har brukt Delphi som et nøkkelverktøy for å utvikle løsninger for skatteberegning og –skjemautfylling (i Akelius), finansinformasjon (i Falcon og Reuters), kunderelasjonsbygging, CRM (i Million Handshakes) og sist men ikke minst finansinformasjon og online aksjehandel (med produktet The Online Trader i Infront). Hovedfokus har hele tiden vært på native Win32 klient applikasjoner og bruk av Delphi har gitt oss et klart fortrinn i forhold til mange av konkurrentene.

Fremtiden – Unicode, Generics og Win64

Som kjent kan ingen si noe sikkert om fremtiden, men CodeGear har en såkalt roadmap som indikerer hva de planlegger i tiden fremover.

Planen strekker seg over 2008 og 2009 og inneholder kodenavn for nye versjoner;

  • Tiburon utvider Delphi Win32 og .NET med full støtte for Unicode, Generics i Win32, og oppdatering av VCL.
  • Barracuda er tilsvarende versjon for C++Builder med bedret kompilator, ny VCL med Unicode, medfølgende Boost template bibliotek m.m.
  • Commodore er prosjektnavnet på å støtte native 64-bits utvikling på Windows (Win64) – både på Delphi og C++ kompilator og VCL nivå.

Videre inkluderer planene punkter for å forenkle mulighetene til å utnytte multi-core maskiner med fler-tråds programmering, utvikling for små enheter (PDA, mobil), interaktive web-applikasjoner (RIA), med mere.

Det ser ut til at fremtiden til Delphi, C++Builder og CodeGear er lysere enn på lang tid.

Side 8: Konklusjon

Konklusjon

Dette er den beste og mest komplette versjonen av Delphi noensinne. CodeGears RAD Studio 2007 støtter utvikling av alt fra raske, små og brukervennlige Win32 applikasjoner med grafisk brukergrensesnitt (GUI) i Delphi og/eller C++Builder Win32 til moderne og avanserte websider med ASP.NET med AJAX.

For eksisterende Delphi utviklere som vil bruke .NET plattformen, er denne versjonen et must. Dersom du fremdeles sitter på en eldre Delphi versjon, bør du absolutt oppgradere for å få med deg alle de nye godbitene og de produktivitetsøkende hjelpeverktøyene som følger med. Delphi 2007 brukere som bare er interessert i Win32-utvikling, bør kanskje vente til neste versjon som skal gi generics også til native utvikling (men dersom du har vært så smart å kjøpe software-abonnement, vil du motta RAD Studio 2007 ”gratis”).

I sin tid designet Niklaus Wirth Pascal som et opplæringsverktøy. Delphi har en avansert utgave av Pascal som bygger videre med objekt-orientert programmering, en moden komponent modell og nå også generisk programmering (foreløpig bare i .NET). CodeGear tilbyr alt fra gratis versjonen Delphi Explorer til den komplette pakken RAD Studio 2007 Architect Edition. Her bør studenter, skoler og utdanningsinstutisjoner se mulighetene. Det finnes et stort behov for dyktige Delphi programmerere – det er moro å jobbe med og gir bra betalt ;).

Delphi gir tilgang til en enorm bredde av teknologier – alt fra lavnivå maskinspråk programmering med BASM (Built-in Assembler), via klassisk strukturert program¬mering, til objekt-orientert programmering, til generisk programmering og rammeverk som VCL med full Vista-støtte, ECO, ASP.NET 2.0, databasetilgang osv.

Anbefales! CodeGear RAD Studio kan gi deg og ditt firma en ekstra fordel!