EnglischFranzösischSpanisch

OnWorks-Favicon

stalin - Online in der Cloud

Führen Sie Stalin im kostenlosen OnWorks-Hosting-Provider über Ubuntu Online, Fedora Online, Windows-Online-Emulator oder MAC OS-Online-Emulator aus

Dies ist der Befehl stalin, der im kostenlosen OnWorks-Hosting-Provider über eine unserer zahlreichen kostenlosen Online-Workstations wie Ubuntu Online, Fedora Online, Windows-Online-Emulator oder MAC OS-Online-Emulator ausgeführt werden kann

PROGRAMM:

NAME/FUNKTION


stalin - Ein globaler optimierender Compiler für Scheme

ZUSAMMENFASSUNG


stalin [-Ausführung]

[-I include-Verzeichnis]*
[[-s|-x|-q|-t]]

[[-alle-Symbole-als-extern behandeln|
-behandele-nicht-alle-Symbole-als-extern]]
[[-Index-zugewiesene-String-Typen-durch-Ausdruck|
-Do-not-index-allocated-string-types-by-expression]]

[[-indexkonstante-strukturtypen-nach-slot-typen|
-nicht-konstante-Strukturtypen-nach-Slot-Typen indizieren]]
[[-index-konstante-struktur-typen-nach-ausdruck|
-nicht-konstante-Strukturtypen-nach-Ausdruck indizieren]]
[[-Index-zugeordnete-Strukturtypen-nach-Slot-Typen|
-zugeordnete-Strukturtypen-nach-Slot-Typen-nicht-indizieren]]
[[-index-zugeordnete-strukturtypen-nach-ausdruck|
-nicht-indizieren-zugeordnete-Strukturtypen-nach-Ausdruck]]

[[-index-konstante-überschrift-vektortypen-nach-elementtyp|
-nicht-indexieren-konstante-vektortypen-nach-elementtyp]]
[[-index-konstante-überschrift-vektortypen-nach-ausdruck|
-nicht-indexieren-konstante-vektortypen-nach-ausdruck]]
[[-index-zugeordnete-überschriftliche-vektortypen-nach-elementtyp|
-nicht-indizieren-zugeordnete-kopfzeilen-vektortypen-nach-elementtyp]]
[[-index-zugeordnete-überschrift-vektortypen-nach-ausdruck|
-nicht-indexieren-zugeordnete-Vektortypen-nach-Ausdruck]]
[[-indexkonstante-nonheaded-vektortypen-nach-elementtyp|
-nicht-indizieren-konstanten-nicht-überschrifteten-vektortypen-nach-elementtyp]]
[[-index-konstante-nonheaded-vector-types-by-expression|
-Do-not-index-constant-nonheaded-vector-types-by-expression]]
[[-Index-zugewiesene-Vektortypen-nach-Elementtyp ohne Kopf|
-nicht-indizieren-zugeordnete-Vektortypen-ohne-Kopfzeile-nach-Elementtyp]]
[[-index-zugewiesene-Vektortypen-nach-Ausdruck ohne Kopf|
-nicht-indexieren-zugeordnete-Vektortypen-nach-Ausdruck ohne Kopf]]

[[-keine-Klon-Größenbeschränkung|
-Klon-Größenbegrenzung Anzahl der Ausdrücke]]
[-aufteilen-auch-wenn-keine-Verbreiterung]
[[-vollständig-zu-CPS konvertieren|
-keine-entkommenden-Fortsetzungen]]
[-von]

[-Ob] [-Om] [-Auf] [-Oder] [-Ot]

[-d0] [-d1] [-d2] [-d3] [-d4] [-d5] [-d6] [-d7]
[-Verschluss-Umrechnungs-Statistik]

[-dc] [-DC] [-dH] [-dg] [-dh]

[-d]
[-die Architektur Name]
[[-Grundlinie|
-konventionell|
-Leicht]]
[[-sofort-flat|
-indirekt-flach|
-Sofortanzeige|
-indirekte-Anzeige|
verknüpft]]
[[-Align-Strings|-nicht-ausrichten-strings]]
[-die] [-df] [-dG] [-du] [-di] [-dp] [-dP]
[-ds] [-dS] [-Tmk]
[-no-tail-call-optimierung]

[-db] [-c] [-k]
[-cc C-Compiler]
[-Kopte C-Compiler-Option]*

[Pfadname]

Kompiliert die Scheme-Quelldatei Pfadname.sc zuerst in eine C-Datei Pfadname.c und dann in
ein ausführbares Image Pfadname. Erzeugt auch eine Datenbankdatei Pfadname.db. Die Pfadname
Argument ist erforderlich, es sei denn -Ausführung angegeben.

BESCHREIBUNG


