texttransformer.jpg

Delphi2Cpp hat ein grosses Delphi Projekt mit mehr als 30 units und 80'000 Zeilen Code zuverlässig in VisualC++ übersetzt, auch Libraries wurden eins zu eins abgebildet. Nur wenige manuelle Eingriffe waren nötig, um den C++ Code dann unter Visual Studio 2010 neu zu kompilieren. Eine Meisterleistung -- Delphi2Cpp hat alle meine Erwartungen weit übertroffen. Auch die kompetente und schnelle Hilfestellung und Beratung deinerseits hat mich überzeugt.

Tony Hürlimann
http://www.virtual-optima.com


Kurzbericht:


Ich entwickle seit mehr als 20 Jahren eine spezielle Computersprache (LPL) (siehe: http://www.virual-optima.com) und habe dazu einen Compiler in Delphi implementiert. Der Code besteht aus mehr als 30 Units und etwa 80'000 Zeilen Code. Der Code greift auf die Standard-Units: System.pas, SysUtils.pas und Windows.pas zurück, aber sonst werden keine Klassen-Bibliotheken von Delphi benutzt. Natürlich verwendet der Code alle möglichen Konstrukte der Delphi-Sprache, so wie, nested procedures, Procedur-Parameters, callBack-Funktionalität, Delphi-Strings, Instruktionen für bedingte Compilierung, Code-Initialisierungen für Units, und weitere mehr. Der gesamte Code ist als EXE-Programm (d.h. als Consolen-Compiler) oder als DLL-Library verfügbar. Insbesondere wird die LPL-Library von einem davon unabhängigen Benutzerinterface-Programm verwendet.

Aus verschiedenen Gründen habe ich mich vor kurzem entschlossen, den LPL-Compiler Code in C++ zu übersetzen. Dabei hat das Uebersetzungsprogramm "Delphi2Cpp" unschätzbare Dienste geleistet. In einem iterativen Prozess, der nur gerade 2 Monate gedauert hat, war es gelungen, den gesamten LPL-Compiler-Code in Visual C++ zu portieren und unter Visual Studio 2010 zu kompilieren. Die umfangreichen Test-Cases, um den LPL-Compiler zu testen, wurde erfolgreich durchgeführt. Insbesondere konnte auch unmittelbar eine 64bit Version der Compilers generiert werden.
Dabei muss ich sagen, dass ich nur gerade Basis-Kenntnisse in C++ hatte und die Umgebung Visual Studio 2010 war mir auch fremd.

Der erwähnte iterative Prozess bestand darin, dass einerseits Delphi2Cpp in mehreren Versionen verbessert wurde, so dass die jetzige Version 1.5.0 den gesamten LPL-Compiler-Code eins-zu-eins und automatisch übersetzt. Es sind nur noch wenige manuelle Eingriffe nötig (auch diese könnte man noch automatisieren!), um den so übersetzten Code direkt unter Visual C++ zu kompilieren.
Andererseits -- und dazu habe ich die meiste Zeit in diesem iterativen Prozess investiert -- sind einige "Bugs" -- oder mindestens Inkonsistenzen -- im Delphi-Source-Code zum Vorschein gekommen, die laufend in Delphi eliminiert wurde. Ich erwähne zwei Beispiele (die in Delphi selbstverständlich erlaubt und nicht zu Fehlern führen):

1) Ueberlauf bei einem String: In Delphi beginnt ein String S bei Position 1 und endet mit Position length(S). Die Position length(S)+1 ist mit einem #0 belegt. Unbeabsichtigt wurde diese Position manchmal als "Sentinel" beim Durchlaufen eines Strings verwendet: also es wurde auf S[length(S)+1] zugegriffen. Das ist erlaubt, aber "unschön" und logisch eigentlich ein Fehler. In C++ führt ein solcher Zugriff --zu Recht-- zu einem Exception: Der String kann nur im Bereich S[0] bis S[length(S)-1] zugegriffen werden, die Position S[length(S)] ist nicht erlaubt.

2) Auch unbeabsichtigt wurde an einer Stelle der Abbruchindex einer FOR-Schlaufe innerhalb der Schlaufe wieder für andere Zwecke verwendet, also folgender Code wurde geschrieben:

     for i:=1 to n do begin
          ....
          n := .....  ;
          .....
     end;

Dies ist in Delphi (und in Pascal generell) erlaubt, da der Abbruchindex n zu Beginn der Schlaufe fixiert wird. In C++ führt eine solche Konstruktion zu Fehlern, die schwer zu finden sind. (Delphi2Cpp soll sogar in einer künftigen Version diesen "Fehler" entdecken und eliminieren.) ( Anmerkung von Detlef Meyer-Eltz: ab Delphi2Cpp 1.5.1 ist dieser Fehler eliminiert. )

Diese Beispiele zeigen auch, wie subtil die Uebersetzung von einer Sprache in eine andere sein kann. Im grossen und ganzen aber waren dies Kleinigkeiten. Strings -- die in Delphi ja nun wirklich speziell sind -- werden zuverlässig übersetzt, und zwar 16bit-char Strings wie in Delphi 2009, als auch 8bit Strings wie in Delphi 2007. Man muss dazu nur ein Switch in Delphi2Cpp einstellen. Auch der Memory-Manager führte zu keinen Problemen.

Rundum: Delphi2Cpp ist ein zuverlässiger und extrem hilfreicher Uebersetzer von Delphi zu C++ Code. Auch partielle Code Bruchstücke kann man schnell in C++ übersetzen lassen, dies war für mich als C++ Anfänger -- aber Delphi-Experte -- eine unschätzbare Hilfe, um schnell C++ Code zu schreiben.



   english english

 

 
Letzte Neuigkeiten
28.10.24
Delphi2Cpp 2.5: in Groß- und Kleinschreibung mit Deklarationen übereinstimmende Symbolnamen [more...]
08/26/24
Delphi2Cpp 2.4: Aktualisiert auf RAD Studio 12.1 Athen [more...]



[aus Fallstudie...]

"Eine Meisterleistung -- Delphi2Cpp hat alle meine Erwartungen weit übertroffen."


Tony Hürlimann
virtual-optima 29.08.2011



"Ich muss mich nochmal für deinen Einsatz und die Qualität deiner Arbeit bedanken, das ist absolut überdurchschnittlich ..."


Gerald Ebner


 
Diese Homepage ist aus einfachen Texten mit [Minimal Website ]generiert.

Minimal Website
Minimal Website ist mit Hilfe des TextTransformers hergestellt.

TextTransformer
Der TextTransformer ist gemacht mit dem Borland CBuilder

  borland