따라서 해석 된 부분이 언어 사양의 요구 사항이라고 생각합니까? 아니면 언어와 많은 구현 간의 차이점을 존중할 때 언어가 해석 된 프로그래밍 언어라고 말하는 것이 오도입니까?
EcmaScript 언어 전문가는 종종 "ES 인터프리터"라는 용어를 사용하여 EcmaScript 구현을 나타냅니다. 그러나 스펙 에서는 해당 용어를 사용하지 않습니다. 특히 언어 개요 는 언어를 해석기 독립적 인 용어로 설명합니다.
ECMAScript는 객체 기반입니다. 기본 언어 및 호스트 기능은 객체에 의해 제공되며 ECMAScript 프로그램은 통신 객체의 클러스터입니다.
따라서 EcmaScript는 "호스트 환경"을 가정하며, 이는 I / O 또는 외부 세계에 대한 다른 링크를 허용하지만 인터프리터를 필요로하지 않는 모든 것을 포함하여 객체 정의 제공자로 정의됩니다.
언어의 문장과 표현의 의미 는 인터프리터에서 사소하게 구현되는 완성 사양의 관점에서 정의 되지만 사양에는 필요하지 않습니다.
8.9 완성 사양 유형
완성 유형 문장의 동작을 설명하기 위해 사용된다 ( break
, continue
, return
및 throw
) 비 로컬 제어 전송을 수행하는. 완료 유형의 값은 형식의 3 배 ( type , value , target )입니다. 여기서 type 은 normal , break , continue , return 또는 throw 중 하나입니다 . value 는 ECMAScript 언어 값이거나 비어 있고 target 은 ECMAScript 식별자 또는 비어 있습니다.
"급격한 완료"라는 용어 는 normal 이외 의 유형으로 완료되는 것을 말합니다 .
로컬이 아닌 제어 전송은 기본 또는 바이트 코드 컴파일을 허용하는 점프를 사용하여 명령어 배열로 변환 될 수 있습니다.
"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는 Mozilla의 JavaScript® 엔진 ( "SpiderMonkey")에 네이티브 코드 컴파일을 추가합니다. UC Irvine에서 개발 한 "트레이스 트리"라는 기술을 기반으로하며 Tamarin Tracing 프로젝트와 공유되는 코드와 아이디어를 기반으로합니다. 결과적으로 브라우저 크롬과 웹 페이지 컨텐츠 모두에서 속도가 크게 향상됩니다.