Stalin ist ein äußerst effizienter Compiler für Scheme. Es ist so konzipiert, dass es nicht als
Entwicklungstool, sondern als Mittel zur Generierung effizienter ausführbarer Images entweder für
Anwendungsbereitstellung oder für Produktionsforschungsläufe. Im Gegensatz zum traditionellen Schema
-Implementierungen ist Stalin ein Batch-Modus-Compiler. Es gibt kein interaktives READ-EVAL-PRINT
Schleife. Stalin kompiliert eine einzelne Scheme-Quelldatei zu einem ausführbaren Image (indirekt
über C). Das Ausführen dieses Images hat eine äquivalente Semantik wie das Laden der Scheme-Quelldatei
in einen jungfräulichen Scheme-Interpreter und beendet dann seine Ausführung. Die Haupteinschränkung
ist, dass es nicht möglich ist, neue Ausdrücke oder Prozedurdefinitionen in ein LOAD oder EVAL zu laden
laufendes Programm nach der Kompilierung. Als Gegenleistung für diese Einschränkung leistet Stalin erhebliche
globale Kompilierzeitanalyse des Quellprogramms unter dieser Closed-World-Annahme und
erzeugt ausführbare Images, die klein, eigenständig und schnell sind.

Stalin verwendet zahlreiche Strategien, um effizienten Code zu generieren. Unter ihnen Stalin
führt globale statische Typanalysen mit einem weichen Typsystem durch, das rekursive Vereinigung unterstützt
Typen. Stalin kann für jeden Quellcode einen engen oder sogar monomorphen Typ bestimmen
Ausdruck in beliebigen Scheme-Programmen ohne Typdeklarationen. Dies ermöglicht Stalin,
die Laufzeittypprüfung und -verteilung zu reduzieren oder häufig zu eliminieren. Stalin tut auch niedrig-
Auswahl der Ebenendarstellung pro Ausdruck. Dies ermöglicht die Verwendung von unboxed
Basismaschinendatendarstellungen für alle monomorphen Typen, was zu extrem hohen
Zahlencode der Leistung. Stalin führt auch globale statische Lebenszeitanalysen für alle durch
zugeordneten Daten. Dadurch kann viel temporärer zugewiesener Speicher zurückgewonnen werden, ohne dass
Müllabfuhr. Schließlich hat Stalin sehr effiziente Strategien, um Abschlüsse zu kompilieren.
Zusammen ergeben diese Kompilierungstechniken synergistisch einen effizienten Objektcode.
Darüber hinaus enthalten die von Stalin erstellten ausführbaren Images keine (benutzerdefinierten oder
Bibliothek) Prozeduren, die nicht aufgerufen werden, Variablen und Parameter, die nicht verwendet werden, und
Ausdrücke, die nicht erreicht werden können. Dies fördert einen Programmierstil, bei dem man
erstellt und verwendet sehr allgemeine Bibliotheksverfahren, ohne befürchten zu müssen, dass ausführbare Images
unter Code-Blähung leiden.

OPTIONAL


-Ausführung
Druckt die Version von Stalin und wird sofort beendet.

Die folgenden Optionen steuern die Vorverarbeitung:

-I Gibt die Verzeichnisse an, in denen nach Scheme-Include-Dateien gesucht werden soll. Diese Option kann sein
wiederholt, um mehrere Verzeichnisse anzugeben. Stalin sucht zuerst nach Include-Dateien
im aktuellen Verzeichnis, dann jedes der im Befehl angegebenen Verzeichnisse
Zeile und schließlich im Standardinstallationsverzeichnis include.

-s Enthält die Makros aus der Scheme->C-Kompatibilitätsbibliothek. Derzeit ist dies
definiert die WHEN- und UNLESS-Syntax.

-x Enthält die Makros aus der Xlib- und GL-Bibliothek. Derzeit definiert dies die
FOREIGN-FUNCTION- und FOREIGN-DEFINE-Syntax. Dies impliziert -s.

-q Enthält die Makros aus der QobiScheme-Bibliothek. Derzeit definiert dies die
DEFINE-STRUCTURE-Syntax, unter anderem. Dies impliziert -x.

-t Enthält die Makros, die benötigt werden, um Stalin mit sich selbst zu kompilieren. Dies impliziert -q.

Die folgenden Optionen steuern die Genauigkeit der Strömungsanalyse:

-alle-Symbole-als-extern behandeln
Generieren Sie während der Flussanalyse ein einzelnes abstraktes externes Symbol, das gemeinsam genutzt wird
unter allen Symbolen.

-behandele-nicht-alle-Symbole-als-extern
Während der Flussanalyse, bei der Verarbeitung konstanter Ausdrücke, die Symbole enthalten,
Generieren Sie ein neues abstraktes internes Symbol für jede unterschiedliche Symbolkonstante im
Programm. Dies ist die Standardeinstellung.

-Index-zugewiesene-String-Typen-durch-Ausdruck
Während der Flussanalyse, bei der Verarbeitung von Prozeduraufrufausdrücken, die zuordnen können
strings, generieren Sie für jeden solchen Ausdruck einen neuen abstrakten String. Dies ist das
default.

