Autor |
Beitrag |
WiWo
Hält's aus hier
Beiträge: 5
Visual Foxpro 9, Delphi XE2 prof., C# (VS2005, VS2010)
|
Verfasst: So 01.07.12 17:24
jaenicke hat folgendes geschrieben : | Erstens dauern diese Initialisierungsabschnitte in der Regel nur einige Mikrosekunden und zweitens:
Wie würdest du die unitinternen Sachen denn sonst initialisieren ohne in die Gefahr zu laufen, dass ein Aufruf passiert bevor die Initialisierung abgeschlossen ist?  |
Hallo Sebastian,
damit wir uns recht verstehen: ich bin ein absoluter Freund der Initialization- und Finalization-Anweisungen; die sind wirklich hilfreich. Aber in der RTL sind sie einfach zu massiv und häufig unpassend eingesetzt worden. Die XE2-RTL hab ich mir zwar noch nicht genauer angesehen; in früheren Versionen aber tagelang gestöbert und bin dabei auch auf Fehler gestoßen, z.b. vergessene(?) Fehlermeldungen in ansonsten nicht-visuellem Code. Ich hab früher hauptsächlich Programme für Maschinensteuerungen geschrieben, wo's gar keine Standard-Ein-und Ausgabegeräte gab; da machte mir sowas dann schon einen gehörigen Strich durch die Qualitätssicherung.
Letztlich muss ich mich als Programmierer darauf verlassen können, dass mein Programm das und nur das tut, was ich auch geschrieben habe. Und das wird leider durch die vielen Initializations in den RTL-Units, die teilweise wiederum andere Units aufrufen, zunichte gemacht. Selbst so gewöhnliche Sachen wie String-Operationen stecken in Units mit irgend einem Initialization-Code; wozu?
Ich hatte in früheren Versionen mir tatsächlich einen Satz Mini-RTL-Ersatz-Units geschaffen, aber das ist Arbeitszeit, um die es eigentlich sehr schade ist. Die XE2-RTL zu durchforsten ist auch kaum noch praktikabel. Der Wust von verschachtelten Compiler-Direktiven, verbunden mit includes und Referenzen zu anderen Units macht die Sourcen weitgehend unlesbar.
Gruß,
WiWo
|
|
Delphi-Laie
      
Beiträge: 1600
Erhaltene Danke: 232
Delphi 2 - RAD-Studio 10.1 Berlin
|
Verfasst: So 01.07.12 21:47
Bemängelst Du, daß die String-Operationen an sich in Units verpackt sind (wo sollten sie sonst hin, n.m.W. sind sie in der Unit System deklariert und implementiert), oder daß besagte Units unübersichtliche initialization/finalization-Abschnitte haben?
Die Komplexität ist dermaßen gewachsen, daß die Fehler selbst im fertigen Produkt (z.Z. XE 2) zwangsläufig immer mehr zunehmen, sie ist, wenn man ehrlich ist, eigentlich nicht mehr beherrschbar. Früher gab es z.B. eine "nachgeschobene" Delphversion der Nummer x.01, inzwischen wurde für XE 2 das vierte Update (wenn ich noch auf dem laufenden bin) herausgegeben. Hier im Code hat jemand in seiner Signatur, daß ohne eine Quellcodezeile die Programme immer fehlerfrei funktionieren. Das war einmal: Ich kam sogar einen Fehler in XE2-Compilaten mit leeren Formular auf die Spur.
Entweder, Du verzichtest generell auf die VCL, oder Du nimmst abgespeckte Units (KOL?). Aber ob Delphi dann noch bzw. für Maschinensteuerungen überhaupt die richtige Programmierumgebung ist, habe ich Zweifel, die etwas lauter als nur leise sind.
|
|
WiWo
Hält's aus hier
Beiträge: 5
Visual Foxpro 9, Delphi XE2 prof., C# (VS2005, VS2010)
|
Verfasst: Di 03.07.12 21:59
Delphi-Laie hat folgendes geschrieben : | Bemängelst Du, daß die String-Operationen an sich in Units verpackt sind (wo sollten sie sonst hin, n.m.W. sind sie in der Unit System deklariert und implementiert), oder daß besagte Units unübersichtliche initialization/finalization-Abschnitte haben?
|
Es geht mir nur um unnötige und z.T. problematisch implementierte Initializations in Units, die auch in nicht-visuellen Programmen verwendet werden.
Gruß,
WiWo
|
|
jaenicke
      
Beiträge: 19326
Erhaltene Danke: 1749
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Mi 04.07.12 06:43
Um bei deinem Beispiel mit den StrUtils zu bleiben:
Wenn man sich anschaut, was in einem Konsolenprogramm, das nur diese Unit einbindet, daraufhin an Initialisierung passiert, ist das alles vom Einsprungpunkt bis zu InitUnits, dort dann in der System-Unit die Initialisierung des Speichermanagers, der Spracheinstellung, Exceptionhandling, Abfrage der Kommandozeile, der Codepage, der FPU, ... dann in der Unit Windows die Windowsversionskonstanten, dann werden noch die Ressourcen und Importe geladen, der Klassenkonstruktor von TOSVersion ausgeführt und in SysUtils die Plattforminformationen zugewiesen die Adresse von GetDiskFreeSpaceEx geladen, sowie die FormatSettings initialisiert.
Das einzige, das mir dort aufgefallen ist:
GetVersionEx wird in Winapi.Windows und in System.SysUtils aufgerufen, wobei in der Unit Windows private Unitkonstanten unterhalb von implementation gefüllt werden und in SysUtils die öffentlichen.
Ansonsten sehe ich da erst einmal nichts Unnötiges.
|
|
Hochhaus 
      
Beiträge: 662
Erhaltene Danke: 8
Windows 7
Delphi XE2
|
Verfasst: Sa 28.07.12 17:20
Im Extremfall wird die EXE sogar 10-12 mal grösser unter Delphi XE2 gegenüber Delphi 6. Im Anhang sind die EXE's von exakt demselben Code ...! (1 x XE2, 1 x Delphi 6)
Einloggen, um Attachments anzusehen!
|
|
|