Der C++Builder ist bekannt als Entwicklungsumgebung zum Programmieren von Windows-Anwendungen in der Sprache C/C++. Bis zur Version 6 konnte man ihn eigentlich immer als „Delphi für C++-Programmierer“ bezeichnen, da die Funktionalität in beiden IDEs nahezu gleich war. In der Regel kam die Delphi-Version etwas früher auf den Markt als die C++-Version, doch der Hauptunterschied war nur die Sprache, in der entwickelt wurde. Das änderte sich nach der Version 6. Delphi machte große Sprünge nach vorne, es erschienen mehrere neue Versionen, doch der C++Builder folgte nicht mehr. Es kam allerdings der C++BuilderX heraus, aber der verfolgte, wie bereits angemerkt, ein anderes Konzept.
Mit dem Borland Developer Studio 2006 ist nun auch endlich wieder ein neuer C++Builder herausgebracht worden, der ganz im Sinne der alten Tradition bis auf die Sprache sehr viel Ähnlichkeit mit der aktuellen Delphi-Version hat. Man muss hier allerdings deutlich betonen: Es bestehen diesmal, im Gegensatz bis zur Version 6, deutliche Unterschiede im Funktionalitätsumfang zwischen Delphi für Windows 2006 und dem C++Builder 2006. Im Folgenden sollen daher die Neuigkeiten des C++Builder 2006 (präzise: Borland Developer Studio 2006 mit installiertem Update 1, C++ Personality) im Vergleich zum C++Builder 6 beschrieben werden.
Kompatibilität
Eine sehr wichtige Frage, die es eigentlich immer bei Nachfolger-Versionen zu beantworten gilt, ist die Frage der Kompatibilität. Der C++Builder 2006 verwaltet seine Projekte anders als der C++Builder 6, es werden andere XML-Dateien angelegt etc., aber der Projektimport von C++Builder-6-Projekten klappte in den vorliegenden Fällen problemlos. Man wird beim Öffnen eines entsprechenden Projekts darauf hingewiesen, dass die BPR-Datei auf Version 10.0 aktualisiert wurde, und im Meldungsfenster wird eine Warnung ausgegeben, dass eine „Option M (Pascal Compiler)“ nicht erkannt wurde. Dies stellt aber keine Einschränkung dar, und somit ist der Import vollzogen.Beim Importieren, Kompilieren und Linken der hier getesteten Projekte traten keine Probleme auf. Auch fremde Lib-Dateien wurden in der Regel ohne Schwierigkeiten vom Linker eingebunden, mit der Einschränkung, dass weiterhin das Problem mit den unterschiedlichen Formaten besteht, in denen Lib-Files auftauchen können (Stichwort COFF- und OMF-Format). Beim C++Builder 2006 findet man zu diesem Thema, wie auch beim C++Builder 6, das Tool „Coff2Omf“ im BIN-Verzeichnis, welches dann in der Mehrzahl der Fälle Abhilfe schaffen kann.
Die IDE
Zunächst soll erst einmal die neue Oberfläche des C++Builders 2006 vorgestellt werden. Da alle Personalities des Developer-Studios die gleiche Oberfläche benutzen, ist die der C++-Personality natürlich nicht anders und damit vielleicht schon von vorherigen Artikeln über das Studio bekannt. Sie soll hier trotzdem noch einmal kurz beschrieben werden.Am oberen Bildschirmrand befindet sich wie üblich das Hauptfenster mit dem Hauptmenü sowie all den bekannten Buttons wie PROJEKT ÖFFNEN oder START, wie man es von den Vorgängerversionen bereits gewohnt ist. Neu wird es dann aber schnell mit all den anderen Fenstern. Beim Default-Desktop sieht man am linken Bildschirmrand das Strukturfenster (welches eine Art Kombination aus Objekt-Hierarchie und ClassExplorer darstellt) und den Objekt-Inspektor, am rechten, und das ist neu, die Projektverwaltung (die auch einen Datenexplorer beinhaltet) und darunter die Toolpalette (früher Komponentenpalette). Letztgenannte befand sich bisher immer am oberen Bildschirmrand im Hauptfenster neben den Buttons, jetzt hat sie nicht nur ihre Position, sondern auch ihre Funktionalität verändert.
Wenn man ein neues Projekt starten will, zeigt die Projektverwaltung nicht wie üblich die VCL-Komponenten, sondern die Elemente der Objekt-Galerie, also die Möglichkeiten, mit einem bestimmten Projekttyp zu beginnen (etwa einer VCL-Formularanwendung oder einer WebSnap-Anwendung). Wenn man dann durch entsprechenden Doppelklick einen Projekttyp ausgewählt hat, dann schaltet sie um (wenn man zum Beispiel eine Form bearbeitet) und zeigt die VCL-Komponenten. Es fällt auf, dass die Objektgalerie nicht alle Objekte am Anfang anzeigt, sondern dass einige bekannte Einträge fehlen, wie zum Beispiel unter WebServices der WSDL-Importer oder das SOAP-Server-Datenmodul. Das liegt daran, dass die Objektgalerie nur die Objekte anzeigt, die wirklich einen Projekttyp darstellen, und die Zusatzelemente zu diesem Zeitpunkt ausblendet. Anschließend, nach Wahl eines Projekttyps, werden dann die anderen Elemente wieder sichtbar, sodass man dann auch den WSDL-Importer etc. wiederfindet. Dieses trägt deutlich zur Übersichtlichkeit bei. Das Ausblenden der Zusatzelemente tritt ebenfalls auf, wenn man den klassischen Weg geht und per Menüpunkt DATEI | NEU | WEITERE ... den Projekttyp wählt. Dabei würde man auch den neuen Menüpunkt DATEI | NEU | ANPASSEN ... bemerken, der es erlaubt, die Projekttypen, die unter DATEI | NEU ... angeboten werden, frei zu konfigurieren.
Bei allen Zusatzfenstern (Strukturfenster, Objektinspektor etc.) ist jetzt in der Fensterleiste der PIN vorhanden, der ermöglicht, dass das entsprechende Fenster nicht eingeblendet wird, sondern ein entsprechendes Tab am Bildschirmrand sichtbar bleibt. Das Fenster wird in diesem Fall nur dann vollständig eingeblendet, wenn sich der Mauszeiger über dem Tab befindet. Und wenn der Zeiger das dann eingeblendete Fenster verlässt, wird wieder nur das Tab angezeigt.
Neue Optik
Der Code-Editor hat sich optisch stärker verändert. Es wird zum Beispiel über Farbbalken angezeigt, welche Code-Passagen bereits abgespeichert wurden und welche nicht. Zudem sind Zeilennummern sichtbar, und, ebenfalls sehr nützlich und heutzutage eigentlich Standard, zusammengehörige Klammern am Anfang und am Ende eines Blockes bzw. bei Funktionen oder Arrays werden eingefärbt. Des Weiteren werden fehlende schließende Block-Klammern automatisch gesetzt. Wenn man eine öffnende Klammer eingibt und dann auf die RETURN-Taste drückt, wird eine schließende Klammer in eine neue Zeile unterhalb des Cursors eingefügt.Am unteren Rand des Code-Editors befinden sich vier Tabs: Mit dem ersten wechselt man in der Regel zur aktuellen CPP-Datei (die wie üblich über ein Tab am oberen Rand des Code-Editors ausgewählt wird), mit dem zweiten zur zugehörigen H-Datei. Die nächsten beiden Tabs sind neu hinzugekommen: Mit dem dritten wechselt man zum Designer, der, sofern vorhanden, die zugehörige Form anzeigt. Im C++Builder 6 hatte man dazu auf FORMULAR ANZEIGEN klicken müssen.
Das vierte Tab nun ruft die „Historie“ auf. Sie hilft, Code-Veränderung zwischen Dateien (etwa der aktuellen und einer älteren CPP-Datei) auf schnellem Wege festzustellen, indem sie diese optisch hervorhebt. Zusätzlich erlaubt sie es, auf vorherige Dateiversionen zurückzuwechseln. Diese Funktionalität ist neu für den C++Builder, Benutzer des JBuilders beispielsweise kennen sie schon etwas länger. Hinzugekommen sind auch die so genannten Live Templates, die eine Erweiterung der Code Templates darstellen. Es werden wie bei den Code Templates auf entsprechenden Tastendruck hin gewisse Rumpfstrukturen in den Code eingefügt, durch die man aber jetzt durchnavigieren kann, z.B. durch die Schleifenparameter bei der For-Schleife.
Ein erster Unterschied zu Delphi wird hier beim Editor leider deutlich: Wenn man bei Delphi 2006 fehlerhaften Code eingibt, dann wird das im Strukturfenster entsprechend durch einen roten Eintrag vermerkt. Das bedeutet, dass bei der Eingabe bereits Hinweise auf Fehler gegeben werden und nicht erst beim Kompilieren. Beim C++Builder 2006 bleibt das Strukturfenster jedoch unverändert, Hinweise auf Fehler werden während der Eingabe nicht gegeben. Es bleibt zu hoffen, dass in einem Update der C++Builder hier schnell nachzieht. An dieser Stelle soll denn auch gleich ein weiterer Wunsch geäußert werden: Bei Delphi kann man schon seit vielen Versionen die „ClassCompletion“ aufrufen, die auf Tastendruck (STRG+UMSCHALTEN+C) Funktionsrümpfe zu den in der Klassendeklaration vorhandenen Funktionsköpfen generiert. Das vermisst man im C++Builder immer noch, etwa eine Tastenkombination, die aus der Klassendeklaration im Header-File automatisch die Funktionsrümpfe in der zugehörigen CPP-Datei erzeugt.
Neue VCL-Komponenten
Die VCL hat einige neue Komponenten bekommen. Die größte zahlenmäßige Änderung kommt von den InternetDirect-Komponenten (kurz Indy-Komponenten) und den IntraWeb-Komponenten. Indy stellt eine Vielzahl von Komponenten zur Kommunikation übers Internet zur Verfügung, unter anderem Client-Komponenten (zum Beispiel TCP-Client, UDP-Client, FTP, HTTP, POP3 etc.), Server-Komponenten (TCP-Server, FTP-Server etc.) oder Komponenten für die generelle Kommunikation. IntraWeb bietet eine Vielzahl von Komponenten an, mit denen man Internetanwendungen wie normale Windows-Anwendungen erstellen kann, die dann in einem Browser laufen. Dies gilt auch im Hinblick auf Datenbankanwendungen. Indy und IntraWeb sind prinzipiell nicht neu und konnten auch vorher schon mit dem C++Builder 6 benutzt werden, sofern man die Komponenten besaß. IntraWeb ist jetzt in den C++Builder integriert, Indy ist in einer neueren Version (Version 9) vorhanden.Andere nützliche Komponenten betreffen etwa die Erweiterung um Windows-XP-Features wie Manifests, neue Dialoge wie den TOpenTextFileDialog bzw. den TSaveTextFileDialog zum Arbeiten mit Textdateien, den TPageSetupDialog, um „Seiten einzurichten“, sowie neue Panels mit Flow- bzw. Grid-Layout und TTrayIcon, welche die Ausführung der Anwendung als Sytem-Tray-Anwendung erlaubt. Insgesamt mag die Anzahl an wirklich neuen Komponenten niedrig erscheinen. Es ist hier aber schön zu sehen, dass die Neuerungen im C++Builder 2006 sich nicht einfach darauf beschränken, die VCL weiter zu vergrößern, sondern dass der Fokus deutlich darauf gelegt wurde, das tägliche Arbeiten in der Sprache C/C++ bequemer zu gestalten.
Refactoring
Eine der wichtigen Erweiterungen im Borland Developer Studio 2006 ist das Refactoring. Damit ist die Unterstützung bei tiefergreifenden Sourcecode-Änderungen gemeint. Während Delphi 2006 hier vielfältige Features anbietet, fallen die Refactoring-Möglichkeiten des C++Builder 2006 etwas mager aus. Lediglich ein Punkt ist vorhanden, der sich UMBENENNEN nennt. Er hilft, wie der Name schon sagt, gewisse Symbole im Sourcecode (z.B. Variablennamen) umzubenennen. Bevor man dieses durchführt, kann man sich unten im Meldungsfenster anzeigen lassen, wo überall das entsprechende Symbol im Code auftaucht. Falls gewünscht, kann man bestimmte Stellen von der Umbenennung ausnehmen. Die Refactoring-Möglichkeiten beschränken sich damit auf ein etwas komfortableres Suchen und Ersetzen. Das ist schade, weil Delphi eben zeigt, wie viel mehr möglich ist.Einige Refactoring-Optionen von Delphi sind sprachgebunden und damit nicht auf C/C++ umsetzbar (und dort auch nicht notwendig), aber einen Punkt vermisst man doch sehr, nämlich den zum Extrahieren von Methoden. Delphi erlaubt es, markierten Quellcode in eine eigene Funktion bzw. Methode umzuwandeln, wobei es den Funktionsrumpf erstellt, die notwendigen Funktionsparameter nebst Rückgabetyp und notfalls auch lokale Variablen erzeugt und den markierten Code dann entsprechend einfügt. Erneut bleibt zu hoffen, dass diese sehr nützliche Refactoring-Möglichkeit schnell in den C++Builder 2006 integriert wird.
Das Suchen und Ersetzen kann in kleinerem Maßstab auch auf eine andere, ebenfalls neue Art und Weise durchgeführt werden. Diese nennt sich SyncEdit. Wenn man Sourcecode markiert, erscheint jetzt am linken Rand der Markierung ein kleines Symbol, welches sich SyncEdit nennt. Wird es angeklickt, dann werden alle sich in dem markierten Codeteil befindenden Variablennamen gekennzeichnet, und sollte man einen dieser Namen ändern, dann wird überall dort, wo sich dieser Variablenname befindet, der alte Name durch den neuen ersetzt. Dadurch können kleinere Änderungen sehr zeitsparend durchgeführt werden.
Debugging
Eine der herausragenden Erweiterungen des neuen C++Builders sind die neuen Debugging-Möglichkeiten. Breakpoints setzen, Variablen inspizieren bzw. ändern etc. ist wie in alter Manier vorhanden, allerdings ist die Verwaltung und Übersichtlichkeit deutlich verbessert worden. Wenn man im Code einen Breakpoint setzt, das Programm startet (wobei das Kompilieren wesentlich schneller geht als früher) und die Programmausführung am Breakpoint stoppt, dann hat sich zunächst erst einmal das Layout der IDE verändert. Sie hat automatisch auf das Debug-Layout umgeschaltet, sodass einige neue Fenster erscheinen. Am linken Bildschirmrand befinden sich, von oben nach unten, die Fenster AUFRUFSTACK, LISTE ÜBERWACHTER AUSDRÜCKE und LOKALE VARIABLEN.
Das AUFRUFSTACK-Fenster zeigt den Stack samt Angabe, wer den entsprechenden Wert bzw. die entsprechenden Werte auf dem Stack abgelegt hat, sodass man einen Überblick darüber erhält, von wo der Programmablauf gekommen ist, um bei dem Breakpoint dann anzuhalten. Das LISTE ÜBERWACHTER AUSDRÜCKE-Fenster zeigt auf einem Blick alle Variablen, die man überwachen möchte. Um einen Ausdruck dieser Liste hinzuzufügen, kann man wie gewohnt mit dem Mauszeiger auf den Ausdruck zeigen, die rechte Maustaste drücken und FEHLERSUCHE | UNTERSUCHEN ... auswählen. Daraufhin erscheint der bekannte Debug-Inspektor und zeigt den Ausdruck an. Klickt man jetzt das LISTE ÜBERWACHTER AUSDRÜCKE-Fenster mit der rechten Maustaste an und wählt AUSDRUCK HINZUFÜGEN ..., dann erscheint ein kleiner Dialog, in dem unter AUSDRUCK der Variablenname etc. bereits eingetragen ist. Ein Mausklick auf OK fügt diesen dann der Liste der überwachten Ausdrücke hinzu, sodass er in besagtem Fenster angezeigt wird. In dem Fenster kann man ihn dann genau so untersuchen, wie man es auch im Debug-Inspektor konnte. Der Vorteil ist aber, dass man nicht für jeden Ausdruck ein eigenes Fenster geöffnet bekommt, sondern dass hier alle Ausdrücke auf einmal sichtbar in einem Fenster dargestellt werden. Wenn der Ausdruck nun per Pointer zum Beispiel auf andere assoziierte Objekte zeigt und man diese untersuchen möchte, dann öffnete der Debug-Inspektor für jedes Objekt erneut ein eigenes Fenster.
In dem LISTE ÜBERWACHTER AUSDRÜCKE-Fenster werden hingegen die Ausdrücke in einer Baumstruktur angezeigt, sodass die Untersuchung entsprechend übersichtlicher wird. Man kann der Liste natürlich auch direkt Ausdrücke hinzufügen, ohne wie hier beschrieben den Umweg über FEHLERSUCHE | UNTERSUCHEN ... zu gehen. Die in der Liste vorhanden Einträge können ein- und ausgeschaltet und damit zeitweilig aus der Untersuchung herausgenommen werden. Des Weiteren ermöglicht die Liste, alle Einträge zu löschen oder auf einmal auszuschalten.
Lokale Variablen (etwa innerhalb der aktuellen Funktion) brauchen nicht extra dieser Liste überwachter Ausdrücke hinzugefügt zu werden. Sie werden automatisch in dem LOKALE VARIABLEN-Fenster unterhalb des LISTE ÜBERWACHTER AUSDRÜCKE-Fensters angezeigt, ebenfalls in einer Baumstruktur. Somit ist eine Inspektion der lokalen Variablen sehr einfach möglich, besonders, wenn es sich wiederum um Objekte mit Pointerverweisen auf andere Objekte handelt.
Der klassische schnelle Weg, einfach mit dem Mauszeiger auf den Ausdruck zu zeigen, funktioniert natürlich immer noch. Es wird dann aber nicht mehr nur der Wert des Ausdrucks angezeigt, bei Pointern zum Beispiel die Speicherstelle, auf die verwiesen wird. In diesem Fall wird auch eine Baumstruktur angezeigt, sodass man sich wie in den zuvor beschriebenen Fenstern durch eventuelle untergeordnete Objekte durchmanövrieren und damit auch diese untersuchen kann.



