DE19617719C2 - Verfahren zur Programmübersetzung eines in der Programmiersprache C++ geschriebenen Programms - Google Patents

Verfahren zur Programmübersetzung eines in der Programmiersprache C++ geschriebenen Programms

Info

Publication number
DE19617719C2
DE19617719C2 DE19617719A DE19617719A DE19617719C2 DE 19617719 C2 DE19617719 C2 DE 19617719C2 DE 19617719 A DE19617719 A DE 19617719A DE 19617719 A DE19617719 A DE 19617719A DE 19617719 C2 DE19617719 C2 DE 19617719C2
Authority
DE
Germany
Prior art keywords
program
code
translation
templates
translated
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Fee Related
Application number
DE19617719A
Other languages
English (en)
Other versions
DE19617719A1 (de
Inventor
Urich Kriegel
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Fraunhofer Gesellschaft zur Forderung der Angewandten Forschung eV
Original Assignee
Fraunhofer Gesellschaft zur Forderung der Angewandten Forschung eV
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Fraunhofer Gesellschaft zur Forderung der Angewandten Forschung eV filed Critical Fraunhofer Gesellschaft zur Forderung der Angewandten Forschung eV
Priority to DE19617719A priority Critical patent/DE19617719C2/de
Publication of DE19617719A1 publication Critical patent/DE19617719A1/de
Application granted granted Critical
Publication of DE19617719C2 publication Critical patent/DE19617719C2/de
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation

Landscapes

  • Engineering & Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Devices For Executing Special Programs (AREA)
  • Stored Programmes (AREA)

Description

Die Erfindung bezieht sich auf ein Verfahren zur Programmübersetzung eines in der Programmiersprache C++ geschriebenen, aus mehreren Quelldateien bestehenden Programms, dessen Quelldateien insbesondere zur Software-Entwicklung mehrmals, in getrennten Durchgängen, zu übersetzen sind und Templates benutzen, die durch Instantiierung einem Code zugewiesen werden, in einen Objektcode, der durch anschließendes Linken in einen ausführbaren Code umgesetzt wird.
Bei der Programm- bzw. Software-Entwicklung wird in üblicher Weise ein Quellprogramm vom Programmierer erstellt, das in einer höheren Programmiersprache geschrieben ist. Derartige höhere Programmiersprachen, auch Hochsprachen genannt, verfügen über einen prozessorunabhängigen Befehlssatz, der zur Weiterverarbeitung in einem Computer zunächst in eine maschinenlesbare Sprache übersetzt werden muß. Für diesen Übersetzungsschritt bedient man sich spezieller Übersetzungsprogramme, sogenannte Compiler-Programme, die das Quellprogramm vollständig einmal und dauerhaft übersetzen, wobei zur vollständigen Übersetzung des Gesamtquellprogramms meist mehrere Über­ setzungsdurchgänge notwendig sind. Durch diesen soge­ nannten Compilierungsvorgang wird ein Objektcode er­ halten, der zur fehlerfreien Anwendung in einem Rechner noch mit entsprechenden sogenannten Bibliotheken ver­ bunden werden muß. Dies erfolgt mit Hilfe eines Linkers, der ebenfalls ein Programm darstellt und den mit einem Compiler generierten Objektcode mit den Bibliotheken zu einem ablauffähigen Programm verbindet.
Unter der Vielzahl bekannter höherer Programmiersprachen beschränken sich die folgenden Ausführungen ausschließlich auf die Programmiersprache C++, die im Jahre 1980 als Weiterentwicklung der Programmiersprache C hervorging. Zwar gilt sie als assemblernahe Programmiersprache, d. h. es werden maschinennahe Anweisungen verwendet, doch sind die in C++ verwendeten Anweisungen prozessorunabhängig, so daß ein in C++ geschriebenes Programm wie vorstehend beschrieben in einen maschinenlesbaren Code übersetzt werden muß.
Neben den in der Programmiersprache C++ geschriebenen Anweisungen, aus denen die einzelnen Quelldateien eines in der C++-Sprache geschriebenen Programmes bestehen, sehen C++-Programme sogenannte Templates vor, die als Platzhalter für näher zu spezifizierende Informationen im Programm integriert sind. Templates ermöglichen es beispielsweise Implementationen von Klassen und Funktionen zu parametrisieren. Derartige, als Templates bezeichnete Platzhalter, werden häufig in C++- Programmen benutzt.
Eine besondere Eigenart von Templates besteht darin, daß bei der Compilation der in der C++-Sprache geschriebenen Quelldateien, in denen Templates enthalten sind, für jedes Template ein Code erzeugt wird, der in einer vom Compiler zu erzeugenden, sogenannten Template-Include-Datei abgespeichert wird. Dieser Vorgang der Codeerzeugung für Templates wird auch als Instantiierung bezeichnet und ist für den nach­ folgenden Linkvorgang, wie im weiteren beschrieben wird, von entscheidender Bedeutung. Zu Beginn des Link- Prozesses für C++-Programme wird zunächst geprüft, ob von bestehenden Template-Include-Dateien aktuelle Objektcode-Dateien existieren. Ist das nicht der Fall, so werden diese durch den C++-Compiler erzeugt.
Je größer die Anzahl der im Quellprogramm vorhandenen Templates, umso mehr Codes werden bei der In­ stantiierung in die Template-Include-Datei einge­ schrieben, wodurch die Template-Include-Datei an Speichervolumen zunimmt.
Hinzukommt, daß insbesondere im Stadium der Programm- Entwicklung Übersetzungsdurchgänge für einzelne Quelldateien mehrmals durchgeführt werden müssen, bei denen pro Übersetzungsdurchgang bei jedem auftretenden Template eine Codezuweisung erfolgt, die in der Template -Include-Datei abgespeichert wird. Auf diese Weise wächst das Speichervolumen der Template-Include-Datei sehr stark an.
Bei den bisher bekannten Compiler-Programmen für die Übersetzung von C++-Programmen werden die von Templates herrührenden Codes additiv in der generierten Template-Include-Datei abgespeichert, unabhängig davon, ob inhaltsgleiche Informationen bereits in der Datei enthalten sind oder nicht. Bei zyklischen Programmübersetzungsprozessen hat diese Vorgehensweise jedoch fatale Folgen: Zum einen werden die Template- Include-Dateien sehr groß und zum anderen wird das Compiler-Programm durch Hinzufügen identischer Informationen vor dem Linkvorgang der Objekt-Dateien gezwungen, die Informationen in der Template-Include- Datei neu zu übersetzen.
Aufgrund des großen Speichervolumens der sich im Rahmen mehrerer Entwicklungszyklen bildenden Template-Include- Datei bewegen sich die Zeitdauern für den nachfolgenden Linkprozeß in der Größenordnung von 20 bis 40 Minuten.
Der Erfindung liegt daher die Aufgabe zugrunde, ein Verfahren zur Programmübersetzung eines mit der Programmiersprache C++ geschriebenen, aus mehreren Quelldateien bestehenden Programms, dessen Quelldateien insbesondere zur Software-Entwicklung mehrmals, in getrennten Durchgängen, zu übersetzen sind und Templates benutzen, die durch Instantiierung einem Code zugewiesen werden, in einen Objektcode, der durch anschließendes Linken in einen ausführbaren Code umgesetzt wird, dadurch weiterzuentwickeln, daß die Größe der bei der Instantiierung von Templates erforderlichen Template-Include-Datei erheblich minimiert wird, so daß die Zeitdauer für das an­ schließende Linken wesentlich verkürzt werden kann.
Die Lösung der der Erfindung zugrundeliegenden Aufgabe ist im Anspruch 1 angegeben. Vorteilhafte Ausführungsformen sind den Ansprüchen 2 ff. zu entnehmen.
Dabei wird ein Verfahren zur Programmüber­ setzung eines in der Programmiersprache C++ ge­ schriebenen, aus mehreren Quelldateien bestehenden Programms, gemäß des Oberbegriffs des Anspruchs 1, derart ausgebildet, daß die Übersetzung der Quelldateien in Objektcode-Dateien und die Codeerzeugung für die Instantiierung der Templates in getrennten Übersetzungsdurchgängen durchgeführt wird, wobei für die Instantiierung der Templates alle Quelldateien des Programms benutzt werden.
Insbesondere zeichnet sich das vorliegende Verfahren dadurch aus, daß bei der getrennten Übersetzung der Quelldateien in den Objektcode solange kein Code für die Instantiierung der Templates erzeugt wird, bis alle Quelldateien übersetzt sind und daß im Anschluß daran in einem getrennten Übersetzungsvorgang unter Benutzung aller Quelldateien des Programms ein optimierter Code für die Instantiierung der Templates erzeugt wird, der während des nachfolgenden Linkens benutzt wird.
Der Erfindung liegt die Idee zugrunde, die in einem C++-Programm enthaltenen Templates in einem einzigen Übersetzungsdurchgang zu übersetzen, der getrennt von den Übersetzungsdurchgängen für die Quelldateien abläuft. Insbesondere bei der Software-Entwicklung ist diese Vorgehensweise von besonderem Vorteil, da der Inhalt der Template-Include-Dateien auch bei mehrmaligem Übersetzen gleicher Programmteile nicht modifiziert wird, wodurch der nachfolgende Link-Vorgang in wesentlich kürzerer Zeit, d. h. in wenigen Minuten, vorzugsweise 2 bis 4 Minuten, und unabhängig von der Zahl der zuvor erfolgten Übersetzungsdurchläufe ab­ laufen kann.
Die im vorstehenden beschriebene erfindungsgemäße Idee ist anhand eines konkreten Forschungsprojektes der Anmelderin getestet worden. In einem Projekt "FAPU" ist in der Programmiersprache C++ ein Programmsystem reali­ siert worden, daß in etwa 160000 Zeilen Code über etwa 100 mittels Templates realisierte parametrisierte Klas­ sen enthält. Bei ständig wachsender Anzahl der Pro­ grammdurchläufe durch den andauernden Entwicklungszyk­ lus traten auf einer IBM RS/6000, Typ 390 H mit 128 MB- Hauptspeicher reine Linkzeiten von etwa 40 Minuten auf. Zur Erklärung hierfür sei im folgenden eine Passage aus dem Programmübersetzungs-Benutzerhandbuch (x1C-Überset­ zer, IBM 93) zitiert:
"By default, the compiler builds and compiles the special template-include files in the tempinc subdirec­ tory of the working directory.
The compiler builds a template-include file correspon­ ding to each header file containing template function declarations. After the compiler creates one of these files, it may add any information to it as each compi­ lation unit is compiled. However, the compiler never removes information from the file."
Bei einem wie im Vorstehenden zitiert, Datei-basierten Arbeiten, ist dies die einzige mögliche Vorgehensweise. Der Compiler besitzt keinerlei sogenannte Kontextinfor­ mationen über die zu einer Anwendung gehörenden Da­ teien, so daß er nur Informationen zu den Beschrei­ bungsdateien hinzufügen kann. Bei zyklischen Entwick­ lungsprozess hat dies jedoch fatale Folgen.
Zum einen werden die Dateien im tempinc-Unterverzeich­ nis schnell sehr groß, und zum anderen wird der Compi­ ler durch das Hinzufügen identischer Informationen vor dem eigentlichen Binden der Objektdateien gezwungen, die Dateien im tempinc-Unterverzeichnis neu zu überset­ zen.
Als Endeffekt erhält man je nach der Anzahl der Ent­ wicklungszyklen seit dem letzten kompletten Löschen des tempinc-Verzeichnisses reine Linkzeiten in der Größen­ ordnung von 20 bis 40 Minuten. Die im Benutzerhandbuch vorgeschlagene Lösung, das tempinc-Unterverzeichnis zu löschen, kann jedoch nicht immer verwendet werden. Gerade bei großen Anwendungen kann dies nicht reali­ siert werden, da dann alle zur Anwendung gehörenden Dateien auch neu kompiliert werden müßten. Dies bedeu­ tet, daß die Vorteile des Make-Mechanismus außer Kraft gesetzt würden und eine Verkürzung der Linkzeit durch eine längere Kompilationszeit erkauft wird.
Die prototypische Lösung im vorstehenden Projekt be­ stand darin, aus allen zu einem Programmsystem gehö­ renden Dateien eine spezielle "template-include-Datei" vor dem Linkprozeß zu generiern.
So kann dem verwendeten xlC-Compiler über einen "Schal­ ter" mitgeteilt werden, in welchem Verzeichnis die Template-Include-Dateien angelegt werden sollen. Es ist jedoch nicht möglich, die Generierung dieser Dateien zu unterbinden, ohne daß die Codes für die Instantiierung der Templates "inline" kompiliert werden. Deshalb wird mit unterschiedlichen Verzeichnissen für die Template- Include-Dateien während der Übersetzungs- und der Link­ phase gearbeitet. Die zur Kompilationszeit erfolgten Einträge werden anschließend gelöscht. Die eigentlische Datei zur Beschreibung der Templates - fapu.hh.C - wird vor der Link-Phase unabhängig vom verwendeten Compiler zunächst als temporäre Datei gemäß der in dem vorste­ hend genannten Benutzerhandbuch (IBM93) beschriebenen Struktur erzeugt. Dazu werden alle zu einem Projekt gehörenden Header- und Implementationsdateien parsiert. Um unnötige Kompilationen der Template-Beschreibungs­ funktionen während der Link-Phase zu vermeiden, wird die temporäre im Template-Include-Datei nur dann in das Verzeichnis fapu-tempinc kopiert, wenn dort noch keine Datei fapu. hh. C im entsprechenden Verzeichnis exis­ tiert, oder wenn diese Unterschiede zu der temporären Version aufweist.
Das im folgenden angegebene Programm ist ein sogenann­ tes Shell-Programm und dient sowohl zur Generierung eines Datenbank-Schemas zur Benutzung mit der objekt­ orientierten Datenbank "ObjektStore" (ODI94) als auch zur Generierung der Template-Include-Datei für den x1C- Compiler, da beide mit analogen Strukturen arbeiten. In dem vorstehend beschriebenen Projekt "FAPU" sind nur Templates für spezielle Arten von ObjektStore-Collec­ tion-Klassen benutzt worden, wodurch die Programmstruk­ tur sehr einfach gehalten werden konnte.
Der folgende Programmteil dient lediglich zur Angabe eines erfindungsgemäßen Beispieles zur Anwendung der technischen Lehre des vorstehend geschilderten er­ findungsgemäßen Gedankens:

Claims (4)

1. Verfahren zur Programmübersetzung eines in der Programmiersprache C++ geschriebenen, aus mehreren Quelldateien bestehenden Pogramms, dessen Quelldateien insbesondere zur Software-Entwicklung mehrmals, in getrennten Durchgängen, zu übersetzen sind und Templates benutzen, die durch Instantiierung einem Code zuge­ wiesen werden, in einen Objektcode, der durch an­ schließendes Linken in einen ausführbaren Code umge­ setzt wird,
dadurch gekennzeichnet, daß ein xlC-Übersetzer verwendet wird, der in getrennten Übersetzungschritten der Quelldateien in den Objektcode solange keinen Code für die Instantiierung der Templates erzeugt, bis alle Quelldateien übersetzt sind, und
daß im Anschluß daran in einem getrennten Übersetzungsdurchgang unter Benutzung aller Quelldateien des Programms ein optimierter Code für die Instantiierung der Templates erzeugt wird, der während des nachfolgenden Linkens benutzt wird, so daß der Link-Vorgang wenige Minuten benötigt.
2. Verfahren nach Anspruch 1, dadurch gekennzeichnet, daß eine Template-include-Datei generiert wird, in die die im Quellprogramm enthaltenen Templates in übersetzter Code-Form eingeschrieben werden.
3. Verfahren nach Anspruch 2, dadurch gekennzeichnet, daß bei einer erneuten Pro­ grammübersetzung eines bereits übersetzten Quellpro­ gramms die erzeugte temporäre Template-include-Datei mit der bereits bestehenden Template-inlcude-Datei verglichen wird und bei Übereinstimmung übernommen wird.
4. Verfahren nach Anspruch 3, dadurch gekennzeichnet, daß bei der Übernahme der Erzeugungszeitpunkt der alten Template-include-Datei auf einen aktuellen Übersetzungszeitpunkt gesetzt wird, so daß diese Datei nicht noch einmal übersetzt wird.
DE19617719A 1996-04-30 1996-04-30 Verfahren zur Programmübersetzung eines in der Programmiersprache C++ geschriebenen Programms Expired - Fee Related DE19617719C2 (de)

Priority Applications (1)

Application Number Priority Date Filing Date Title
DE19617719A DE19617719C2 (de) 1996-04-30 1996-04-30 Verfahren zur Programmübersetzung eines in der Programmiersprache C++ geschriebenen Programms

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
DE19617719A DE19617719C2 (de) 1996-04-30 1996-04-30 Verfahren zur Programmübersetzung eines in der Programmiersprache C++ geschriebenen Programms

Publications (2)

Publication Number Publication Date
DE19617719A1 DE19617719A1 (de) 1997-11-13
DE19617719C2 true DE19617719C2 (de) 2000-01-05

Family

ID=7793193

Family Applications (1)

Application Number Title Priority Date Filing Date
DE19617719A Expired - Fee Related DE19617719C2 (de) 1996-04-30 1996-04-30 Verfahren zur Programmübersetzung eines in der Programmiersprache C++ geschriebenen Programms

Country Status (1)

Country Link
DE (1) DE19617719C2 (de)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7272821B2 (en) 2003-08-25 2007-09-18 Tech Mahindra Limited System and method of universal programming language conversion

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP0371944A2 (de) * 1988-11-29 1990-06-06 International Business Machines Corporation Rechnersystem und Verfahren zur Übersetzung eines Programms
US5375242A (en) * 1993-09-29 1994-12-20 Hewlett-Packard Company Compiler architecture for cross-module optimization

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP0371944A2 (de) * 1988-11-29 1990-06-06 International Business Machines Corporation Rechnersystem und Verfahren zur Übersetzung eines Programms
US5375242A (en) * 1993-09-29 1994-12-20 Hewlett-Packard Company Compiler architecture for cross-module optimization

Also Published As

Publication number Publication date
DE19617719A1 (de) 1997-11-13

Similar Documents

Publication Publication Date Title
DE69516891T2 (de) Verfahren zum übersetzen von quellkode aus einer computer-hochsprache in eine andere
DE69503065T2 (de) Objektorientierte vorrichtung für konfigurationsverlaufsverwaltung
DE3855696T2 (de) Relationelles Datenbanksystem
DE69328665T2 (de) Gerät zur Auflösung von Datenreferenzen in erzeugtem Kode
DE10121790B4 (de) Softwarekonfigurationsverfahren zur Verwendung in einem Computersystem
DE69226484T2 (de) System zur umwandlung von unterprogrammaufrufen in einer simulierten umgebung zur programmentwicklung
DE69031078T2 (de) Rechnerunterstützte softwareentwicklungseinrichtung
WO2010040597A2 (de) Verfahren und vorrichtung zum austauschen einer komponente eines computersystems
WO1991008534A1 (de) Verfahren zur dynamischen bindung von definierbaren programmelementen eines interaktiven datenverarbeitungssystems
DE102005045852A1 (de) Verfahren und System zum Schutz von Quellcode
EP1738257B1 (de) Verfahren zum vermeiden von dateninkonsistenz zwischen zugriffen verschiedener funktionen einer anwendung auf eine globale variable in einer datenverarbeitungsanlage
DE69226404T2 (de) Verfahren und Gerät zum Umwandlen von abstrakten Syntaxen auf hohem Niveau in eine Zwischenform
EP1040414A1 (de) Verfahren zum umsetzen eines systemaufrufs
DE102004009676A1 (de) Verfahren und Systeme zum Erzeugen von Unterstützungsdateien für Befehle
DE19617719C2 (de) Verfahren zur Programmübersetzung eines in der Programmiersprache C++ geschriebenen Programms
EP2977888B1 (de) Verfahren und System zur Speicherung und zur Versionsverwaltung von Computerprogrammen
DE102019105418B3 (de) Verfahren zum Erzeugen einer Darstellung einer Programmlogik, Dekompiliervorrichtung, Rekompiliersystem und Computerprogrammprodukte
DE69219420T2 (de) Verfahren und gerät zur rechnercode-verarbeitung in einem codeübersetzer
EP1609061A2 (de) Verfahren und anordnung zur veränderung von software oder quellcode
DE112010003774T5 (de) Kompatibilität auf objektebene und klassenskalierung unter verwendung semantischer werte
DE19725593A1 (de) Verfahren zum Steuern einer Datenverarbeitungsanlage
DE19637883B4 (de) Datenverarbeitungsanlage zur Ausführung großer Programmsysteme
DE3854428T2 (de) System und Verfahren, um Objekt-Programmodule zu erzeugen.
DE102012202603B3 (de) Verfahren zur modellbasierten Softwareentwicklung von Programmen mit Datenbankzugriff
DE102008044808B4 (de) Verfahren zur Generierung von Programmcode in einem Betriebssystemspeicher und einem Applikationsspeicher eines Datenträgers

Legal Events

Date Code Title Description
OP8 Request for examination as to paragraph 44 patent law
D2 Grant after examination
8364 No opposition during term of opposition
8339 Ceased/non-payment of the annual fee