Тож я повинен вважати, що інтерпретована частина є вимогою в специфікації мови, чи вводити в оману твердження, що мова є інтерпретованою мовою програмування при повазі різниці між мовою та її багатьма реалізаціями?
Ексмакрипські мові вуха часто використовують термін "інтерпретатор ES" для позначення реалізації EcmaScript, але специфікація не використовує цей термін. Зокрема, огляд мови описує мову в перекладно-агностичних термінах:
ECMAScript базується на об'єктах: основна мова та засоби хосту забезпечуються об'єктами, а програма ECMAScript - це кластер об'єктів, що спілкуються.
Таким чином, EcmaScript передбачає "середовище хоста", яке визначається як постачальник визначень об'єктів, включаючи всі ті, які дозволяють введення-виведення або будь-які інші посилання на зовнішній світ, але не вимагають перекладача.
Семантика висловлювань та виразів у мові визначається з точки зору специфікації завершення, яка тривіально реалізована в інтерпретаторі, але специфікація цього не вимагає.
8.9 Тип специфікації завершення
Тип Завершення використовується для пояснення поведінки операторів ( break
, continue
, return
і throw
) , які виконують нелокальних передачу управління. Значення типу завершення - це потрійні форми ( тип , значення , ціль ), де тип є нормальним , перервати , продовжити , повернути або кинути , значення - це будь-яке значення мови ECMAScript або порожнє , а цільовим є будь-який ідентифікатор ECMAScript або порожній .
Термін "раптове завершення" позначає будь-яке завершення типу, відмінного від звичайного .
Нелокальні передачі управління можуть бути перетворені в масиви інструкцій зі стрибками, що дозволяють створити нативний або байт-код.
"EcmaScript Engine" може бути кращим способом висловити ту саму ідею.
Мабуть, немає статичних компіляторів для JavaScript
Це не правда. "Інтерпретатор" V8 компілюється всередині нативного коду, Rhino необов'язково компілюється в байт-код Java внутрішньо, а різні інтерпретатори Mozilla ({Trace, Spider, Jager} Monkey) використовують компілятор JIT.
V8 :
V8 підвищує продуктивність, компілюючи JavaScript до власного машинного коду перед його виконанням, порівняно з виконанням байт-коду або інтерпретацією.
Носоріг :
public final void setOptimizationLevel(int optimizationLevel)
Встановіть поточний рівень оптимізації. Очікується, що рівень оптимізації буде цілим числом від -1 до 9. Будь-які негативні значення будуть інтерпретовані як -1, а будь-які значення, що перевищують 9, будуть інтерпретовані як 9. Рівень оптимізації -1 означає, що режим інтерпретації завжди буде б / в. Рівні від 0 до 9 вказують на те, що файли класу можуть створюватися. Більш високі рівні оптимізації знижують час компіляції для виконання. Рівень оптимізатора не можна встановити більше -1, якщо пакет оптимізатора не існує під час виконання.
TraceMonkey :
TraceMonkey додає компіляцію нативного коду до двигуна JavaScript®® Mozilla (відомого як "SpiderMonkey"). Він заснований на методиці, розробленій в UC Irvine під назвою "сліди дерев", і базуючись на коді та ідеях, поділених проектом Tamarin Tracing. Результатом цього є значне збільшення швидкості як для хромування браузера, так і для вмісту веб-сторінок.