-Do-not-index-allocated-string-types-by-expression
Während der Flussanalyse, bei der Verarbeitung von Prozeduraufrufausdrücken, die zuordnen können
Strings, generieren Sie einen einzelnen abstrakten String, der von allen solchen geteilt wird
Ausdrücke.

Beachten Sie, dass es keine Versionen der obigen Optionen für den Elementtyp gibt, da das Element
Typ eines Strings ist immer char. Darüber hinaus gibt es keine Versionen der oben genannten Optionen
für konstante Ausdrücke, da es immer nur einen einzigen abstrakten konstanten String gibt.

-indexkonstante-strukturtypen-nach-slot-typen
Während der Flussanalyse, bei der Verarbeitung von konstanten Ausdrücken, die Strukturen enthalten,
Generieren Sie dafür eine neue abstrakte Struktur für jeden Satz potenzieller Slot-Typen
Struktur.

-nicht-konstante-Strukturtypen-nach-Slot-Typen indizieren
Während der Flussanalyse, bei der Verarbeitung von konstanten Ausdrücken, die Strukturen enthalten,
eine einzelne abstrakte Struktur erzeugen, die von allen Potenzialgruppen geteilt wird
Slot-Typen für diese Struktur. Dies ist die Standardeinstellung.

-index-konstante-struktur-typen-nach-ausdruck
Während der Flussanalyse, bei der Verarbeitung von konstanten Ausdrücken, die Strukturen enthalten,
Generieren Sie für jeden solchen Ausdruck eine neue abstrakte Struktur. Dies ist die Standardeinstellung.

-nicht-konstante-Strukturtypen-nach-Ausdruck indizieren
Während der Flussanalyse, bei der Verarbeitung von konstanten Ausdrücken, die Strukturen enthalten,
erzeugen eine einzelne abstrakte Struktur, die von all diesen Ausdrücken geteilt wird.

-Index-zugeordnete-Strukturtypen-nach-Slot-Typen
Während der Flussanalyse, bei der Verarbeitung von Prozeduraufrufausdrücken, die zuordnen können
Strukturen, generieren Sie eine neue abstrakte Struktur für jeden Satz potenzieller Slot-Typen
für diese Struktur.

-zugeordnete-Strukturtypen-nach-Slot-Typen-nicht-indizieren
Während der Flussanalyse, bei der Verarbeitung von Prozeduraufrufausdrücken, die zuordnen können
Strukturen, generieren Sie eine einzelne abstrakte Struktur, die von allen Sätzen von geteilt wird
potenzielle Slot-Typen für diese Struktur. Dies ist die Standardeinstellung.

-index-zugeordnete-strukturtypen-nach-ausdruck
Während der Flussanalyse, bei der Verarbeitung von Prozeduraufrufausdrücken, die zuordnen können
Strukturen, generieren Sie für jeden solchen Ausdruck eine neue abstrakte Struktur. Das ist
der Standard.

-nicht-indizieren-zugeordnete-Strukturtypen-nach-Ausdruck
Während der Flussanalyse, bei der Verarbeitung von Prozeduraufrufausdrücken, die zuordnen können
Strukturen, eine einzelne abstrakte Struktur generieren, die von allen solchen geteilt wird
Ausdrücke.

Beachten Sie, dass Paare derzeit die einzige Art von Struktur sind, die in konstanten erscheinen kann
Ausdrücke. Dies kann sich in Zukunft ändern, wenn der Reader erweitert wird, um andere zu unterstützen
Arten von Strukturen.

-index-konstante-überschrift-vektortypen-nach-elementtyp
Während der Flussanalyse, wenn Konstantenausdrücke verarbeitet werden, die Überschrift enthalten
Vektoren, generieren Sie einen neuen abstrakten Kopfvektor für jeden möglichen Elementtyp für
dieser angeführte Vektor.

-nicht-indexieren-konstante-vektortypen-nach-elementtyp
Während der Flussanalyse, wenn Konstantenausdrücke verarbeitet werden, die Überschrift enthalten
Vektoren, generieren Sie einen einzelnen abstrakten Vektor mit Kopf, der von allen geteilt wird
mögliche Elementtypen für diesen Vektor mit Kopf. Dies ist die Standardeinstellung.

-index-konstante-überschrift-vektortypen-nach-ausdruck
Während der Flussanalyse, wenn Konstantenausdrücke verarbeitet werden, die Überschrift enthalten
Vektoren, einen neuen abstrakten Kopfvektor für jeden solchen Ausdruck generieren. Das ist
der Standard.

-nicht-indexieren-konstante-vektortypen-nach-ausdruck
Während der Flussanalyse, wenn Konstantenausdrücke verarbeitet werden, die Überschrift enthalten
Vektoren, einen einzelnen abstrakten Vektor mit Kopf generieren, der von allen solchen geteilt wird
Ausdrücke.

