Vì vậy, tôi có thể cho rằng phần được diễn giải là một yêu cầu trong đặc tả ngôn ngữ, hay là sai lầm khi nói rằng ngôn ngữ là ngôn ngữ lập trình được giải thích khi tôn trọng sự khác biệt giữa một ngôn ngữ và nhiều cách triển khai của nó?
Các chuyên viên máy tính ngôn ngữ EcmaScript thường sử dụng thuật ngữ "Trình thông dịch ES" để chỉ việc triển khai EcmaScript, nhưng thông số kỹ thuật không sử dụng thuật ngữ đó. Các tổng quan về ngôn ngữ đặc biệt mô tả các ngôn ngữ về thông dịch-agnostic:
ECMAScript dựa trên đối tượng: ngôn ngữ cơ bản và phương tiện lưu trữ được cung cấp bởi các đối tượng và chương trình ECMAScript là một cụm các đối tượng giao tiếp.
Vì vậy, EcmaScript giả định một "môi trường máy chủ" được định nghĩa là nhà cung cấp các định nghĩa đối tượng bao gồm tất cả các liên kết cho phép I / O hoặc bất kỳ liên kết nào khác với thế giới bên ngoài, nhưng không yêu cầu trình thông dịch.
Các ngữ nghĩa của các câu lệnh và biểu thức trong ngôn ngữ được định nghĩa theo các đặc điểm kỹ thuật hoàn thành được thực hiện một cách tầm thường trong một trình thông dịch, nhưng đặc tả không yêu cầu điều đó.
8,9 Loại đặc tả hoàn thành
Các loại Hoàn thành được sử dụng để giải thích hành vi của báo cáo ( break
, continue
, return
và throw
) mà thực hiện chuyển không cục bộ tầm kiểm soát. Các giá trị của loại Hoàn thành là bộ ba của biểu mẫu ( loại , giá trị , mục tiêu ), trong đó loại là một trong các giá trị bình thường , phá vỡ , tiếp tục , trả lại hoặc ném , giá trị là bất kỳ giá trị ngôn ngữ ECMAScript hoặc trống và mục tiêu là bất kỳ định danh ECMAScript nào hoặc rỗng .
Thuật ngữ hoàn thành đột ngột, đề cập đến bất kỳ sự hoàn thành nào với một loại khác hơn bình thường .
Việc chuyển điều khiển không cục bộ có thể được chuyển đổi thành các mảng hướng dẫn với các bước nhảy cho phép biên dịch mã gốc hoặc mã byte.
"Công cụ EcmaScript" có thể là một cách tốt hơn để diễn đạt cùng một ý tưởng.
Không có trình biên dịch tĩnh cho JavaScript rõ ràng
Đây không phải là sự thật. "Trình thông dịch" V8 biên dịch thành mã gốc bên trong, Rhino tùy ý biên dịch sang mã byte Java bên trong và nhiều trình thông dịch Mozilla khác nhau ({Trace, Spider, Jager} Monkey) sử dụng trình biên dịch JIT.
V8 :
V8 tăng hiệu suất bằng cách biên dịch JavaScript thành mã máy gốc trước khi thực thi nó, so với thực thi mã byte hoặc giải thích nó.
Tê giác :
public final void setOptimizationLevel(int optimizationLevel)
Đặt mức tối ưu hóa hiện tại. Mức tối ưu hóa được dự kiến là một số nguyên nằm trong khoảng -1 đến 9. Mọi giá trị âm sẽ được hiểu là -1 và mọi giá trị lớn hơn 9 sẽ được hiểu là 9. Mức tối ưu hóa -1 cho biết chế độ diễn giải sẽ luôn luôn là đã sử dụng. Cấp độ 0 đến 9 chỉ ra rằng các tệp lớp có thể được tạo. Các mức tối ưu hóa cao hơn đánh đổi hiệu năng thời gian biên dịch cho hiệu năng thời gian chạy. Mức tối ưu hóa không thể được đặt lớn hơn -1 nếu gói tối ưu hóa không tồn tại trong thời gian chạy.
TraceMonkey :
TraceMonkey bổ sung quá trình biên dịch mã gốc vào công cụ JavaScript® của Mozilla (được biết đến với tên là Spider SpiderMonkey,). Nó dựa trên một kỹ thuật được phát triển tại UC Irvine có tên là cây dấu vết, và xây dựng mã và ý tưởng được chia sẻ với dự án Tamarin Trace. Kết quả cuối cùng là sự gia tăng tốc độ lớn cả về nội dung trang chrome và trang web của trình duyệt.