V8 Native Syntax

Скрытый процентный синтаксис V8 (%OptimizeFunctionOnNextCall, %DebugPrint и т.п.) для прямого общения с рантаймом. Включается флагом --allow-natives-syntax.

Запуск

d8 --allow-natives-syntax script.js
node --allow-natives-syntax script.js

Полезные нативки

%DebugPrint(obj);                    // дамп объекта с hidden class
%HaveSameMap(a, b);                  // одна ли форма у двух объектов
%OptimizeFunctionOnNextCall(fn);     // форсировать TurboFan
%DeoptimizeFunction(fn);             // откатить в Ignition
%GetOptimizationStatus(fn);          // битовая маска состояния
%CollectGarbage;                   // принудительный GC
%HeapObjectVerify(obj);
%ClearFunctionFeedback(fn);          // сбросить type feedback

Зачем это знать

  • Проверить hidden class объектов в тестах (одна форма?).
  • Понять, оптимизирована ли функция (GetOptimizationStatus).
  • Изолировать перформанс-тест от прогрева JIT.
  • Воспроизводить deopt на пустом месте.

Подводные камни

  • Не для прод-кода — только для замеров и расследований.
  • Синтаксис меняется между версиями V8.
  • В Chrome без флага не работает — нужно запускать chrome --js-flags="--allow-natives-syntax".

Источники

См. также