-index-zugeordnete-überschriftliche-vektortypen-nach-elementtyp
Während der Flussanalyse, bei der Verarbeitung von Prozeduraufrufausdrücken, die zuordnen können
Kopfvektoren, generieren Sie einen neuen abstrakten Kopfvektor für jedes potentielle Element
Typ für diesen Vektor mit Kopf.

-nicht-indizieren-zugeordnete-kopfzeilen-vektortypen-nach-elementtyp
Während der Flussanalyse, bei der Verarbeitung von Prozeduraufrufausdrücken, die zuordnen können
Vektoren mit Kopf, einen einzelnen abstrakten Vektor mit Kopf generieren, der von allen geteilt wird
mögliche Elementtypen für diesen Vektor mit Kopf. Dies ist die Standardeinstellung.

-index-zugeordnete-überschrift-vektortypen-nach-ausdruck
Während der Flussanalyse, bei der Verarbeitung von Prozeduraufrufausdrücken, die zuordnen können
Vektoren mit Kopf einen neuen abstrakten Vektor mit Kopf für jeden solchen Ausdruck generieren.
Dies ist der Standardwert.

-nicht-indexieren-zugeordnete-Vektortypen-nach-Ausdruck
Während der Flussanalyse, bei der Verarbeitung von Prozeduraufrufausdrücken, die zuordnen können
Vektoren mit Kopf, einen einzelnen abstrakten Vektor mit Kopf generieren, der von allen geteilt wird
solche Ausdrücke.

-indexkonstante-nonheaded-vektortypen-nach-elementtyp
Während der Flussanalyse, wenn Konstantenausdrücke verarbeitet werden, die keine Überschrift enthalten
Vektoren, generieren Sie einen neuen abstrakten Vektor ohne Kopf für jeden möglichen Elementtyp
für diesen Vektor ohne Kopf.

-nicht-indizieren-konstanten-nicht-überschrifteten-vektortypen-nach-elementtyp
Während der Flussanalyse, wenn Konstantenausdrücke verarbeitet werden, die keine Überschrift enthalten
Vektoren, einen einzelnen abstrakten Vektor ohne Kopf generieren, der von allen geteilt wird
mögliche Elementtypen für diesen Vektor ohne Kopf. Dies ist die Standardeinstellung.

-index-konstante-nonheaded-vector-types-by-expression
Während der Flussanalyse, wenn Konstantenausdrücke verarbeitet werden, die keine Überschrift enthalten
Vektoren, einen neuen abstrakten Vektor ohne Kopf für jeden solchen Ausdruck generieren. Dies
ist die Vorgabe.

-Do-not-index-constant-nonheaded-vector-types-by-expression
Während der Flussanalyse, wenn Konstantenausdrücke verarbeitet werden, die keine Überschrift enthalten
Vektoren, einen einzelnen abstrakten Vektor ohne Kopf generieren, der von allen solchen geteilt wird
Ausdrücke.

-Index-zugewiesene-Vektortypen-nach-Elementtyp ohne Kopf
Während der Flussanalyse, bei der Verarbeitung von Prozeduraufrufausdrücken, die zuordnen können
Vektoren ohne Kopf, erzeuge einen neuen abstrakten Vektor ohne Kopf für jedes Potential
Elementtyp für diesen Vektor ohne Kopf.

-nicht-indizieren-zugeordnete-Vektortypen-ohne-Kopfzeile-nach-Elementtyp
Während der Flussanalyse, bei der Verarbeitung von Prozeduraufrufausdrücken, die zuordnen können
Vektoren ohne Kopf erzeugen einen einzelnen abstrakten Vektor ohne Kopf, der von geteilt wird
alle möglichen Elementtypen für diesen Vektor ohne Kopf. Dies ist die Standardeinstellung.

-index-zugewiesene-Vektortypen-nach-Ausdruck ohne Kopf
Während der Flussanalyse, bei der Verarbeitung von Prozeduraufrufausdrücken, die zuordnen können
Vektoren ohne Kopf, erzeuge einen neuen abstrakten Vektor ohne Kopf für jeden solchen
Ausdruck. Dies ist die Standardeinstellung.

-nicht-indexieren-zugeordnete-Vektortypen-nach-Ausdruck ohne Kopf
Während der Flussanalyse, bei der Verarbeitung von Prozeduraufrufausdrücken, die zuordnen können
Vektoren ohne Kopf erzeugen einen einzelnen abstrakten Vektor ohne Kopf, der von geteilt wird
alle diese Ausdrücke.

Beachten Sie, dass konstante Ausdrücke derzeit keine Vektoren ohne Kopf und ohne Kopf enthalten können
Vektoren werden niemals durch einen Prozeduraufrufausdruck zugewiesen. ARGV ist das einzige kopflose
Vektor. Diese Optionen sind nur der Vollständigkeit halber und für den Fall, dass zukünftige Erweiterungen zu
die Sprache erlaubt Vektorkonstanten ohne Kopf und Prozeduren, die nicht mit Kopf zuweisen
Vektoren.

