Scheme2Js je Program na Javascript kompilátor. Zatímco někteří úsilí bylo vynaloženo na je tak blízko, jak je to možné, aby R5RS, jsme se soustředili především na účinnost.
Obvykle Scheme2Js produkuje Javascript kód, který je srovnatelný s ručně psaný kód. Za účelem dosažení tohoto výkonu, Scheme2Js není úplně R5RS kompatibilní. Zejména to postrádá podporu pro pokračováních, přesné počty a zachází ocas rekurzi jen částečně.
Scheme2Js poskytuje několik vlajek, které umožňují upravit výsledek:
ย ท --no-js-dot-notace znemožňuje přístup do polí JavaScript s dot-notace. Tento příznak zakáže přístupy z tvaru XY jako v document.getElementById. Je však stále možné přistupovat, je platný výraz pomocí funkce js-pole.
ย ท --mutable-strings: s cílem zlepšit výkonnost String-operací a usnadnit rozhraní mezi schématu a kód JavaScript, Výchozí implementace Programu mapy řetězců na řetězce JavaScript. Na rozdíl od schématu řetězce, řetězce JavaScriptu jsou však neměnné. Tento příznak mapy řetězce na třídu JavaScript, který představuje Scheme řetězce, které jsou proměnlivé. Výsledný kód může být o něco pomalejší, a je obtížnější propojení s kódu JavaScriptu.
ย ท --encapsulate-díly zapouzdřuje program do anonymní funkce. Pouze globální proměnné jsou mimo tento anonymní funkce. Na jedné straně to představuje jedno volání funkce pro anonymní funkce. Ale na druhou stranu většina implementace Javascript by měl běžet rychleji s touto optimalizací: obvykle hashtables jsou používány reprezentovat obory v jazyce JavaScript. Při použití anonymní funkce programy proměnné jsou rozděleny do své vlastní menší Hashtable, které (teoreticky) zrychluje přístup do těchto proměnných. A co je důležitější, že proměnné jsou uloženy v jejich vlastním Hashtable, a nejsou v globálním Hashtable, která je přístupná prostřednictvím globální proměnné. Je velmi snadné nepřímo upravovat obsah globálních proměnných. Inlining nebo další společné optimalizace jsou proto možné dělat na globální proměnné. Uložením proměnných programu v anonymní funkce se opět možné tyto optimalizace.
ย ท --optimize-var-číslo snižuje počet proměnných používaných ve výsledném kódu JavaScript. Kód může pracovat rychleji, ale je mnohem obtížnější ladění, jako je jméno proměnné jsou ztraceny a téže proměnné mohou být použity několikrát.
ย ท --optimize-while: s Tento příznak Scheme2Js optimalizuje běžné while. Neoptimalizovaných zatímco smyčky jsou často ve tvaru:
while (true) {
if (test)
resVar = res;
else {
modify_loop_variable;
pokračovat;
}
rozbít;
}
Tato optimalizace hledá pro tyto vzory a pohybuje zkoušku do smyčky while:
zatímco (test!) {
modify_loop_variable;
}
resVar = res;
Tato optimalizace byla provedena teprve nedávno, a je proto ještě není ve výchozím nastavení aktivována.
ย ท --verbose vytiskne nějaké informace.
ย ท --no-inlining zakáže všechny funkce inlining (konstanty by mohlo být ještě inline).
ย ท --inline-globals umožňuje Scheme2Js inline globální funkce a konstanty. To by mohlo mít dva nežádoucí vedlejší účinky: pro jednoho, globální proměnné jsou často používány k přenosu dat mezi různými moduly. Některé inline funkce jsou ztraceny, pokud není odkaz na ně už ne. Pokud jsou globální funkce, které mají být použity mimo modul, jeden by neměl používat tento příznak. (Toto chování je pravděpodobně změnit v budoucích verzích Scheme2Js.)
ย ท --unresolved-je-js: pokud proměnná je nevázaný, bude kompilátor předpokládat proměnná pochází z jiného modulu, nebo z jazyka JavaScript. Viz oddíl schéma - Javascript pro detailnější diskusi o rozhraní JavaScript schématu.
ย ท --js-to poskytuje tuto proměnnou uvnitř funkce Scheme. Tímto způsobem, schéma postupy, mohou být použity jako způsob objektů JavaScript.
ย ท --no-tailrec zakáže tailrec na while-smyčky optimalizace. Pokud máte podezření na chybu v kompilátoru způsob, jak překládat ocas-REC, můžete zkusit tento příznak.
ย ท --no-optimize-hovory zakáže Scheme2Js inlining binárních nebo unární operací. Například sci_plus (3, 5) je optimalizována tak, aby (3 + 5). Tato optimalizace je docela důležité, a tam je obvykle není důvod ji zakázat.
ย ท --no-optimize-consts zakáže pre-konstantní výpočet. Není-li zakázán (s tímto příznakem), složené konstanty jsou předem vypočítaných a jejich výskyty nahrazeny odkazem na proměnnou drží konstantu. Tím se opakuje přistupuje k těmto konstanty rychleji, ale zavádí nové proměnné.
ย ท --no-optimize-boolify zakáže boolify optimalizaci. JavaScript je a schéma je boolify nejsou rovnocenné: JavaScript domnívá false, 0, null a nedefinovaný, že jsou nepravdivé, zatímco schéma má pouze #f. Neoptimalizovaných boolify proto vždy přidá test proti false: if (test == false!) ... Pokud Scheme2Js můžete vidět, že test sám je boolean, může to odstranit zbytečné == falešné testu!. Tento příznak zakáže tuto optimalizaci.
ย ท -D STAGE vytiskne tečka-souboru (viz graphviz) z AST po jevišti Stage. Možné etapy jsou: rozšířit, strom, symbol, uzlu-elim1, ocas, řadový, neustálé-šíření, RM-nepoužitý-Vars, zachytit, uzel-elim2, zatímco (tt "prohlášení"), uzel-elim3. Obvykle člověk nepotřebuje tento příznak, není-li pro účely ladění.
ย ท --print-Locs tiskne původní místa jako komentáře do souboru JavaScript. Tyto lokality jsou v současné době charakter, posun od začátku souboru
Co je nového v této verzi:.
- Minor změny a opravy chyb bylo přeneseno z chmele na Scheme2Js.
Co je nového ve verzi 20100816:.
- runtime-reader Scheme2Js "nyní uznává klíčová slova
- Některé chyby byly opraveny.
Co je nového ve verzi 20081219:.
- kompilátor byl optimalizován
- je nyní mnohem rychlejší a spotřebovává méně paměti.
- Mnoho chyby byly opraveny.
- klauzule Výchozí modul Scheme2Js je nyní podobná jedné z Bigloo.
- Tato verze podporuje kvalifikované názvy.
Komentáře nebyl nalezen