Scheme2Js ist ein Schema, um Javascript-Compiler. Während einige Anstrengungen darauf, so nahe wie möglich an R5RS ausgegeben wurden, konzentrierten wir uns hauptsächlich auf die Effizienz.
Normalerweise Scheme2Js produziert Javascript-Code, ist, dass vergleichbar mit handgeschriebenem Code. Um diese Leistung zu erreichen, ist nicht vollständig Scheme2Js R5RS konform. Insbesondere fehlt es an Unterstützung für Fortsetzungen, genaue Zahlen und es Endrekursion behandelt nur teilweise.
Scheme2Js bietet verschiedene Fahnen, die auf das Ergebnis ändern können:
ย ท --no-js-Punktnotation verweigert den Zugriff auf JavaScript Felder mit der Punktnotation. Dieses Flag deaktiviert Zugriffe der Form xy wie in document.getElementById. Es ist jedoch immer noch möglich, den Zugriff auf die ist ein gültiger Ausdruck mit der js-Feldfunktion.
ย ท --mutable-Zeichenketten: Um die Leistung von String-Operationen zu verbessern und die Schnittstelle zwischen Scheme und JavaScript-Code, der Default-Implementierung Karten Scheme Strings in JavaScript-Strings zu erleichtern. Im Gegensatz zu Scheme Saiten sind JavaScript-Strings jedoch unveränderlich. Diese Flagge Karten Strings zu einer JavaScript-Klasse, die Scheme Strings repräsentiert, die veränderlich sind. Der resultierende Code vielleicht etwas langsamer sein, und es ist schwieriger, mit Javascript-Code-Schnittstelle.
ย ท --encapsulate-Teile kapselt das Programm in eine anonyme Funktion. Nur globale Variablen sind außerhalb dieses anonyme Funktion. Auf der einen Seite stellt dies einen Funktionsaufruf an die anonyme Funktion. Aber auf der anderen Seite die meisten Javascript-Implementierungen sollte schneller mit dieser Optimierung ausgeführt: in der Regel Hash-Tabellen werden verwendet, um Bereiche in JavaScript zu vertreten. Durch die Verwendung einer anonymen Funktion der Programme Variablen werden in die eigene kleinere Hash-Tabelle, die (theoretisch) beschleunigt die Zugriffe auf diese Variablen getrennt. Noch wichtiger sind die Variablen in der eigenen Hash-Tabelle gespeichert ist, und nicht in der globalen Hashtabelle, die durch die globale Variable zugänglich ist. Es ist extrem einfach, den Inhalt der globalen Variablen indirekt zu modifizieren. Inlining oder andere gemeinsame Optimierungen sind daher unmöglich, sich auf globale Variablen zu tun. Durch die Programmvariablen zu speichern in einer anonymen Funktion diese Optimierungen werden wieder möglich.
ย ท --optimize-var-Anzahl reduziert die Anzahl der Variablen in der resultierenden JavaScript-Code verwendet. Der Code kann schneller ausgeführt werden, ist aber schwierig zu debuggen, da die Variablennamen hat und dieselbe Variable kann mehrmals verwendet werden.
ย ท --optimize-while: mit dieser Flagge Scheme2Js optimiert gemeinsamen while-Schleifen. Die optimierten while-Schleifen sind häufig in der Form:
while (true) {
if (Test)
resVar = res;
else {
modify_loop_variable;
fortzusetzen;
}
break;
}
Diese Optimierung sucht nach diesen Mustern und bewegt den Test in der while-Schleife:
while (! Test) {
modify_loop_variable;
}
resVar = res;
Diese Optimierung wurde erst kürzlich implementiert und ist daher noch nicht standardmäßig aktiviert.
ย ท --verbose druckt einige Informationen.
ย ท --no-Inlining deaktiviert alle Inlinefunktionen (Konstanten könnte noch inline sein).
ย ท --inline-Globals lässt Scheme2Js inline globalen Funktionen und Konstanten. Dies könnte zwei unerwünschte Nebenwirkungen haben: Zum einen sind globale Variablen häufig verwendet, um Daten zwischen verschiedenen Modulen zu übertragen. Einige inlined Funktionen verloren gehen, wenn kein Bezug mehr zu ihnen. Wenn globale Funktionen außerhalb eines Moduls verwendet werden, sollte man nicht verwenden dieses Flag. (Dieses Verhalten ist wahrscheinlich in zukünftigen Versionen von Scheme2Js ändern.)
ย ท --unresolved-is-js: wenn eine Variable ungebunden ist, wird der Compiler davon ausgehen, die Variable stammt aus einem anderen Modul oder von JavaScript. Siehe Abschnitt Scheme - Javascript, um eine ausführliche Diskussion über die JavaScript Scheme-Schnittstelle.
ย ท --js-dies die diese Variable im Scheme-Funktionen. Auf diese Weise können Scheme Verfahren als Verfahren zum JavaScript-Objekte verwendet werden.
ย ท --no-tailrec deaktiviert die tailrec zu while-Schleife-Optimierung. Wenn Sie einen Fehler in der Compiler Weise zu übersetzen tail-recs vermuten, können Sie dieses Flag zu versuchen.
ย ท --no-optimize-Anrufe deaktiviert Scheme2Js Inlining von binären oder unäre Operationen. Zum Beispiel sci_plus (3, 5) mit (3 + 5) optimiert. Diese Optimierung ist sehr wichtig, und es gibt in der Regel keinen Grund, sie zu deaktivieren.
ย ท --no-optimize-consts deaktiviert die pre-Berechnung konstant. Es sei denn, Behinderte (mit diesem Flag) werden Verbindung Konstanten vorberechnet und deren Vorkommen durch einen Verweis auf eine Variable, die die Konstante ersetzt. Dies macht wiederholte Zugriffe auf diese Konstanten schneller, aber stellt neue Variablen.
ย ท --no-optimize-boolify deaktiviert die boolify Optimierung. JavaScript und Schema der boolify nicht gleichwertig sind: JavaScript Auffassung falsch, 0, null und undefined, falsch zu sein, wohingegen Scheme hat #f nur. Die optimierten boolify daher fügt immer den Test gegen falsche: if (Test == false!) ... Wenn Scheme2Js kann sehen, dass der Test selbst ist ein boolean, kann die unnötige entfernen == false Test!. Dieses Flag deaktiviert diese Optimierung.
ย ท --d STAGE druckt eine dot-Datei (siehe graphviz) des AST nach Stufe Bühne. Mögliche Stufen sind: zu erweitern, Baum, Symbol, node-elim1, Schwanz, inline, konstanter Ausbreitungs, rm-unbenutzt-vars, capture, node-elim2, während, (tt "Aussagen"), Knoten-elim3. In der Regel eine nicht dieses Flag muss, es sei denn, für die Fehlersuche.
ย ท --print-Loks druckt den Originalschauplätzen als Kommentare in die JavaScript-Datei. Diese Standorte sind derzeit die Zeichen-Offset vom Anfang der Datei
Was ist neu in dieser Pressemitteilung:.
- Minor Änderungen und Bugfixes sind von Hop zu Scheme2Js portiert.
Was ist neu in Version 20100816:.
- Scheme2Js "Laufzeit-Lesegerät erkennt nun Keywords
- Mehrere Fehler wurden behoben.
Was ist neu in Version 20081219:.
- Der Compiler optimiert worden ist
- Es ist jetzt viel schneller und verbraucht weniger Speicher.
- Viele Fehler wurden behoben.
- Die Standard-Modul-Klausel Scheme2Js ist jetzt ähnlich dem von Bigloo.
- Diese Version unterstützt qualifizierte Namen.
Kommentare nicht gefunden