-keine-Klon-Größenbeschränkung
Unbegrenzte Polyvarianz zulassen, dh Kopien von Prozeduren beliebiger Größe erstellen.

-Klon-Größenbegrenzung
Legen Sie die Polyvarianzgrenze fest, dh erstellen Sie Kopien von Prozeduren, die weniger als haben
so viele Ausdrücke. Muss eine nicht negative ganze Zahl sein. Standardmäßig auf 80. Geben Sie 0 . an
um die Polyvarianz zu deaktivieren.

-aufteilen-auch-wenn-keine-Verbreiterung
Normalerweise erstellt Polyvarianz nur dann eine Kopie einer Prozedur, wenn sie mit aufgerufen wird
Argumente unterschiedlicher Art. Geben Sie diese Option an, um Kopien von Prozeduren zu erstellen
auch wenn sie mit Argumenten des gleichen Typs aufgerufen werden. Dadurch können sie
eingereiht sein.

-vollständig-zu-CPS konvertieren
Normalerweise wird eine einfache CPS-Konvertierung angewendet, bei der nur diese Ausdrücke konvertiert werden
und Verfahren, die erforderlich sind, um entkommende Fortsetzungen zu unterstützen. Wenn diese Option ist
angegeben, wird das Programm vollständig in CPS konvertiert.

-keine-entkommenden-Fortsetzungen
Normalerweise werden vollständige Fortsetzungen unterstützt. Wenn diese Option angegeben ist, wird die
Es werden nur Fortsetzungen unterstützt, die nach dem nicht aufgerufen werden können
Prozedur, die die Fortsetzung erstellt hat, ist zurückgekehrt.

-von Normalerweise erzwingt Stalin nach der Flussanalyse, dass jeder Typsatz höchstens einen hat
Struktur-Element eines gegebenen Namens, höchstens ein mit Kopf versehenes Vektor-Element, und
höchstens ein Element vom Typ Nonheaded-Vektor. Diese Option deaktiviert dies und erlaubt Typ
Sets, um mehrere Strukturtyp-Mitglieder eines bestimmten Namens zu haben, mehrere Überschriften-
Elemente vom Typ Vektor und mehrere Elemente vom Typ ohne Kopf. Manchmal ergibt sich
effizienteren Code und führt manchmal zu weniger effizientem Code.

Die folgenden Optionen steuern die Menge des generierten Codes zur Laufzeitfehlerprüfung. Notiz
dass Stalin unabhängig von den Einstellungen dieser Optionen immer Code generiert, der
gehorcht der Semantik der Scheme-Sprache für korrekte Programme. Nur diese Optionen
Kontrollieren Sie das Sicherheitsniveau, d. h. den Grad der Laufzeitfehlerprüfung auf fehlerhafte
Programme.

-Ob Gibt an, dass der Code zum Prüfen auf Out-of-bound-Vektor- oder String-Indizes lauten soll
unterdrückt. Wenn nicht angegeben, wird ein Laufzeitfehler ausgegeben, wenn ein Vektor oder
string subscript ist außerhalb der Grenzen. Falls angegeben, das Verhalten von Programmen, die
haben einen Out-of-bound-Vektor oder String-Index ist undefiniert.

-Om Gibt an, dass Code, der auf Fehler wegen unzureichenden Arbeitsspeichers überprüft wird, unterdrückt werden soll. Wenn nicht
angegeben, wird ein Laufzeitfehler ausgegeben, wenn nicht genügend Speicher verfügbar ist
zugeteilt. Falls angegeben, ist das Verhalten von Programmen, denen der Speicher ausgeht,
undefiniert

-Auf Gibt an, dass Code, der auf genauen Integer-Überlauf überprüft werden soll, unterdrückt werden soll. Wenn
nicht angegeben, wird bei einem exakten Integer-Überlauf ein Laufzeitfehler ausgegeben. Wenn
angegeben, ist das Verhalten von Programmen, die einen genauen Integer-Überlauf verursachen, undefiniert.
Derzeit weiß Stalin nicht, wie man einen Überlaufprüfcode generiert, also dies
Option muss angegeben werden.

-Oder Gibt an, dass der Code, der auf verschiedene Laufzeit-Dateisystemfehler überprüft werden soll,
unterdrückt. Wenn nicht angegeben, wird ein Laufzeitfehler ausgegeben, wenn ein fehlgeschlagener
Es wird versucht, eine Datei zu öffnen oder zu schließen. Falls angegeben, das Verhalten von Programmen
die solche erfolglosen Dateizugriffsversuche machen, ist nicht definiert.

