Het heeft een poosje geduurd, maar nu is het dan zover. VO 2.7 ziet het levenslicht en lijkt de belofte 'Best VO version ever' waar te maken.

Geschiedenis
De meeste VO-ers weten nog wel hoe twee jaar geleden erg donkere wolken hingen boven het ontwikkelparadijs. Computer Associates zag er geen gat meer in een product verder te ontwikkelen waar geen winst aan te behalen viel. Gelukkig was CA bereid om de toekomst van Visual Objects in handen te geven van een VO-er in hart en nieren: Brian Feldman. Waarschijnlijk heeft de druk die er destijds van verschillende kanten is uitgeoefend hier mede een rol in gespeeld. Brian bracht VO 2.6 uit. Eigenlijk was dit VO2.5 c, met bugfixes door het oude CA-VO ontwikkelteam. Met steun van veel Third Party leveranciers wist Brian er een compleet en interessant pakket van te maken.
Nu hij de beschikking had over de broncode, bleek echter al snel welke problemen hij in het Grafx-Software huis gehaald had. Het CA ontwikkelteam compileerde de in C geschreven delen van VO in VC 5.0 met het laagste warning level. Die warning levels zijn er niet voor niets en hoe hoger het warning level waar je code zonder opmerkingen doorheen komt, des te beter heb je allerlei potentiële problemen ondervangen. Verder bleek de compiler nog het een en ander aan (16 bits!) inline assembler te bevatten. Dit werd de belangrijkste uitdaging: VO compileren met hoogste warning level en zoveel mogelijk assembler vervangen door C code.
Als toekomstvisie heeft Brian een VO 3.0 die zowel voor het Win32 als het .NET platform kan compileren. Als eerste en niet onbelangrijke stap daarin moesten de compiler en de runtime met MS-VC 7.1 gecomplieerd worden. VC7.1 is de C versie die Microsoft zelf ook gebruikt voor .NET.
Hoewel ik zelf eigenlijk weinig problemen heb met stabiliteit en bugs waar geen work-around voor is, resulteert het volbrengen van deze stappen alleen al in een veel beter product.
Brian formeerde een dev(dream)-team om zich heen met namen als Paul Piko, Robert van der Hulst, Don Caton, David Kuechler,John Parker en Frans de Wit. Alle VO-ers werden opgeroepen om bugs te rapporteren. Daarnaast mocht een ieder een verlanglijstje inleveren, zonder dat er overigens enige beloften aan gekoppeld werden. Met die lijstjes werd in ieder geval duidelijk welke uitbreidingen zoal gewenst werden.
De nieuwigheden
In de documentatie van VO 2.7 staat een indrukwekkende lijst issues die gefixed zijn. Daar zal ik nu geen aandacht aan besteden.
Wel wil ik een aantal in het oog springende vernieuwingen bespreken.

Fig. 1: VO 2.7 Project selector en meerdere projecten tegelijkertijd geopend
De huidige VO versie werkt met slechts één project tegelijk. Dat is geen beperking, want het is mogelijk VO 2.7 meerdere keren te starten. Elk eenmaal geopend project wordt gelocked en kan niet tegelijkertijd door een andere gebruiker geopend worden. In het dialoogscherm waarmee je projecten opent, kun je zien welke gebruiker op welk werkstation een bepaald project gelocked heeft. Handig om code tussen twee projecten uit te wisselen of te vergelijken, maar ook van groot nut als je een eigen subsysteem aan het ontwikkelen bent.
Verder kun je VO 2.7 draaien naast een vorige VO versie, een hele vooruitgang vind ik zelf.
Veel registerinstelling zijn vervangen door een ini file, en deze worden automatisch gebackupped.
Namen van een entity in de IDE kunnen nu zonder classname afgebeeld worden. Hierin heeft de gebruiker een keuze. De maximale lengte van een project, applicatie of een module is verhoogt naar 63. Het nut hiervan ontgaat me, eerlijk gezegd, maar ik denk dat er vast VO-ontwikkelaars blij mee zullen zijn.
De Sourcecode editor heeft nu een echte rechtermuisknop om te knippen, kopiëren en te plakken. Dit contextmenu is ook op te roepen met de functietoets F11

