Scheme2Js este un sistem de a Javascript compilator. În timp ce unele efort a fost cheltuit pe a fi cât mai aproape posibil de R5rs, ne-am concentrat în principal pe eficienta.
De obicei, Scheme2Js produce cod Javascript, care este comparabil cu cod mână scris. Pentru a atinge această performanță, Scheme2Js nu este complet compatibil R5rs. În special nu are suport pentru continuări, numere exacte și tratează coada recursivitate doar parțial.
Scheme2Js oferă mai multe steaguri, care permit de a modifica rezultatul:
ย ท --no-JS-dot-notație nu permite accesul la câmpuri JavaScript cu-notația punct. Acest steag dezactivează accese de forma xy ca în document.getElementById. Totuși, este încă posibil pentru a accesa este o expresie validă utilizând funcția js-câmp.
ย ท --mutable-siruri de caractere: în scopul de a îmbunătăți performanța de string-operațiunilor și pentru a ușura interfața între sistem și cod JavaScript, punerea în aplicare implicit siruri Schema hărți la siruri de caractere JavaScript. Contrar siruri sistem, siruri de caractere JavaScript totuși imuabile. Acest hărți flag siruri unei clase JavaScript, care reprezinta siruri sistem, care sunt variabil. Codul rezultat poate fi ușor mai lent, și este mult mai greu să interacționeze cu codul Javascript.
ย ท --encapsulate-părți incapsuleaza programul într-o funcție anonim. Doar variabilelor globale sunt în afara acestei funcții anonime. Pe de o parte aceasta introduce un apel funcție la funcția anonim. Dar, pe de altă parte, cele mai multe implementări Javascript ar trebui să ruleze mai rapid cu acest optimizare: de obicei, hashtables sunt folosite pentru a reprezenta domenii în JavaScript. Prin utilizarea o funcție anonim programele variabile sunt separate în propriile lor Hashtable mai mic, care (teoretic) accelerează acces la aceste variabile. Mai important variabilele sunt stocate în propria lor Hashtable, și nu în Hashtable global, care este accesibil prin variabila globala. Este extrem de ușor de a modifica în mod indirect conținutul variabile globale. Plasare inline sau alte optimizări comune sunt, prin urmare, imposibil de a face pe variabile globale. Prin stocarea variabilele programului în funcție anonim aceste optimizări devin din nou posibil.
ย ท --optimize-var-număr reduce numărul de variabile utilizate în codul rezultat JavaScript. Codul poate rula mai rapid, dar este mult mai dificil să depanare, ca nume de variabile sunt pierdute și aceeași variabilă poate fi folosit de mai multe ori.
ย ท --optimize-timp: cu acest pavilion Scheme2Js optimizează comun în timp ce buclele. Neoptimizate timp ce buclele sunt adesea de forma:
în timp ce (adevărat) {
dacă (test)
resVar = res;
else {
modify_loop_variable;
continuă;
}
break;
}
Această optimizare caută aceste modele și se mută de testare în buclă în timp ce:
în timp ce (test!) {
modify_loop_variable;
}
resVar = res;
Această optimizare a fost pusă în aplicare recent și încă nu, prin urmare, activat în mod implicit.
ย ท --verbose imprimă unele informații.
ย ท --no-plasare inline dezactivează toate plasare inline funcție (constante ar putea fi încă inline).
ย ท --inline-globals permite Scheme2Js linie funcții globale și constante. Acest lucru ar putea avea doua efecte secundare nedorite: unul, variabilele globale sunt adesea folosite pentru a transfera date între diferite module. Unele funcții inline se pierd dacă nu există nici o referire la ele mai. Dacă funcțiile globale vor fi utilizate în afara unui modul, nu ar trebui să utilizeze acest steag. (Acest comportament este probabil să se schimbe în versiunile viitoare ale Scheme2Js.)
ย ท --unresolved-se-JS: dacă o variabilă este nelegat, compilatorul își va asuma variabila vine de la un alt modul, sau de la JavaScript. Vezi Schema Secțiunea - Javascript pentru o discuție mai detaliată a interfeței Schema JavaScript.
ย ท --js-aceasta oferă variabila acest termen funcții Schema. Astfel, procedurile Schema poate fi folosit ca metode de obiecte JavaScript.
ย ท --no-tailrec dezactivează tailrec la optimizarea în timp ce-bucla. Dacă suspectați o problemă în mod compilatorul de a traduce coada-REC, ai putea încerca acest flag.
ย ท --no-optimiza-apeluri dezactivează Scheme2Js plasare inline a operațiunilor binare sau unari. De exemplu sci_plus (3, 5) este optimizat pentru a (3 + 5). Aceasta optimizare este destul de important, și nu există, de obicei, nici un motiv să-l dezactivați.
ย ท --no-Optimizare-consts dezactivează calculul de pre-constant. Cu excepția cazului în handicap (cu acest steag), constantele compus sunt precalculate și evenimente lor înlocuită cu o referire la o variabilă care deține constant. Acest lucru face repetat acces la aceste constante mai repede, dar introduce noi variabile.
ย ท --no-Optimizare-boolify dezactivează optimizarea boolify. JavaScript și boolify Schema nu sunt echivalente: JavaScript consideră false, 0, null și undefined a fi false, în timp ce schema are doar #f. Prin urmare, boolify neoptimizată adaugă întotdeauna testul împotriva false: dacă (test == fals!) ... Dacă Scheme2Js poate vedea, că testul în sine este un boolean, se poate elimina inutile == testare fals!. Acest steag dezactivează această optimizare.
ย ท --d STAGE imprimă un fișier punct (a se vedea Graphviz) al AST după etapa STAGE. Etape posibile sunt: extinderea, copac, simbol, nod-elim1, coadă, inline, constant-propagare,-RM neutilizat-Vars, captura, nod-elim2, în timp ce, (tt "declarații"), nodul-elim3. De obicei, nu are nevoie de acest flag, cu excepția cazului în scopuri de depanare.
ย ท printuri --print-locs de locațiile originale ca comentarii fișierul JavaScript. Aceste locații sunt în prezent, caracterul de compensare de la începutul fișierului
Ce este nou în această versiune:.
- Minor modificări și bugfixes au fost portate de la Hop la Scheme2Js.
Ce este nou în versiunea 20100816:.
- de execuție-reader Scheme2Js "recunoaste acum cuvintele cheie
- Mai multe bug-uri au fost stabilite.
Ce este nou în versiunea 20081219:.
- compilator a fost optimizat
- În prezent, este mult mai rapid și consumă mai puțină memorie.
- Multe bug-uri au fost stabilite.
- Clauza modul implicit de Scheme2Js este acum similar cu cel de Bigloo.
- Această versiune suportă nume calificat.
Comentariile nu a fost găsit