 |
 | |  |  | | Beschreibung |  | Compiler übersetzen den Quellcode in ausführbaren Programmcode. Die Qualität des Compilers wirkt sich unmittelbar auf den Herstellungsprozess und natürlich auch auf das Endprodukt aus. Ein guter Compiler sollte folgende Eigenschaften erfüllen [ PoBl96 ]:
- Korrektheit und Zuverlässigkeit
Das Testen und die damit einhergehende Fehlersuche gehören zu den aufwändigsten Tätigkeiten bei der Software-Entwicklung. Der Entwickler muss sich darauf verlassen können, dass der Compiler aus dem vorliegenden Quelltext semantisch äquivalenten Maschinencode generiert. Der Compiler muss seine Aufgabe auch unter extremen Bedingungen (z.B. bei sehr großen Programmen) erfüllen.
- Geschwindigkeit
Der Compiler muss schnell sein, damit der immer wiederkehrende Zyklus "Editieren => Übersetzen => Starten" möglichst schnell durchlaufen werden kann.
- Erzeugung effizienten Codes
Der erzeugte Code soll kompakt und schnell sein. Ein guter Compiler ist in der Lage, zahlreiche Optimierungen vorzunehmen (z.B. Haltung häufig benutzter Variablen in Registern, Optimierung von Schleifen usw.). Erzeugt der Compiler effizienten Code, kann die Programmiersprache auch für zeitkritische Programmteile verwendet und so auf den Einsatz von Assemblersprachen verzichtet werden.
- Gutes Fehlerverhalten
Der Compiler muss fehlerhafte Programme zurückweisen. Im Fehlerfall sollte der Compiler möglichst genaue Informationen über die Fehlerursache liefern und die Fehlerstelle markieren. In Editoren integrierte Compiler können die Übersetzung beim ersten Fehler abbrechen und die Korrektur des Fehlers vom Programmierer verlangen; ein Stapel-Editor sollte hingegen möglichst viele Fehler auf einmal finden. Linker dienen zur Erstellung ausführbarer Programmsysteme aus einzeln übersetzten Programmmodulen. In manchen Entwicklungssystemen sind Linker Bestandteil des Compilers, unter Umständen treten jedoch auch getrennte Linker auf, die von der Quellsprache unabhängig sind. Beide Systeme haben Vor- und Nachteile. Ein zum Compiler gehörender Linker kann sprachspezifische Inkonsistenzen zwischen den einzelnen Modulen entdecken und melden, während ein zum System gehörender Linker heterogene (in mehreren Quellsprachen geschriebene) Programmsysteme unterstützt.
Das vom Übersetzen getrennten Linken (sog. "Binden") hat den Vorteil, dass jedes Modul inkrementell entwickelt und übersetzt werden kann und auf diese Weise große Programmsysteme effizient erstellt und lange Übersetzungszeiten zur Übersetzung des gesamten Quellcodes in einem vermieden werden [ May01 ]. Ein aus mehreren oder vielen Modulen bestehender Quellcode besitzt jedoch vielfach eine sehr komplexe Abhängigkeitsstruktur zwischen den Modulen. Wenn sich die Schnittstelle eines Moduls ändert, müssen alle Module, die diese Schnittstelle benutzen, neu übersetzt werden [PoBl96]. Die kontrollierte Neuübersetzung eines aus mehreren Modulen bestehenden Systems wird günstigenfalls automatisiert durchgeführt, wobei die Mehrzahl der verfügbaren Werkzeuge ähnlich dem UNIX-Werkzeug make arbeitet. |  |
 | |  |  | |  | |  | |  |  |  | | Zu dieser Seite wurden noch keine Kommentare oder Bewertungen abgegeben. |
|
|  | |  |  |   | Übergeordnet |  |  |  | |  |  |  |  |  | Compiler |  |  |  |  |  | Literaturhinweise |  |  |  | |  |  | |  |  |  |  |  | Weitere Themen |  |  |  | |  |  | |  |  | |  |  |  |  |  |  |
|