18년도와 달리 현재는 많이 바뀌었습니다.
예를 들어 V8의 경우 Ignition- Sparkplug - Maglev - Turbofan으로 두개의 최적화 티어가 추가되었고,
스파이더몽키는 인터프리터 - 베이스라인 인터프리터 - 베이스라인 JIT - Warp JIT으로 바뀌었습니다.
우선 베이스라인 인터프리터와 Sparkplug는 분기예측과 명령어 디스패치에서 손해보는 바이트코드를 보완하기 위한 기술이고요
Maglev는 베이스라인 JIT과 거의 일치한다고 보시면 됩니다.
Warp JIT은 JIT 엔진이 크게 바뀐 경우로 IonMonkey시절에는 외부에서 타입정보와 프로파일링 정보를 가져와 최적화했지만, 베이스라인 JIT에서 만드는 IR을 사용할 수 있도록 변경되었습니다.
마지막으로 파이어폭스의 SpiderMondkey는 프로젝트 스텐실이라고 해서 파서를 크게 향상시켰는데 무려 GC와 디커플링되는 형식을 만든다고 알려졌습니다.
Stencils are the set of data structures capturing the result of parsing and bytecode emission. The Stencil format is a precursor format that is then used to allocate the corresponding scripts on the GC heap that will be used for execution.
By decoupling from the GC and other runtime systems, robust caching and speculation systems can be built that are more thread-agnostic and flexible.
추가적으로 정보를 적어보자면, 대부분 분들이 알고 계실 JS엔진의 최적화 티어는 다음과 같으실텐데요
18년도와 달리 현재는 많이 바뀌었습니다.
예를 들어 V8의 경우 Ignition- Sparkplug - Maglev - Turbofan으로 두개의 최적화 티어가 추가되었고,
스파이더몽키는 인터프리터 - 베이스라인 인터프리터 - 베이스라인 JIT - Warp JIT으로 바뀌었습니다.
우선 베이스라인 인터프리터와 Sparkplug는 분기예측과 명령어 디스패치에서 손해보는 바이트코드를 보완하기 위한 기술이고요
Maglev는 베이스라인 JIT과 거의 일치한다고 보시면 됩니다.
Warp JIT은 JIT 엔진이 크게 바뀐 경우로 IonMonkey시절에는 외부에서 타입정보와 프로파일링 정보를 가져와 최적화했지만, 베이스라인 JIT에서 만드는 IR을 사용할 수 있도록 변경되었습니다.
마지막으로 파이어폭스의 SpiderMondkey는 프로젝트 스텐실이라고 해서 파서를 크게 향상시켰는데 무려 GC와 디커플링되는 형식을 만든다고 알려졌습니다.