Benutzen von Bibliotheken
Die Fähigkeiten des Application-Compilers zur Programm-Analyse versagen
natürlich, wenn nicht der ganze Source-Code gegeben ist, weil man
Objekt-Code aus anderen Quellen in sein Programm einfügt, etwa
Bibliotheken, vorübersetzte Object-Files oder auch Assembler-Programme.
Für diesen Fall gibt es die Möglichkeit, die Informationen, die der
Application-Compiler über eine Routine benötigt, direkt in ein
Objekt-File einzufügen. Dazu schreibt man die Eigenschaften der Routinen
in ein File, das sogenannte Psum-File (''Procedure SUMmary File''), und fügt
sie dann mit Hilfe des Programms ''annotate'' in den Object-Code ein. Die
Standard-C- und -Fortran-Bibliotheken sowie die Veclib sind schon von
Convex entsprechend ausgestattet (''annotiert'') worden, so daß man diese
Routinen problemlos benutzen kann.
Dieses Verfahren ist aber nicht nur umständlich, sondern auch
fehleranfällig: Eine falsche Anweisung im PSUM-File kann bewirken, daß
durch eigentlich unzulässige Optimierungen fehlerhafte Programme
entstehen. Besser läßt man diese Arbeit vom Application-Compiler
ausführen. Dazu übersetzt man die Sourcen der Bibliothek wie ein
gewöhnliches Programm, gibt aber beim ''build''-Kommando (oder in der
''options''-Zeile) zusätzlich die Option ''-library'' an. Statt eines
ausführbaren Programms wird dann eine Bibliothek (mit der
Endung .apclib) erzeugt, die die zur Optimierung nötigen Informationen
enthält.
Möchte man Routinen aus solchen Bibliotheken in einem anderen Programm
verwenden, gibt man sie einfach in einer speziellen Buildfile-Zeile an:
apc_libraries lib1.apclib lib2.apclib ...
Das Programm kann nun genauso gut optimiert werden, als würde man die
entsprechenden Routinen direkt mit übersetzen, insbesondere ist ein
Inlinig möglich.
Falls man eine nicht-annotierte Bibliothek verwenden will, muß man den
Application-Compiler dazu überreden, indem man ''build'' mit der Option
''-permit unannotated'' aufruft. Der Compiler kann für entsprechende
Routinen nur das Schlimmste annehmen (alle Parameter und alle globalen
Variablen werden geändert), daher sind die Optimierungs- und
Fehlerprüfmöglichkeiten stark eingeschränkt.
Peter Junglas 18.10.1993