VO 2.8, de beste VO ooit.
Op het moment van schrijven moet ik het nog doen met een beta-versie, maar ik ben e rzeker van dat als je dit leest, VO 2.8 gereleased is. De vorige publieke build (versie 2740) is zo’n twee jaar geleden uitgekomen, dus kan ik me voorstellen dat sommigen reikhalzend uitkijken naar nieuwe ontwikkelingen. Maar dit geldt vast niet voor iedereen, want deelnemers aan het VOPS programma hebben de nieuwe ontwikkelingen op de voet kunnen volgen, en dat zijn er nogal wat (zowel nieuwe ontwikkelingen als VOPS deelnemers).
VO 2.8 is vooral gericht op het verhogen van productiviteit. Een completere editor, uitbreidingen aan de debugger, en veel code-optimalisatie op alle fronten voor verbeterde stabiliteit en performance zijn daarvan het bewijs.
Ik zal proberen de belangrijkste vernieuwingen hier te behandelen.
Compiler / Linker
De compiler is weer strikter geworden: nieuwe warnings en errors zijn toegevoegd, zodat waar mogelijk de compiler voorkomt dat runtime fouten ontstaan. De gegenereerde machinecode is verder geoptimaliseerd. De linker geeft nu duidelijke redenen op waarom een link ‘failt’ .
De snelheid waarmee Autotype stukken code in de editor plaatst, is verrassend hoog
Source Code Editor.
Dit is een van de meest in het oog springende vernieuwingen. De oude SCE was een van de oorzaken van menige Repo-crash en is vervangen door een editor die gebaseerd is op de Codemax-editor. Naast verbeterde stabiliteit brengt deze vervanging ook een aantal leuke nieuwe features met zich mee. Zo is b.v.. de VOPP uitbreiding op de SCE overbodig geworden. Autotype is nu een onderdeel van de editor zelf, evenals b.v. indenting van de sourcecode.
Autotype is geheel en al te configureren middels het bestand AUTOTYPE.TXT. Je vindt dit bestand in de \BIN directory. Een krachtige feature is de mogelijkheid om te werken met nested templates. Zo kun je bijvoorbeeld één en dezelfde commentaarheader gebruiken in verschillende method-templates.
HEAD;\t//Description: \r\t// Parameters: \r\t//
Returns :\r
METL;METHOD \c() AS LOGIC PASCAL CLASS \m \r\%HEAD \r\
METI;METHOD \c() AS INT PASCAL CLASS \m \r\%HEAD \r\
De snelheid waarmee Autotype zelfs grote stukken code in de editor plaatst is trouwens verrassend hoog!
Een andere aardige feature van de nieuwe editor is Keyword Matching. Bij elkaar horende Keywords van bijv. een IF-ENDIF of een CASE- ENDCASE worden door de editor gemarkeerd, hetgeen de overzichtelijkheid van met name geneste statements ten goede komt. Een zelfde functionaliteit geeft de Brace Matching.

Fig. 1: Keyword matching in de nieuwe editor
Ook kun je eigen keywords (bijvoorbeeld UDC’s) toevoegen en zelfs paired-keywords, zodat de editor indent en outdent.
Zoeken in de broncode is sterk verbeterd. Met een en dezelfde ‘Super Find’-dialoog zoek je in je geopende entity tot en met de volledige Repo. Desgewenst kun je daarbij gebruik maken van Regular expressions. Gevonden coderegels zijn te voorzien van een bookmark, zodat na het sluiten van het zoekvenster eenvoudig heen en weer genavigeerd kan worden tussen de gevonden regels.

Fig. 2: Super Find is een Super Friend!
De nieuwe editor ondersteunt ook regelnummers. Met Ctrl-Shift-L kunnen deze aan en uit gezet worden. Minder fraai hierbij wel is dat de regelnummers relatief zijn m.b.t. de geopende entities, dwz dat niet elke methode met regelnummer 1 begint. Hiermee is de overeenkomst tussen een regelnummer in de editor en die bijv. in de debugger afwezig.
Wel handig zijn de comboboxen bovenin de editor. De rechter combobox geeft informatie over de code waar de cursor zich bevindt. Als dat een constante is, wordt de waarde genoemd. Is het een functie, dan wordt de functiedeclaratie met de parameters getoond, etc.
Voor een ComboxEx is gekozen, omdat het daarmee eenvoudig is een icon af te beelden voor de tekst. Maar een ‘echte’ combobox is het niet, er valt immers niks te selecteren.
De linker combobox heeft daarentegen wel wat te selecteren. Deze control is gevuld met de entities in de editor en maakt snel navigeren daartussen mogelijk.
Verdere verbeteringen ten opzichte van de oude SCE zijn de tool- en tokentips, die nu wel goed werken
Zo heeft de debugger nu conditional breakpoints
Debugger
De debugger is stabieler geworden. Deze maakt nu gebruik van de nieuwe editor en is een beetje een Visual Studio look alike. Maar niet alleen visueel zijn er overeenkomsten, zo heeft de debugger b.v. een hele makkelijke feature als conditional breakpoints met VS gemeen.

