Сборка V8 локально

Чтобы понимать, как реально работает оптимизатор, нужно собрать d8 — standalone V8 shell — и гонять в нём байт-код, машинный код, deopt-логи. Установка через depot_tools + gn + ninja.

Установка depot_tools

git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git
export PATH=$PATH:/path/to/depot_tools

Сборка V8

mkdir v8 && cd v8
fetch v8
cd v8
gclient sync

# Debug-сборка с native syntax
gn gen out/debug --args='is_debug=true v8_enable_disassembler=true'
ninja -C out/debug d8

./out/debug/d8 --allow-natives-syntax script.js

Полезные флаги d8

d8 --print-bytecode             # байт-код функций
d8 --print-opt-code             # машинный код оптимизированных функций
d8 --print-code                 # вообще весь код
d8 --trace-opt --trace-deopt    # лог оптимизаций/деоптов
d8 --trace-ic                   # переходы inline cache
d8 --allow-natives-syntax       # включить %functions

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

  • Сборка занимает ~30-60 минут на первом запуске.
  • Размер ~10-15 GB на диск.
  • Для Windows проще использовать готовые сборки через jsvu.
  • В Node всё то же доступно через --print-bytecode и --trace-opt.

jsvu — простая альтернатива

npm install -g jsvu
jsvu                 # выбрать v8, spidermonkey, jsc
v8 --print-bytecode script.js

Источники

См. также