Scheme2Js is een regeling om Javascript compiler. Terwijl sommige inspanning is besteed aan het zijn zo dicht mogelijk bij R5RS, we vooral geconcentreerd op efficiency.
Meestal Scheme2Js produceert Javascript-code, die vergelijkbaar is met de hand geschreven code. Om deze standtijd Scheme2Js niet volledig R5RS compliant. In het bijzonder het ontbreekt ondersteuning voor voortzettingen, exacte aantallen en het behandelt staartrecursie slechts gedeeltelijk.
Scheme2Js biedt verschillende vlaggen, die het mogelijk maken om het resultaat te wijzigen:
ย ท --no-js-dot-notatie verbiedt toegang tot JavaScript velden met de dot-notatie. Deze vlag schakelt toegangen van de vorm xy als in document.getElementById. Het is echter nog steeds mogelijk om toegang te krijgen tot het is een geldige uitdrukking met behulp van de js-veld functie.
ย ท --mutable-strings: om de prestaties van de string-operaties te verbeteren en om de interface tussen de Regeling en JavaScript-code, de standaard implementatie kaarten Scheme snaren JavaScript strings te verlichten. In tegenstelling tot de regeling strings, JavaScript strings zijn echter onveranderlijk. Deze vlag kaarten snaren om een JavaScript-klasse, dat Scheme strings vertegenwoordigt, die veranderlijk zijn. De resulterende code kan enigszins trager, en het is moeilijker om met Javascript code.
ย ท --encapsulate-onderdelen kapselt het programma in een anonieme functie. Alleen globale variabelen zijn buiten deze anonieme functie. Aan de ene kant is dit introduceert één functie oproep naar de anonieme functie. Maar aan de andere kant de meeste Javascript implementaties moeten sneller met deze optimalisatie uitvoeren: meestal hashtables worden gebruikt om scopes te vertegenwoordigen in JavaScript. Via een anonieme functie de programma variabelen gescheiden in hun kleinere hash die (theoretisch) versnelt toegang tot deze variabelen. Belangrijker variabelen worden opgeslagen in hun eigen hash, en niet in de globale hash, die toegankelijk is voor de globale variabele is. Het is zeer gemakkelijk om de inhoud van globale variabelen indirect modificeren. Inlining of andere gemeenschappelijke optimalisaties zijn dus onmogelijk om te doen op de globale variabelen. Door het opslaan van variabelen van het programma in een anonieme functie deze optimalisaties worden weer mogelijk.
ย ท --optimize-var-nummer vermindert het aantal variabelen in de resulterende JavaScript-code. De code kan sneller worden, maar is moeilijker te zuiveren, zoals de namen van variabelen verloren en dezelfde variabele kan enkele keren gebruikt.
ย ท --optimize-while: met deze vlag Scheme2Js optimaliseert gemeenschappelijke terwijl loops. De unoptimized terwijl lussen zijn vaak in de vorm:
while (true) {
if (test)
resVar = res;
else {
modify_loop_variable;
voort te zetten;
}
break;
}
Deze optimalisatie zoekt naar deze patronen en beweegt de test in de while lus:
while (! test) {
modify_loop_variable;
}
resVar = res;
Deze optimalisatie is pas onlangs ingevoerd en is dus nog niet standaard geactiveerd.
ย ท --verbose afgedrukt wat informatie.
ย ท --no-inlining schakelt alle functies inlining (constanten misschien nog de lijnen).
ย ท --inline-globals laat Scheme2Js inline algemene functies en constanten. Dit zou twee ongewenste neveneffecten hebben: voor een, zijn globale variabelen vaak gebruikt om gegevens uit te wisselen tussen de verschillende modules. Sommige inline functies verloren gaan als er geen verwijzing naar hen meer. Als algemene functies buiten een module te gebruiken, moet men niet deze vlag. (Dit gedrag is waarschijnlijk veranderen in toekomstige versies van Scheme2Js.)
ย ท --unresolved-is-js: als een variabele is ongebonden, zal de compiler aannemen dat de variabele komt uit een andere module, of vanuit JavaScript. Zie Sectie Regeling - Javascript voor een meer gedetailleerde bespreking van de JavaScript Scheme interface.
ย ท --js-dit de variabele binnen dit stelsel functioneert. Op deze manier kan Scheme procedures worden gebruikt als betaalmiddel JavaScript objecten.
ย ท --no-tailrec schakelt de tailrec om while-lus optimalisatie. Als je een bug in de compiler de manier van vertalen staart-recs vermoeden, kon u deze vlag proberen.
ย ท --no-optimaliseren-gesprekken schakelt Scheme2Js inlining van binaire of unaire operaties. Bijvoorbeeld sci_plus (3, 5) is geoptimaliseerd (3 + 5). Deze optimalisatie is heel belangrijk, en er is meestal geen reden om het uit te schakelen.
ย ท --no-optimaliseren-consts schakelt de pre-constante berekening. Tenzij een handicap (met deze vlag), worden samengestelde constanten vooraf berekend en hun exemplaren vervangen door een verwijzing naar een variabele die de constante. Dit maakt herhaalde toegangen tot deze constanten sneller, maar introduceert nieuwe variabelen.
ย ท --no-optimaliseren-boolify schakelt de boolify optimalisatie. JavaScript en boolify schema's zijn niet gelijkwaardig: JavaScript beschouwt vals, 0, null en undefined vals te zijn, terwijl Scheme heeft #f alleen. De unoptimized boolify voegt daarom altijd de test tegen valse: if (test == valse!) ... Als Scheme2Js kan zien, dat de test zelf is een boolean, kan het verwijderen van de onnodige == valse test!. Deze vlag schakelt deze optimalisatie.
ย ท --d STAGE drukt een dot-bestand (zie graphviz) van de AST na stage STAGE. Mogelijke stappen zijn: uitbreiding, boom, symbool, knoop-elim1, staart, inline, constante vermeerdering, rm-ongebruikte-vars, capture, knooppunt-elim2, terwijl (tt "verklaringen"), knooppunt-elim3. Meestal men niet deze vlag nodig, tenzij voor het debuggen doeleinden.
ย ท --print-locs prints van de oorspronkelijke locaties als commentaar op de JavaScript-bestand. Deze locaties zijn momenteel de tekens ten opzichte van het begin van het bestand
Wat is nieuw in deze release:.
- Minor veranderingen en bugfixes zijn overgedragen van Hop naar Scheme2Js.
Wat is nieuw in versie 20100816:.
- runtime-reader Scheme2Js 'herkent nu keywords
- Een aantal bugs zijn verholpen.
Wat is nieuw in versie 20081219:.
- De compiler is geoptimaliseerd
- Het is nu veel sneller en verbruikt minder geheugen.
- Veel bugs zijn opgelost.
- De standaard module clausule van Scheme2Js is nu vergelijkbaar met die van bigloo.
- Deze versie ondersteunt gekwalificeerde namen.
Reacties niet gevonden