Interview mit Corbin Dunn über die Delphi-IDE
Software Engineer, Research and Development, Borland Software Corp.
Interview vom September 2004; die Fragen stellte Martin Strohal
Delphi-Treff: Wie lange arbeiten Sie schon bei Borland und wie sind Sie in diese Firma gekommen?
Corbin Dunn: Ich arbeite seit etwa sechs Jahren bei Borland. Ich habe als Praktikant im Developer-Support begonnen. Einige Leute aus dem Developer-Support kamen an das College, das ich besuchte, und warben neue Praktikanten an. Nachdem ich die Universität von Kalifornien Santa Cruz abgeschlossen hatte, wurde ich als Vollzeitbeschäftigter angestellt und arbeitete für etwa ein Jahr in QA, dann wechselte ich zu R&D.
Sie arbeiten an der neuen IDE. Ist es jetzt so wie früher, dass Delphi in Delphi entwickelt wird? Oder welche Sprache verwenden Sie für die Entwicklung der IDE?
Der Großteil der IDE ist in Delphi erstellt. Einige Teile sind mit dem Delphi für .NET-Compiler erstellt, während einige in C# gemacht wurden. Der Grund für das Verwenden von C# war, um C#Builder zu testen, und aufgrund der Tatsache, dass der Delphi für .NET-Compiler zu der Zeit, als wir die Arbeit an den .NET-IDE-Teilen begonnen haben, noch nicht fertig war.
Einige Leute haben sich beklagt, dass es in Delphi 8 keine frei beweglichen Fenster (floating windows) wie in den früheren Versionen gibt. Was sind die Gründe für diese große Änderung?
Eigentlich ist das nicht richtig! Delphi 8 unterstützt ein „Classic“-Desktop-Layoutschema mit frei beweglichen Fenstern. Hauptsächlich dreht es sich bei den Reaktionen darum, dass der VCL für .NET-Designer kein freies Fenster ist. In Diamondback werden wir das jetzt als eine Option erlauben. Wir haben den Designer eingebettet gemacht, um eine effektivere Verwendung des Desktopplatzes und Konsistenz mit dem WinForms-Designer zu bieten. Der WinForms-Designer kommt aus dem Microsoft .NET Framework, und wir haben sehr wenig Einfluss auf sein Aussehen und Verhalten. Auch wenn wir die Möglichkeit haben, einen freien Designer zu verwenden, habe ich festgestellt, dass es sehr viel effektiver ist, mit dem eingebetteten Designer zu arbeiten.
Wird die Diamondback-IDE auf die gleiche Art wie Delphi 8 arbeiten in Bezug auf freie/feste Fenster?
Wie immer wird es ein „Classic“-Desktop-Layoutschema geben. Zusätzlich erlaubt Diamondback nun den VCL für Win32- und VCL für .NET-Formdesignern frei zu sein. Die WinForms- und ASP.NET-Designer werden weiterhin eingebettet sein aufgrund der Beschränkungen, wie die Designer arbeiten.
Es gibt einige neue Dinge in der Diamondback-IDE wie HelpInsight und ErrorInsight. Können Sie uns erklären, was sich hinter diesen Begriffen verbirgt?
ErrorInsight ist wirklich cool. Während man den Quellcode tippt, parst die IDE andauernd und findet allgemeine Fehler wie z.B. Syntaxfehler und einige semantische Fehler (wie undeklarierte Bezeichner). Alle Fehler werden im Code-Editor mit einer roten Wellenlinie unterstrichen genauso wie in JBuilder. Zusätzlich stecken wir alle Fehler in die neue Strukturansicht. Die Strukturansicht ist ein gewöhnliches IDE-Fenster, das dafür verwendet wird, die Struktur des aktuellen Kontexts anzuzeigen. Das beinhaltet: ErrorInsight-Nachrichten, Typen und Variablen in deinem Code (der alte Code-Explorer) und Objekt-Treeview-Information, wenn man sich auf einem Designer befindet. ErrorInsight funktioniert mit Delphi-Quelldateien, C#-Quelldateien und HTML-Dateien.
HelpInsight ist noch cooler. Es beinhaltet zwei Features. Wenn man die Maus über einen Bezeichner hält, wird sich das HelpInsight-Fenster öffnen. Es zeigt eine kleine HTML-Seite an, die die Hilfedatei-Information für diesen Bezeichner enthält. Auf diese Weise sieht man augenblicklich die Hilfe für einen bestimmten Begriff, ohne überhaupt die Hilfe-Datei öffnen zu müssen. Der andere Teil bezieht CodeInsight mit ein. Wenn man das CodeInsight-Fenster aufruft und auf einem Teil pausiert, wird sich HelpInsight rechts daneben öffnen und Informationen über diesen CodeInsight-Teil anzeigen. HelpInsight funktioniert für Delphi und C#.
Wie funktioniert HelpInsight? Woher kommt der Text usw.?
Wenn man die Maus über einen Bezeichner hält, findet die IDE heraus, aus welchem Assembly oder Package er kommt. Sie sucht dann nach einer XML-Datei mit dem gleichen Namen. Wenn man z.B. die Maus über System.Windows.Forms.Form hält, wird die IDE in System.Windows.Forms.xml nach Hilfeinformationen suchen, die sich im Framework-Verzeichnis befinden. Wenn man Hilfe für einen Teil aus der VCL anfordert, sucht die IDE in vcl90.xml danach.
Funktioniert das auch mit eigenen Units, Klassen und Methoden oder nur mit Borland-Code?
Man kann die XML-Dokumentationsoptionen für die Delphi- und C#-Compiler verwenden, um XML-Dokumentation zu generieren. Die IDE verlangt, dass die XML-Doc-Datei im Microsoft-Format ist; deshalb wird man eine Transformation auf die von Delphi generierten XML-Dokumentationsdateien durchführen müssen. Solange sich die Datei an derselben Stelle wie das Assembly/Package befindet, sollte die IDE sie finden. Eventuell wird die IDE die XML-Dokumentation direkt aus dem Quellcode, an dem gerade gearbeitet wird, ziehen. Dieses Feature wird jedoch nicht in Diamondback enthalten sein.
Die Delphi 8-IDE ist nicht sehr schnell.
Ich weiß. Ich habe ein Profiling mit der IDE durchgeführt, um sie schneller zu machen.
Wird die neue IDE aufgrund all der neuen Features langsamer sein?
Unglücklicherweise wird sie ein bisschen langsamer sein aufgrund der Menge an neu hinzugekommenem Code, der geladen wird. Das einzige, was langsam ist, ist jedoch die Zeit des ersten Starts. Wenn die IDE einmal gestartet ist, ist sie sehr schnell. Zusätzlich werden all die neuen Features aus einem einen schnelleren Programmierer machen.
Refactoring ist eine großartige neue Sache in Diamondback. Welche Möglichkeiten hat ein Entwickler dabei?
Der Entwickler hat nun die Möglichkeit, schnell und sicher seinen Quellcode zu verändern. Das „Rename Refactoring“ erlaubt einem, einfach einen Bezeichner umzubenennen, um seine wirkliche Verwendung besser zu beschreiben. Das „Extract Method“-Refactoring erlaubt einem, lange Methoden zu vereinfachen und Code einfach wiederzuverwenden. Das „Declare Variable“- und „Declare Field“-Refactoring hilft dem Entwickler schneller zu programmieren und Deklarationen für undeklarierte Variablen hinzuzufügen. Das „Find Unit“-Refactoring ist kein echtes Refactoring, aber erlaubt einem, einfach und automatisch Units für undeklarierte Typen und Variablen der Uses-Liste hinzuzufügen. „Extract Resource String“ schließlich erlaubt es einem, String-Konstanten einfach in Resource-Strings umzuwandeln, so dass Anwendungen schneller lokalisierbar werden können.
Ein ähnliches Feature heißt „Find References“. Es verwendet die Refactoring Engine, um alle Referenzen auf ein bestimmtes Symbol zu finden. Ich finde dieses Feature sehr praktisch und verwende es ständig.
Sind irgendwelche Ideen für nächste Releases von Delphi übrig?
Oh, eine Menge! Ich plane gerade, mehr Refactorings und mehr Produktivitätserweiterungen an der IDE vorzunehmen. Ich bin voller Ideen, und es ist nur eine Frage, wie viel Zeit ich darauf verwenden kann, diese Ideen umzusetzen.
Programmieren Sie auch in Ihrer Freizeit?
Ja, ich verkaufe nebenbei Shareware, aber ich habe festgestellt, dass die Zeit meiner Freizeitprogrammierung mittlerweile Delphi selbst gewidmet ist.
Welches ist Ihre Lieblingsprogrammiersprache?
Na, Delphi natürlich! Ich bevorzuge die Geschwindigkeit der Win32-Entwicklung, aber die Einfachheit der .NET-Entwicklung. Und mit Delphi kann man beides einfach machen.
Vielen Dank für die Beantwortung unserer Fragen!