Fig. 3: Conditionele breakpoints in de debugger
Hiermee kunnen we bijvoorbeeld een hitcounter plaatsen in code die 120 keer goed wordt uitgevoerd, maar daarna niet. Ook kunnen we een voorwaarde verbinden aan een breakpoint. Ik kan me bijvoorbeeld voorstellen dat je een breakpoint wilt activeren op odbServer:EOF. Met deze extra mogelijkheden voor breakpoints wordt debuggen een stuk eenvoudiger!
Overige IDE wijzigingen
Binnen de Errorbrowser is nu eenvoudig instelbaar welke warnings wel en welke niet getoond moeten worden. De getoonde lijst kan geprint dan wel opgeslagen worden op disk.
Alle IDE settings zijn nu via een dialoog te benaderen. Hiermee zijn alle ‘hidden’ settings, die eerst alleen bij enkelen bekend waren, voor iedereen eenvoudig te benaderen.
Belangrijk is ook de verbeterde codegeneratie voor Ole baseclasses. Niet alleen is nu de voortgang van e.e.a. duidelijker, maar belangrijker zijn de veranderingen in het code generation model. Dit samen met de verbeterde SDK OLE classes zorgen ervoor dat OLE controls, ook de meer exotische, veel beter ondersteund worden en voor minder problemen zorgen. Om van de verbeterde gegenereerde code gebruik te maken, dien je wel even opnieuw de code te generen!
GUI classes
Heel veel kleine verbeteringen op dit gebied, zoals het splitwindow dat nu als control op elk ander window geplaatst kan worden. En wat te denken van de mogelijkheid om listviewSubItems van icons te voorzien? De aangepaste Todo Eexplorer sample die met VO2.8 komt laat de mogelijkheden hiervan goed zien:

Fig. 4: Todo sample icons in listviewSubItems
Iets waar veel VO-ers tegenaan liepen was het ontbreken van een mogelijkheid een lege datum weer te geven in de DateTimePicker. Niet echt een vernieuwing, maar in VO 2.8 werkt het.
Wel nieuw is de mogelijkheid om pagina’s van een tabcontrol uitgesteld te instantiëren, hetgeen de snelheid vooral ten goede komt als er gebruikt gemaakt wordt van veel tabpages.
RDD Classes
De belangrijkste verandering aan de RDD classes is wel de snelheidswinst die geboekt is door minder vaak van workarea te wisselen. Tot 2.8 werd de workarea na elke dbServer:Method teruggezet, terwijl dat alleen noodzakelijk is als je object georiënteerd DBF access mixt met de traditionele workarea georiënteerde DBF-access.
Dit terugzetten van de workarea beïnvloedt de performance aanzienlijk en als je alleen gebruik maakt van dbServers, is dit dus overbodig. Maar aangezien het mogelijk moet blijven om in mixed mode te werken, is hiervoor een global switch toegevoegd:
DbSetRestoreWorkarea( lEnable)
De default setting is FALSE, dus standaard worden workarea’s niet teruggezet.
Verder is de foutafhandeling in de dbServer class herzien. Soms werd namelijk de werkelijke oorzaak van een fout (melding) verborgen door de interne errorhandling en dit is nu verholpen.
SQL Classes
Ook de SQL Classes zijn grondig gerefactored. Nu snap ik zelf niet zo goed waarom je deze classen überhaupt zou willen gebruiken, omdat ze met de beschikbaarheid van VO2ADO eigenlijk overbodig zijn geworden. Maar goed, ze worden gebruikt en voor sommige databases is geen goede ADO/Oledb provider beschikbaar…
Belangrijkste wijziging is het verwijderen van de interne buffering om een scrollable cursor te emuleren. VO gebruikt nu de ODBC cursor hiervoor en als die niet scrollable is, word je middels een foutmelding daarvan op de hoogte gebracht.
Overige vernieuwingen en verbeteringen.
Eigenlijk zijn dat er teveel om allemaal op te noemen.
Veel ontwikkelaars die in een team samen aan één project werken, zijn erg tevreden over de verbeterde Source Code Control. Dit werkt nu echt goed.
De helpfiles zijn nu allemaal in CHM-formaat en er is duidelijk veel aandacht geweest om zowel bestaande als de nieuwe features zo goed mogelijk te documenteren. Zo is er nu een whitepaper over Runtime Memory Management aan de helpfile toegevoegd, waarvan eigenlijk ieder serieuze VO ontwikkelaar kennis zou moeten nemen
3PP
Als je wilt upgraden, is het natuurlijk van belang te weten of de third parties klaar zijn voor VO 2.8. Natuurlijk heb je een broncode versie van jouw geliefde product, zodat je desnoods zelf een voor een upgrade kunt zorgen (….), maar ik kan je geruststellen. ReportPro 2.x en 3.x (beide inclusief PDF support) Classmate, VO2Ado, bBrowser , de ComSDK, allemaal hebben ze een VO 2.8 versie van hun product beschikbaar, zodat je direct aan de slag kunt!
Conclusie
Ik heb er nooit een geheim van gemaakt dat wat mij betreft Grafx zou mogen stoppen met verdere ontwikkeling van VO 2.7. Alle aandacht zou dan gevestigd kunnen worden op Vulcan.NET. Niet omdat er niks te verbeteren zou zijn, maar omdat in een dergelijke keuze in mijn ogen meer toekomst zit. Brian Feldman is echter een andere mening toegedaan en met deze VO2.8 laat hij zien volledig achter VO-32-bits te staan en deze vooralsnog te blijven ondersteunen.
Zoals gezegd beperk ik me in dit artikel tot de vernieuwingen. Daarmee doe ik VO2.8 geen recht, want veel, heel veel zaken zijn verbeterd. Features die eerder wel aanwezig waren, werken nu wel goed, alles werkt net even directer, sneller en bovenal stabieler. Crashes, waar overigens ook andere ontwikkelomgevingen mee te maken hebben, komen aanzienlijk minder vaak voor.
VO2.8 maakt het met de nieuwe editor, de stabielere Repo en alle andere wijzigingen in ieder geval veel aangenamer om good-old VO-applicaties te onderhouden. De policy dat upgraders naar VO 2.8 in ieder geval gedurende 1 jaar gratis de patches zullen kunnen ontvangen draagt daar zeker toe bij.
Upgaden? Waarom upgraden als een jaar VOPS goedkoper is als VO2.8 + Vulcan.NET bij elkaar?