-Ot Gibt diesen Code an, um zu überprüfen, ob primitive Prozeduren Argumente der
korrekter Typ wird unterdrückt. Wenn nicht angegeben, wird ein Laufzeitfehler ausgegeben, wenn a
primitive Prozedur wird mit Argumenten des falschen Typs aufgerufen. Falls angegeben,
Verhalten von Programmen, die eine primitive Prozedur mit Daten des falschen Typs aufrufen, ist
undefiniert

Die folgenden Optionen steuern die Ausführlichkeit des Compilers:

-d0 Erzeugt bei einem Compilerfehler eine Rückverfolgung zur Kompilierzeit.

-d1 Erzeugt während der Kompilierung einen Kommentar, der beschreibt, was der Compiler tut.

-d2 Erzeugt eine dekorierte Auflistung des Quellprogramms nach der Flussanalyse.

-d3 Erzeugt eine dekorierte Auflistung des Quellprogramms, nachdem äquivalente Typen erstellt wurden
zusammengeführt.

-d4 Erzeugt einen Aufrufgraphen des Quellprogramms.

-d5 Erzeugt eine Beschreibung aller generierten nicht trivialen nativen Prozeduren.

-d6 Erzeugt eine Liste aller Ausdrücke und Closures, die zusammen mit a . Speicher zuweisen
Beschreibung, wo dieser Speicher zugewiesen ist.

-d7 Erzeugt eine Spur des leichten Verschluss-Umwandlungsprozesses.

-Verschluss-Umrechnungs-Statistik
Erzeugt eine Zusammenfassung der Closure-Conversion-Statistik. Diese sind automatisch
vom Programm verarbeitet bcl-to-latex.sc die von der betrieben wird bcl-Benchmark Skript
(beide im /usr/local/stalin/benchmarks Verzeichnis), um die Tabellen II, III und . zu erstellen
IV, des Papiers Strömungsgerichtet Leichtgewicht Schließung Umwandlung (Conversion).

Die folgenden Optionen steuern die Speicherverwaltungsstrategie, die von kompiliertem Code verwendet wird:

-dc Deaktiviert die Verwendung von zuteilen(3). Normalerweise verwendet der Compiler zuteilen(3) zu
allocate auf der Aufrufliste, wenn möglich.

-DC Deaktiviert die Verwendung des konservativen Garbage Collectors von Boehm. Normalerweise ist die
Compiler verwendet den Boehm-Kollektor, um Daten zuzuordnen, deren Lebensdauer nicht bekannt ist
um es kurz zu fassen. Beachten Sie, dass der Compiler für einige immer noch den Boehm-Kollektor verwendet
Daten, wenn es diese Daten nicht auf dem Stack oder einer Region zuordnen kann.

-dH Deaktiviert die Verwendung von Regionen zum Zuweisen von Daten.

-dg Generieren Sie Code, um Diagnosenachrichten zu erstellen, wenn Regionssegmente zugewiesen werden und
befreit.

-dh Deaktiviert die Verwendung erweiterbarer Regionen und verwendet stattdessen Regionen mit fester Größe.

Die folgenden Optionen steuern die Codegenerierung:

-d Gibt an, dass ungenaue reelle Zahlen als C-Doppelte dargestellt werden. Normalerweise ungenaue reelle Zahlen
werden als C-Floats dargestellt.

-die Architektur
Geben Sie die Architektur an, für die Code generiert werden soll. Standardmäßig wird generiert
Code für jede Architektur, auf der der Compiler ausgeführt wird. Derzeit ist das bekannte
Architekturen sind IA32, IA32-align-double, SPARC, SPARCv9, SPARC64, MIPS, Alpha,
ARM, M68K, PowerPC und S390.

-Grundlinie
Führen Sie keine Konvertierung des leichten Verschlusses durch. Schließungen werden für alle geschaffen
Verfahren. Der Benutzer würde diese Option normalerweise nicht angeben. Es ist nur beabsichtigt
um die Wirksamkeit der Umstellung auf leichte Verschlüsse zu messen. Es wird von der verwendet
bcl-Benchmark Skript (in der /usr/local/stalin/benchmarks Verzeichnis) zu produzieren
Tabellen II, III und IV des Papiers Strömungsgerichtet Leichtgewicht Schließung Umwandlung (Conversion).

-konventionell
Führen Sie eine vereinfachte Version der Konvertierung von leichtgewichtigen Verschlüssen durch, die nicht darauf angewiesen ist
zur interprozeduralen Analyse. Versucht zu imitieren, was "herkömmliche" Compiler tun
(was auch immer das ist). Der Benutzer würde diese Option normalerweise nicht angeben. Es ist nur
soll die Wirksamkeit von Leichtbauverschlüssen messen. es ist
verwendet von der bcl-Benchmark Skript (in der /usr/local/stalin/benchmarks Verzeichnis) zu
Erstellen Sie die Tabellen II, III und IV des Papiers Strömungsgerichtet Leichtgewicht Schließung
Umwandlung (Conversion).

-Leicht
Führen Sie eine leichte Verschlusskonvertierung durch. Dies ist die Standardeinstellung.

