Почему это Node.js вывод байт-кода настолько велик?

#node.js #v8

Вопрос:

Запуск node --print-bytecode в файле, содержащем минимальный код, просто void 0; создает файл размером 2,3 МБ. Просматривая его, я подумал, что он включает ассемблерный код, сгенерированный JIT-компиляцией, но, похоже, это не так. И все же это не объясняет, почему он такой большой. Сравните его с выводом javap , который, хотя и предназначен для другого языка, намного меньше и гораздо более удобочитаем.

Комментарии:

1. Он многословен, следовательно, его производительность больше. Я думаю, это объясняет, почему он больше. Если вы хотите знать, почему это так многословно, вам следует спросить основных разработчиков.

2. @LawrenceCherone, о чем это вообще говорит?

Ответ №1:

Я думал, что это включает в себя ассемблерный код, сгенерированный JIT-компиляцией, но, похоже, это не так.

Правильно, байт-код не является ассемблерным кодом. Код сборки будет сгенерирован позже для функций, которые работают достаточно быстро, чтобы V8 решил, что их оптимизация, вероятно, стоит затраченного времени.

Почему это Node.js вывод байт-кода настолько велик? […] в файле, содержащем такой минимальный код, как просто void 0;

Большая часть самого узла написана на JavaScript, и все это компилируется в байт-код перед выполнением. Поэтому, даже если вы запустите Node в пустом файле, вы увидите довольно много байт-кода.

О чем это вообще говорит?

Это говорит то же самое, что и код JavaScript, из которого он был сгенерирован. Что именно делают отдельные инструкции байт-кода и как их читать, является внутренней деталью реализации V8 и может измениться в любое время. Как пользователь Node (или V8), у вас не должно быть причин для беспокойства; и, в частности, вы не должны предполагать, что формат байт-кода стабилен с течением времени/версий. Печать его вообще предназначена для отладки внутренних проблем двигателя.