Experte "Delphi Upgrade Advisor"
Nach oben zu Menü Tools
Tools > Delphi Project Upgrade Advisor
Der Experte "Delphi Upgrade Advisor" ermöglicht es Entwicklern, wichtige Änderungen an der Projektkonfiguration und am Code zu ermitteln, die die Compilierungszeit und die Codierungserfahrung erheblich verbessern. Der Experte ist als separates GetIt-Package verfügbar. Nach der Installation wird ein Menüeintrag zur IDE hinzugefügt.
Neben konkreten Vorschlägen enthält der Experte "Delphi Upgrade Advisor" auch reFind-Skripte, mit denen Sie die uses-Anweisungen des Projekts bereinigen können.
Inhaltsverzeichnis
Installation
Das Package "Delphi Projects Upgrade Advisor" ist im GetIt-Package-Manager für Kunden mit einem aktiven Update-Abonnement verfügbar.
Nach der Installation wird der neue Menüeintrag Tools > Delphi Project Upgrade Advisor angezeigt (siehe unten):
Der Experte
Der Experte arbeitet mit dem aktiven Projekt. Öffnen Sie daher, bevor Sie den Experten aktivieren, ein vorhandenes Projekt, das Sie testen möchten. Öffnen Sie generell ein älteres Projekt und kein Projekt, das mit RAD Studio 13 oder 12 erstellt wurde, da diese wahrscheinlich keine alten Programmierstile enthalten, deren Änderung sich lohnen würde.
Die folgende Abbildung zeigt die UI des Experten:
Wie oben gezeigt, bietet der Experte 4 verschiedene Operationen, die aktiviert oder deaktiviert werden können. Die ersten drei beziehen sich direkt auf das Projekt und die IDE-Konfiguration. Für die vierte muss zuerst eine separate Datei generiert werden. In den folgenden Abschnitten wird jede Option behandelt.
Auf ungültige Pfade prüfen
Ungültige Pfade im Such- oder Bibliothekspfad können die Compilierung verlangsamen, da die Betriebssystemaufrufe zur Überprüfung oder zum Versuch, einen ungültigen Speicherort zu öffnen, rechenintensiv sind. Dies ist ein ziemlich kleines Problem, aber bei vielen ungültigen Pfaden und Hunderten von Units, die gesucht werden müssen, kann es die Leistung beeinflussen. Dies ist ein Beispiel der Ausgabe:
Start of the task: Check for Invalid Library Paths [OSX64] Directory not found "$(BDSUSERDIR)\Imports\$(Platform)" [OSX64] Directory not found "$(BDSCOMMONDIR)\Dcp\$(Platform)" [OSX64] Directory not found "$(BDSCOMMONDIR)\Bpl\$(Platform)" [Android64] Directory not found "$(BDSCOMMONDIR)\Dcp\$(PLATFORM)" [Win64] Directory not found "$(BDSUSERDIR)\Imports\$(Platform)" [Win64] Directory not found "$(BDSCOMMONDIR)\Dcp\$(Platform)" [OSXARM64] Directory not found "$(BDSUSERDIR)\Imports\$(Platform)" [OSXARM64] Directory not found "$(BDSCOMMONDIR)\Dcp\$(Platform)" [OSXARM64] Directory not found "$(BDSCOMMONDIR)\Bpl\$(Platform)" [iOSDevice64] Directory not found "$(BDSCOMMONDIR)\Dcp\$(PLATFORM)" [iOSSimARM64] Directory not found "$(BDSCOMMONDIR)\Dcp\$(PLATFORM)" [Win64x] Directory not found "$(BDSUSERDIR)\Imports\$(Platform)" [Win64x] Directory not found "$(BDSCOMMONDIR)\Dcp\$(Platform)" [Linux64] Directory not found "$(BDSCOMMONDIR)\Dcp\$(Platform)" [Linux64] Directory not found "$(BDSCOMMONDIR)\Bpl\$(Platform)" The task is completed Start of the task: Check for Invalid Project Search Paths Current Project: ViewDateDemo.dproj [Win32-Debug] Directory not found "C:/foo/bar" The task is completed
Wie oben gezeigt, wurde ein ungültiger Pfad im Projekt-Suchpfad gefunden. Sie sollten alle ungültigen Ordner aus Ihren Konfigurationen entfernen.
Unit-Aliase
Unit-Aliase wurden in Delphi 2 aufgrund der Kompatibilität mit Delphi 1 eingeführt und sie blieben danach viele Jahre lang eine vordefinierte Konfiguration für neue Projekte. Wenn Sie alte Projekte gepflegt und auf neuere Versionen umgestellt haben, ist möglicherweise diese alte Konfiguration übrig geblieben, die der Compiler sehr häufig überprüfen muss, wenn Sie Units verwenden.
Im Laufe der Jahre wurden andere Unit-Aliase hinzugefügt, um Änderungen der Unit-Struktur gerecht zu werden.
Dies ist wiederum eine Beispielausgabe für ein altes Projekt:
Start of the task: Check For Unit Aliases Current Project: ViewDateDemo.dproj [Win32-Debug] Aliases were found "Actions=ActnList;ImageList=Controls" The task is completed
Sie sollten die Unit-Namen durch die korrekten Namen ersetzen und die Konfigurationen der Unit-Aliase aus den Projektoptionen entfernen. Zum Ersetzen von Units können Sie das Skript reFind verwenden, das im GetIt-Package des Experten enthalten ist.
Unqualifizierte Unit-Namen
Der dritte Test bezieht sich auf unqualifizierte Unit-Namen, wie "uses Forms" anstatt "uses VCL.Forms". Das Ausprobieren aller Präfixe für alle Units erhöht die Arbeitslast des Compilers erheblich. Daher sollten Sie eine Bereinigung durchführen. Beachten Sie, dass das Tool nicht den eigentlichen Code nach unqualifizierten Unit-Namen durchsucht. Es überprüft die Projektkonfiguration und empfiehlt einen bestimmten Eintrag zu entfernen.
Dies ist eine Beispielausgabe:
Start of the task: Check For Unqualified Unit Names Current Project: ViewDateDemo.dproj [All-Base] Unit scope names were found "Vcl;Vcl.Imaging;Vcl.Touch;Vcl.Samples;Vcl.Shell;System;Xml;Data;Datasnap;Web;Soap;Winapi" [Win32-Base] Unit scope names were found "System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde" The task is completed
Wenn dieser Eintrag entfernt ist, erhalten Sie wahrscheinlich Fehler wie:
F2063 Could not compile used unit 'Forms' at line 6 (6:31)
Zur Korrektur von Unit-Namen in den uses-Anweisungen können Sie wieder das Skript reFind verwenden, das im GetIt-Package des Experten enthalten ist.
Zirkuläre Unit-Referenzen
Die vierte Option prüft auf zirkuläre Unit-Referenzen. In diesem Fall besteht der Prozess aus zwei Schritten.
Aktivieren Sie zuerst die Generierung der Datei GraphViz in den Compiler-Optionen (siehe Compiler-Optionen), compilieren Sie das Projekt und wählen Sie dann die Datei im Experten aus.
Dies ist eine Beispielausgabe ohne Systembibliotheken (Sie können auch VCL-Bibliotheken aus der GraphViz-Datei mit dem zusätzliche Parameter --graphviz-exclude ausschließen).
Start of the task: Check for Circular Unit References
DateF has a circular uses statement:
└─DatesUnit (interface)
└─DateF (implementation)
DatesUnit has a circular uses statement:
└─DateF (implementation)
└─DatesUnit (interface)
The task is completed
Durch die Untersuchung der GraphViz-Datei kann der Experte Zyklen erkennen und anzeigen – eine komplexe Aufgabe bei sehr großen Graphen.
Die folgende Abbildung zeigt den Experten in Aktion:
Das Skript Refind für Uses-Anweisungen
Mit dem GetIt-Package wird eine weitere Datei ausgeliefert, die sich im Package-Ordner befindet (über einen neuen Befehl im Dialogfeld des GetIt-Package-Managers aufrufbar). Die Datei hat den Namen RenameUnits.txt. Sie enthält ein Skript, das an das Hilfsprogramm reFind übergeben werden kann, um Units sowohl für Aliase als auch für nicht qualifizierte Units anzupassen. Das Skript (das Sie an Ihre speziellen Projekterfordernisse anpassen können) enthält Zeilen wie die folgenden:
#replaceunit ABAccessibility->Vcl.ABAccessibility #replaceunit ADOConEd->Data.Win.ADOConEd #replaceunit ADOConst->Data.Win.ADOConst #replaceunit ADODB->Data.Win.ADODB #replaceunit ADOInt->Winapi.ADOInt #replaceunit ADSTypes->Web.Win.ADSTypes #replaceunit AVFoundation->Macapi.AVFoundation
Es wird empfohlen, reFind mit diesem Skript für Ihr gesamtes Projekt auszuführen, nachdem Sie eine Kopie Ihres Originalquelltextes erstellt haben. An dieser Stelle können Sie die vom Experten gekennzeichneten Projekteinstellungen entfernen und sie erhalten so eine Anwendung, die etwas schneller compiliert wird.