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.

previous    contents     next

Peter Junglas 18.10.1993