-sofort-flat
Generieren Sie Code mit sofortigen Flat Closures. Dies ist (noch) nicht implementiert.

-indirekt-flach
Generieren Sie Code mit indirekten Flat Closures. Dies ist (noch) nicht implementiert.

-Sofortanzeige
Generieren Sie Code mit sofortigen Anzeigeschließungen.

-indirekte-Anzeige
Generieren Sie Code mit indirekten Anzeigeverschlüssen. Dies ist (noch) nicht implementiert.

verknüpft
Generieren Sie Code mit verknüpften Closures. Dies ist die Standardeinstellung.

-Align-Strings
Richten Sie alle Zeichenfolgen auf die feste Num-Ausrichtung aus. Dies funktioniert nicht, wenn Zeichenfolgen sind
von fremden Prozeduren zurückgegeben, die nicht auf die Fixnum-Ausrichtung ausgerichtet sind. Es wird
funktioniert auch nicht, wenn ARGV verwendet wird, da diese Strings auch nicht auf Fixnum ausgerichtet sind
Ausrichtung. Dies ist die Standardeinstellung.

-nicht-ausrichten-strings
Richten Sie Strings nicht an der Fixnum-Ausrichtung aus. Dies muss angegeben werden, wenn Zeichenfolgen
die von fremden Prozeduren zurückgegeben werden, sind nicht auf die Fixnum-Ausrichtung ausgerichtet.

-die Aktiviert die Compiler-Optimierung, bekannt als EQ? Fälschung. Ergibt manchmal mehr
effizienter Code und führt manchmal zu weniger effizientem Code.

-df Deaktiviert die als Fälschung bekannte Compiler-Optimierung.

-dG Übergeben Sie Argumente nach Möglichkeit mit globalen Variablen anstelle von Parametern.

-du Generieren Sie if-Anweisungen anstelle von switch-Anweisungen für das Dispatching.

-di Ermöglicht die Verwendung von unmittelbaren Strukturen.

-dp Aktiviert die Repräsentationsförderung. Fördert einige Schriftsätze von gequetscht zu
gequetscht oder gequetscht, wenn dies die Laufzeit verringert
Verzweigung oder Absendung von Vertretungszwängen. Ergibt manchmal effizienter
Code und führt manchmal zu weniger effizientem Code.

-dP Aktiviert die Weitergabe von Kopien. Ergibt manchmal effizienteren Code und manchmal
ergibt weniger effizienten Code.

-ds Deaktiviert die Compiler-Optimierung, die als Squeezing bekannt ist.

-dS Deaktiviert die als Squishing bekannte Compiler-Optimierung.

-Tmk Ermöglicht die Generierung von Code, der mit dem verteilten gemeinsamen Speicher von Treadmarks arbeitet
Paket. Derzeit ist diese Option nicht vollständig implementiert und funktioniert nicht.

