Jadi apakah saya harus menganggap bahwa bagian yang ditafsirkan adalah persyaratan dalam spesifikasi bahasa, atau apakah itu menyesatkan untuk mengatakan bahwa bahasa tersebut adalah bahasa pemrograman yang ditafsirkan ketika menghormati perbedaan antara bahasa dan banyak implementasinya?
Geeks bahasa EcmaScript sering menggunakan istilah "ES interpreter" untuk merujuk pada implementasi EcmaScript, tetapi spec tidak menggunakan istilah itu. The gambaran bahasa khususnya menggambarkan bahasa dalam hal interpreter-agnostik:
ECMAScript berbasis objek: bahasa dasar dan fasilitas host disediakan oleh objek, dan program ECMAScript adalah sekelompok objek yang berkomunikasi.
Jadi EcmaScript mengasumsikan "lingkungan host" yang didefinisikan sebagai penyedia definisi objek termasuk semua yang memungkinkan I / O atau tautan lain ke dunia luar, tetapi tidak memerlukan juru bahasa.
Semantik pernyataan dan ungkapan dalam bahasa didefinisikan dalam hal spesifikasi penyelesaian yang sepele diimplementasikan dalam juru bahasa, tetapi spesifikasi tidak mengharuskan itu.
8.9 Jenis Spesifikasi Penyelesaian
Jenis Penyelesaian digunakan untuk menjelaskan perilaku pernyataan ( break
, continue
, return
dan throw
) yang melakukan transfer nonlokal kontrol. Nilai dari jenis Penyelesaian adalah tiga kali lipat dari bentuk ( tipe , nilai , target ), di mana jenisnya adalah normal , rusak , lanjutkan , kembali , atau lempar , nilainya adalah setiap nilai bahasa ECMASkriptika atau kosong , dan target adalah pengidentifikasi atau skrip ECMAScript kosong .
Istilah "penyelesaian tiba-tiba" mengacu pada penyelesaian apa pun dengan jenis selain dari normal .
Transfer kontrol non-lokal dapat dikonversi ke array instruksi dengan lompatan yang memungkinkan untuk kompilasi kode asli atau byte.
"Mesin EcmaScript" mungkin cara yang lebih baik untuk mengekspresikan ide yang sama.
Rupanya tidak ada kompiler statis untuk JavaScript
Ini tidak benar. V8 "interpreter" mengkompilasi ke kode asli secara internal, Rhino secara opsional mengkompilasi ke bytecode Java secara internal, dan berbagai penerjemah Mozilla ({Trace, Spider, Jager} Monkey) menggunakan kompiler JIT.
V8 :
V8 meningkatkan kinerja dengan mengkompilasi JavaScript ke kode mesin asli sebelum menjalankannya, dibandingkan mengeksekusi bytecode atau menafsirkannya.
Badak :
public final void setOptimizationLevel(int optimizationLevel)
Tetapkan level optimisasi saat ini. Tingkat optimisasi diharapkan menjadi bilangan bulat antara -1 dan 9. Nilai negatif apa pun akan ditafsirkan sebagai -1, dan nilai apa pun yang lebih besar dari 9 akan ditafsirkan sebagai 9. Tingkat optimisasi -1 menunjukkan bahwa mode interpretif akan selalu menjadi bekas. Level 0 hingga 9 menunjukkan bahwa file kelas dapat dihasilkan. Level optimisasi yang lebih tinggi menukar kinerja waktu kompilasi untuk kinerja runtime. Level optimizer tidak dapat ditetapkan lebih besar dari -1 jika paket optimizer tidak ada pada saat run time.
TraceMonkey :
TraceMonkey menambahkan kompilasi kode asli ke mesin JavaScript® Mozilla (dikenal sebagai "SpiderMonkey"). Ini didasarkan pada teknik yang dikembangkan di UC Irvine yang disebut "pohon jejak", dan membangun kode dan ide yang dibagikan dengan proyek Tamarin Tracing. Hasil akhirnya adalah peningkatan kecepatan besar-besaran di browser chrome dan konten halaman Web.