Scheme2Js adalah Skema untuk Javascript compiler. Sementara beberapa upaya telah dihabiskan untuk menjadi sedekat mungkin untuk R5rs, kami berkonsentrasi terutama pada efisiensi.
Biasanya Scheme2Js menghasilkan kode Javascript, yang sebanding dengan kode ditulis tangan. Dalam rangka untuk mencapai kinerja ini, Scheme2Js tidak sepenuhnya R5rs compliant. Secara khusus ia tidak memiliki dukungan untuk lanjutan, nomor yang tepat dan memperlakukan rekursi ekor hanya sebagian.
Scheme2Js menyediakan beberapa bendera, yang memungkinkan untuk memodifikasi hasil:
ย ท --no-js-dot-notasi mengizinkan akses ke bidang JavaScript dengan dot-notasi. Bendera ini menonaktifkan akses dari bentuk xy seperti di document.getElementById. Meskipun demikian masih mungkin untuk mengakses adalah ekspresi yang valid menggunakan fungsi js-bidang.
ย ท --mutable-string: dalam rangka meningkatkan kinerja string-operasi dan untuk meringankan antarmuka antara Skema dan kode JavaScript, implementasi standar Skema peta string ke string JavaScript. Bertentangan dengan Skema string, string JavaScript Namun berubah. Peta bendera ini string untuk kelas JavaScript, yang mewakili Skema string, yang bisa berubah. Kode yang dihasilkan mungkin sedikit lebih lambat, dan lebih sulit untuk antarmuka dengan kode Javascript.
ย ท --encapsulate-bagian merangkum program ke fungsi anonim. Hanya variabel global berada di luar fungsi anonim ini. Di satu sisi ini memperkenalkan satu fungsi panggilan ke fungsi anonim. Tapi di sisi lain sebagian besar implementasi Javascript harus berjalan lebih cepat dengan optimasi ini: biasanya hashtables digunakan untuk mewakili lingkup dalam JavaScript. Dengan menggunakan fungsi anonim program variabel dipisahkan ke mereka hashtable kecil sendiri yang (dalam teori) mempercepat akses ke variabel tersebut. Lebih penting lagi variabel yang disimpan dalam hashtable mereka sendiri, dan tidak dalam hashtable global, yang dapat diakses oleh variabel global. Hal ini sangat mudah untuk langsung memodifikasi isi dari variabel global. Inlining atau optimasi umum lainnya maka tidak mungkin untuk dilakukan pada variabel global. Dengan menyimpan variabel program dalam fungsi anonim optimasi ini menjadi lagi mungkin.
ย ท --optimize-var-nomor mengurangi jumlah variabel yang digunakan dalam kode JavaScript yang dihasilkan. Kode dapat berjalan lebih cepat, tapi lebih sulit untuk debug, sebagai nama variabel hilang dan variabel yang sama dapat digunakan beberapa kali.
ย ท --optimize-sementara: dengan bendera ini Scheme2Js mengoptimalkan umum sementara loop. The unoptimized sementara loop sering dalam bentuk:
sementara (benar) {
jika (tes)
resVar = res;
else {
modify_loop_variable;
terus;
}
break;
}
Optimasi ini mencari pola-pola ini dan bergerak tes ke dalam loop sementara:
sementara (uji!) {
modify_loop_variable;
}
resVar = res;
Optimasi ini telah dilaksanakan baru-baru ini dan karena itu belum diaktifkan secara default.
ย ท --verbose mencetak beberapa informasi.
ย ท --no-inlining menonaktifkan semua fungsi inlining (konstanta mungkin masih inline).
ย ท --inline-GLOBALS memungkinkan Scheme2Js inline fungsi global dan konstanta. Ini mungkin memiliki dua efek samping yang tidak diinginkan: untuk satu, variabel global sering digunakan untuk mentransfer data antara modul yang berbeda. Beberapa fungsi inline hilang jika tidak ada referensi untuk mereka lagi. Jika fungsi global yang akan digunakan di luar modul, seseorang tidak harus menggunakan bendera ini. (Perilaku ini kemungkinan akan berubah dalam versi masa depan Scheme2Js.)
ย ท --unresolved-adalah js: jika suatu variabel terikat, compiler akan menganggap variabel berasal dari modul lain, atau dari JavaScript. Lihat Bagian Skema - Javascript untuk diskusi yang lebih rinci dari antarmuka Skema JavaScript.
ย ท --js-ini memberikan variabel ini dalam fungsi Skema. Dengan cara ini, prosedur Skema dapat digunakan sebagai metode objek JavaScript.
ย ท --no-tailrec menonaktifkan tailrec untuk sementara loop optimasi. Jika Anda menduga bug dalam cara compiler menerjemahkan ekor-Rek, Anda bisa mencoba bendera ini.
ย ท --no-mengoptimalkan-panggilan menonaktifkan Scheme2Js inlining operasi biner atau unary. Misalnya sci_plus (3, 5) dioptimalkan untuk (3 + 5). Optimasi ini cukup penting, dan biasanya ada ada alasan untuk menonaktifkannya.
ย ท --no-mengoptimalkan-consts menonaktifkan perhitungan pra-konstan. Kecuali cacat (dengan flag ini), konstanta senyawa yang precalculated dan kejadian mereka diganti dengan referensi ke variabel memegang konstan. Ini membuat diulang akses ke konstanta ini lebih cepat, tapi memperkenalkan variabel baru.
ย ท --no-mengoptimalkan-boolify menonaktifkan optimasi boolify. JavaScript dan boolify Skema ini tidak setara: JavaScript menganggap palsu, 0, nol dan terdefinisi palsu, sedangkan Skema hanya memiliki # F. The boolify unoptimized karena itu selalu menambahkan tes terhadap salah: if (tes == palsu!) ... Jika Scheme2Js dapat melihat, bahwa tes itu sendiri adalah boolean, dapat menghapus yang tidak perlu == tes palsu!. Bendera ini menonaktifkan optimasi ini.
ย ท --d STAGE mencetak dot-berkas (lihat graphviz) dari AST setelah tahap STAGE. Tahap yang mungkin adalah: memperluas, pohon, simbol, simpul-elim1, ekor, inline, konstan-propagasi, rm-terpakai-vars, capture, simpul-elim2, sementara, (tt "pernyataan"), simpul-elim3. Biasanya satu tidak perlu bendera ini, kecuali untuk keperluan debugging.
ย ท cetakan --print-locs lokasi asli sebagai komentar ke file JavaScript. Lokasi ini adalah saat karakter-offset dari awal file yang
Apa yang baru dalam rilis ini:.
- Kecil perubahan dan perbaikan bug telah porting dari Hop ke Scheme2Js.
Apa yang baru dalam versi 20100816:.
- Scheme2Js 'runtime-reader sekarang mengakui kata kunci
- Beberapa bug telah diperbaiki.
Apa yang baru dalam versi 20081219:.
- Compiler telah dioptimalkan
- Sekarang jauh lebih cepat dan mengkonsumsi sedikit memori.
- Banyak bug telah diperbaiki.
- Modul standar klausul Scheme2Js sekarang mirip dengan salah satu Bigloo.
- Rilis ini mendukung nama yang memenuhi syarat.
Komentar tidak ditemukan