Diese Patches sind fuer die Vollversionen von StormC. Eine Anleitung finden Sie in der LIESMICH-Datei, die sich im LHA-Archiv befindet. Die Patches bauen aufeinander auf!
Direkter
Download von Patch 1 fuer StormC V1.1.
(227 KB; LHA gepackt.)
C
/ C++ Literaturliste (20. Mai 96)
StormC
1.1 - Infos zum Update von 1.0 auf 1.1 (Features)
! (19.Juni 96)
Patch 1 fuer StormC V1.05.
(Patcht Compiler und Linker; 50 KB; LHA gepackt.)
Patch 2 fuer StormC V1.05.
(Patcht Compiler und Library; 165 KB; LHA gepackt; benoetigt u.U. Patch
1!)
Patch 3 fuer StormC V1.05.
(Patcht Compiler und Library; 210 KB; LHA gepackt; benoetigt u.U. Patch
1 und 2!)
Ein "Global Optimizer" optimiert ein Programm unter Beachtung
der ganzenFunktion und nicht nur einzelner Anweisungen oder Ausdruecke.
Dadurch kann ein Global Optimizer z.B. Ausdruecke, die in einer Schleife
ausgewertet werden, aber in jedem Scheifendurchlauf immer das gleiche Ergebnis
liefern muessen, aus der Schleife herausziehen und schon vor der Schleife
bearbeiten.
StormC kann diese globale Optimierung bislang nicht, ist allerdings schon
in Version 1 dazu vorbereitet, in einer der naechsten Versionen auch diese
Optimierung zu beherrschen. Allerdings kann StormC schon jetzt einige Optimierungen,
die auch Aufgaben des Global Optimizers sind. Dazu gehoert insbesondere
die globale CPUund FPU Registerverteilung in den hoeheren Optimierungsstufen.
Die Register werden in der ganzen Funktion unter Beachtung aller Variablenzuweisungen
und Funktionsaufrufe in der Funktion optimal verteilt.
Die mitgelieferte StormC Bibliothek "storm.lib" ist eine ANSI C Bibliothek. Fuer ein "Hello World" Programm muss aus dieser Bibliothek die "printf" Funktion gelinkt werden. Dadurch kommen aber auch unbenutzte Funktionen z.B. fuer die Ausgabe von Integer und Fliesskommazahlen ins Programm, da aus dem "printf" Befehl nicht ersichtlich ist, welche der Umwandlungen noetig sind. Ausserdem werden alle Ausgaben in Dateien gepuffert durchgefuehrt. Dadurch werden auch kurze Programm relativ gross.
Kann man auf Fliesskommaausgabe verzichten und reicht einem die Pufferung des AmigaDOS aus, kann man jederzeit zur Ausgabe das AmigaDOS direkt verwenden. Die Funktionen "VPrintf" und "VFPrintf" ermoeglichen naemlich direkt die Ausgabe aehnlich wie "printf" auf AmigaDOS Dateien. Allerdings sind diese Funktionen nicht 100% ANSI kompatibel.Weitere Moeglichkeiten bietet natuerlich der Verzicht auf das automatische Oeffnen und Schliessen der Bibliotheken, denn die dazu benutzten Funktionen bieten eine komfortable Fehlermeldungsausgabe mit Unterscheidung zwischenWorkbench und CLI Start eines Programms und Beachtung alter Betriebssystemversionen 1.3 und aelter. Dieser Komfort ist nicht fuer jedes Programm notwendig. Man kann einen Minimalstartupcode, den man in Assembler schreibt als eigenen Startupcode benutzen und darin nur die notwendigsten Arbeiten erledigen, z.B. das kleine Datenmodell unterstuetzen ohne gleichzeitig residente Programme zu erlauben.
StormC erzeugt sauberen optimierten Code mit optimaler Registerbenutzungund
vielfaeltigen Optimierungen. Ausserdem ist StormC konsequent auf den PowerPC
vorbereitet und verzichtet deshalb auf den Einsatz schneller aber fehleranfaelliger
Assemblerroutinen. Leider ist darum die derzeitigeVersion des Compilers
nicht so schnell wie beispielsweise MaxonC++, allerdings arbeiten wir an
einer speziellen Optimiererstufe fuer die Entwicklungsphase eines Projektes
mit noch kuerzeren Uebersetzungszeiten.
StormC unterstuetzt ein weiterentwickeltes Objektformat, das auch bei
Linkerbibliotheken zum Einsatz kommt. Dieses Format ist 100% kompatibel
zum alten (sowohl aufwaerts, wie auch abwaerts), allerdings koennen der
StormLinker und der StormC Compiler mit diesem Format mehrere Datenmodelle
in einer Objektdatei aufnehmen. Damit bleibt fuer Sie nicht mehr die fehleranfaellige
Auswahl der richtigen Bibliothek zu ihren gewaehlten Compileroptionen,
sondern der Linker waehlt aus der grossen Bibliothek "storm.lib"
die Teile aus, die fuer das gewaehlte Datenmodell (grossesDatenmodell oder
eines der beiden kleinen Datenmodelle) gerade passt. Deshalb ist die "storm.lib"
etwa so gross, wie drei einzelne Bibliotheken fuer jedes Datenmodell zusammen.
In Zukunft wird StormC auch noch verschiedene Codemodelle und CPU- bzw.
FPU-Modelle in der Bibliothek unterstuetzen, sodass die "storm.lib"
und alle weiteren Bibliotheken jeweils optimale Programmeerzeugung automatisch
erlauben.
Die Shared-Library ruft die ANSI-Funktion exit() auf. Das kann sie zu einen
explizit, weil Sie diese Funktion verwenden, oder zum anderen implitzit
durch Linker-Bibliotheken, die diese Funktion verwenden. Die "Storm.Lib"
nutzt diese Funktion beim automatischen Oeffnen der benutzten Shared-Libraries,
z.B. der "utility.library".
Grundsaetzlich darf aber eine Shared-Library die Funktion exit() nicht
verwenden, da sie nicht einfach so beendet werden kann.
Man darf das automatische Oeffnen von benutzten Shared-Libraries nicht
verwenden, sondern muss die Bibliotheken wie im Handbuch auf Seite 140
beschrieben, oeffnen und schliessen.
Um herauszufinden, welche Bibliotheken alle benutzt werden, sollte man
zuerst eine Funktion:
void exit() {}
in die Shared-Library aufnehmen. Jetzt laesst sich die Library linken.
Verwenden Sie die Linker-Option "Map-Datei schreiben". Der Linker
erzeugt eine Datei mit der Endung ".map". Suchen Sie alle INIT-Funktionen,
die den Basisnamen einer Shared-Library enthalten, z.B. INIT_1_UtilityBase.
Oeffnen Sie diese Bibliotheken nun alle selbst. Denken Sie auch daran,
die entsprechende Basisvariable (z.B. UtilityBase) selbst zu deklarieren.
Vergessen Sie nicht, die eigene exit()-Funktion wieder aus Ihrem Source
zu entfernen.
Zurück zur Homepage.
(c) 1996 HAAGE & PARTNER Computer, Germany - http://ourworld.compuserve.com/homepages/haage_partner