-no-tail-call-optimierung
Stalin generiert jetzt Code, der standardmäßig in allen außer . richtig rekursiv ist
die seltensten Umstände. Und es kann dazu gezwungen werden, richtig Schwanz-
rekursiven Code unter allen Umständen durch entsprechende Optionen. Einige Tail-Rekursive
Anrufe, bei denen die Anrufseite in das Ziel eingebunden ist, werden als C . übersetzt
goto-Anweisungen und führen immer zu einem korrekt endrekursiven Code. Der Rest ist
übersetzt als C-Funktionsaufrufe in Endposition. Dies hängt vom C-Compiler ab, um
Führen Sie eine Tail-Call-Optimierung durch. gcc(1) Versionen 2.96 und 3.0.2 (und vielleicht andere
Versionen) führen Tail-Call-Optimierung auf IA32 (und möglicherweise anderen Architekturen) durch
wann -foptimize-Geschwisteranrufe angegeben. (-O2 impliziert -foptimize-Geschwister-
Anrufe.) gcc(1) führt nur in bestimmten Fällen Tail-Call-Optimierung auf IA32 durch
Umstände. Zuerst müssen das Ziel und die Anrufseite kompatibel sein
Unterschriften. Um kompatible Signaturen zu garantieren, übergibt Stalin Parameter an C
Funktionen, die Teil rekursiver Schleifen in globalen Variablen sind. Zweitens, die
Ziel darf nicht deklariert werden __Attribut__ ((keine Rückkehr)). Also wird Stalin nicht
generieren a __Attribut__ ((keine Rückkehr)) Deklaration für eine Funktion, die Teil von a . ist
Tail-rekursive Schleife, auch wenn Stalin weiß, dass sie nie wiederkehrt. Drittens, die
Funktion, die die Anrufseite enthält, kann nicht anrufen zuteilen(3). gcc(1) fließt kein
Analyse. Jeder Anruf an zuteilen(3) in der Funktion, die die Anrufstelle enthält, nein
egal ob die zugewiesenen Daten entkommen, wird die Tail-Call-Optimierung deaktivieren.
Somit deaktiviert Stalin die Stapelzuweisung von Daten in jeder Prozedur, die in a . eingebettet ist
Prozedur, die Teil einer tail-rekursiven Schleife ist. Schließlich kann die Anrufseite nicht
eine Wiedereintrittsregion enthalten, da Wiedereintrittsregionen beim Verlassen des Verfahrens freigegeben werden
und ein Endruf würde eine dazwischenliegende Gebietsrückgewinnung erfordern. Also Stalin
deaktiviert die Zuweisung von Daten zu einer wiedereintretenden Region in jedem Verfahren, das Teil von . ist
eine tail-rekursive Schleife. Das Deaktivieren dieser Optimierungen verursacht Kosten für den Nutzen
Tail-Call-Optimierung zu erreichen. Wenn Ihr C-Compiler keinen Tail-Call ausführt
Optimierung, dann möchten Sie vielleicht die Kosten nicht bezahlen. Die -no-tail-call-optimierung
Option veranlasst Stalin, diese vier oben genannten Maßnahmen nicht zu ergreifen, um Code zu generieren auf
welche gcc(1) würde eine Tail-Call-Optimierung durchführen. Auch wenn dies angegeben wird
Option übersetzt Stalin immer noch Anrufe, bei denen die Anrufseite in die
target, als C goto-Anweisungen. Es gibt drei seltene Gelegenheiten, die noch scheitern können
richtige Schwanzrekursion. Erstens, wenn Sie angeben -DC Sie können Stalin zwingen, den Stapel zu verwenden
oder Regionenzuweisung auch in einem Tail-Call-Zyklus. Sie können dies vermeiden, indem Sie nicht
spezifizieren -DC. Zweite, gcc(1) führt keine Tail-Call-Optimierung durch, wenn die
Die Funktion, die die Aufrufstelle enthält, wendet das unäre & auf eine lokale Variable an. gcc(1) die
keine Strömungsanalyse. Jede Anwendung von unärem & auf eine lokale Variable in der Funktion
die die Anrufstelle enthält, egal ob der Zeiger mit Escapezeichen versehen ist, wird Tail-
Anrufoptimierung. Stalin kann solche Verwendungen von unary generieren und wenn Sie es angeben -die
oder nicht angeben -df. Sie können solche Fälle vermeiden, indem Sie angeben -df und nicht
spezifizieren -die. Endlich, gcc(1) führt keine Tail-Call-Optimierung durch, wenn die
Funktion, die die Call Site Calls enthält setjmp(3). gcc(1) führt keine Strömungsanalyse durch.
Jeder Anruf an setjmp(3) in der Funktion, die die Anrufstelle enthält, egal ob
jmp_buf Escapes, deaktiviert die Tail-Call-Optimierung. Stalin übersetzt
bestimmte Anrufe an Anruf-mit-aktueller-Fortsetzung als Aufrufe an setjmp(3). Sie können
zwingen Sie Stalin, dies nicht zu tun, indem Sie angeben -vollständig-zu-CPS konvertieren. Stalin wird
im ersten und dritten Fall eine Warnung generieren, nämlich bei Tail-Call
Optimierung wird vereitelt durch Zuweisung von wiedereintretenden Regionen oder Aufrufe an zuteilen(3) or
setjmp(3). Sie können also mit der Angabe warten -vollständig-zu-CPS konvertieren oder unterlassen
spezifizieren -DC bis Sie solche Warnungen sehen. Es wird jedoch keine solche Warnung generiert,
bei Verwendung von unärer und Folien-Tail-Call-Optimierung. Also vielleicht möchtest du immer
angeben -df und unterlassen Sie die Angabe -die wenn Sie möchten, dass Ihre Programme
richtig tail rekursiv.

Die folgenden Optionen steuern die C-Kompilierungsphase:

-db Deaktiviert die Erstellung einer Datenbankdatei.

-c Gibt an, dass der C-Compiler nach dem Generieren des C-Codes nicht aufgerufen werden soll.
Normalerweise wird der C-Compiler nach der Generierung des C-Codes aufgerufen, um ein
ausführbares Bild. Dies impliziert -k.

-k Gibt an, dass die generierte C-Datei nicht gelöscht werden soll. Normalerweise ist das erzeugte
C-Datei wird gelöscht, nachdem sie kompiliert wurde.

-cc Gibt den zu verwendenden C-Compiler an. Standardmäßig auf gcc(1).

-Kopte Gibt die Optionen an, mit denen der C-Compiler aufgerufen werden soll. Normalerweise ist das C
Compiler wird ohne Optionen aufgerufen. Diese Option kann wiederholt werden, um zuzulassen
Übergabe mehrerer Optionen an den C-Compiler.

Verwenden Sie Stalin online mit den onworks.net-Diensten


Kostenlose Server & Workstations

Laden Sie Windows- und Linux-Apps herunter

Linux-Befehle

Ad