Fig. 2: List of Entities met GoTo Line
Verder is een Goto(linenumber toegevoegd aan het scherm List of Entities dat middels Ctrl-G beschikbaar is.
De menuEditor heeft er een property erbij gekregen: Toolbar Inherit From. Hier kun je dus een subclass van de toolbarclass ingeven. Handig als je een eigen Toolbar:AppendTipText methode wilt gebruiken, bijvoorbeeld in multi-language applicaties.
Bij het generen van baseclassen van een automation server is het nu mogelijk om een prefix op te geven. Dat komt van pas als je zowel MS-Word en MS Excel in een toepassing wilt kunnen gebruiken; beide hebben immers classes met dezelfde naam zoals _application.
De internet classes van VO waren wat beperkt in hun mogelijkheden. Deze zijn nu flink verbeterd en uitgebreid, zodat het in VO 2.7 mogelijk is applicaties te voorzien van multi-part en mixed email functionaliteit, email headers downloaden zonder de messagebody b.v.
De Window class heeft een aantal uitbreidingen van Owner-Align gekregen. Een van de meegeleverde samples laat zien hoe eenvoudig het nu is om controls op een scherm al dan niet te laten meesizen met het window, terwijl ze op de gewenste positie op het window blijven staan.
De DBF-viewe,r die deel uit maakt van de DBServer editor, heeft een XML export functie gekregen. Hiervoor is het wel noodzakelijk dat MS-XML parser 4.x is geïnstalleerd. De Windoweditor staat het nu toe dat fieldspecs worden toegekend aan op een dialogwindow geplaatste controls.
De gratis meegeleverde SDK bevat de sourcecode van de actuele VO versie en is nu inclusief de System- en Win32 API library.
De documentatie en de helpfiles zijn geheel geactualiseerd.
Aangezien de VO-DLL’s allemaal hernoemd zijn, is een DLL-probleem zoals nog al eens bij vorige updates voorkwam, uitgesloten.

Fig. 3: Grafx heeft veel nieuwe samples toegevoegd
Extra samples zijn toegevoegd. Zo krijg je nu kant en klare voorbeelden hoe je de extra functietoetsen op een Internet keyboard kunt ondersteunen, of hoe je in een edit control auto-complete kunt implementeren. Je krijgt een service manager als sample, waarmee je toepassing als service kunt toevoegen. Een ander voorbeeld laat een applicatie zien die zichzelf op de system tray plaatst, maar ook een uitgewerkt voorbeeld van een TCP/IP class, waarmee je een Ping kunt uitvoeren.
Tenslotte nog een uitbreiding die op de valreep is toegevoegd. Je kunt nu in de repository verschillende entities selecteren en daarvan de compiler-settings instelling. Dit vind ik zelf een reuze handige feature, omdat je nu in een keer die methods kunt selecteren die je in de debugger wilt bestuderen. Dit werkt perfect, zeker als je in elke method de volgende regel hebt staan (natuurlijk heb je hier een UDC voor!)
/
# IFDEF __DEBUG__
ALTD( )
#ENDIF
/
Dit is maar een greep uit de vernieuwingen die hebben plaatsgevonden. Belangrijkste is en blijft dat de repository ernstig stabieler is (ik heb tijdens het uitproberen bijv. niet een keer hoeven te herindexeren).
Maar is VO 2.7 nu ook sneller geworden? Op zich een goede vraag, maar het probleem is natuurlijk wat wil je precies gaan meten en hoe. Immers, bij vrijwel elk onderzoek kun je met succes de resultaten bestrijden door de onderzoeksmethode ter discussie stellen en dat is met benchmarking niet anders. En wat zeggen vervolgens de benchmark resultaten over het gedrag van jouw specifieke toepassing.
Ik ben hier wegens tijdgebrek niet uitvoerig ingedoken, maar wel heb ik gemeten dat bijv. een Aadd() functie ongeveer 50% sneller is geworden. Iets minder, maar wel duidelijk (+/- 20 % ) zijn rekenkundige functies Sin( ) en Sqrt() geworden. Een functie als Mod() is niet veranderd qua snelheid.
Met RDD gerelateerde zaken heb ik geen snelheidsverandering gezien. Executables van VO 2.7 zijn wel wat groter geworden (maar in sommige gevallen juist ook weer kleiner), maar daar staat tegenover dat het geheugen gebruik van een VO 2.7 app juist behoorlijk minder is. Ook hierbij geldt dat dit waarden zijn die ik in de praktijk tegenkwam en waarvan ik niet durf te stellen dat dit altijd zo zal zijn.

Fig. 4: Geheugengebruik onder VO 2.7
Tja, en dan de praktijk…
Ik heb een bestaande applicatie gepakt. Eerst moest ik wel VO2ADO en bBrowser ook in VO 2.7 compileren. (Dat is wel een voordeel van een Pro-versie) . Vervolgens heb ik mijn applicatie gecompileerd. Geen warnings, geen foutmeldingen, geen problemen. Alles compileerde in één keer goed en de applicatie draaide probleemloos.
Kortom, dit is een VO versie waar we lang op hebben moeten wachten, misschien iets te lang gezien de .NET ontwikkelingen. Maar de ruim voldoende nieuwe features, de zeer grote stabiliteit, het verbeterd gebruiksgemak en de extra 3party tools maken dat deze versie wat mij betreft nog jaren meekan. Want als ik naar mijn eigen business kijk, is het bouwen van Win32 clients nog steeds een lucratieve bezigheid en ik verwacht dat in het marktsegment waarin b.v. ik opereer dat ook nog wel enige tijd zo zal blijven.