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".
Источники
- Live Coding Инструмент для удобной работы с V8 Native Syntax · AsForJS · 2025-02-14
- Тезис: спикер показывает собственную обёртку над часто используемыми нативками
- Как запускать сборку V8 · AsForJS · 2023-12-01