3.1Kпросмотров
22 августа 2025 г.
statsScore: 3.4K
Мой первый патч в V8 – только что смержен! 🥳 Я все еще разбираюсь в процессах, и то что первый патч дошел до мержа – большое для меня свершение. Патч небольшой (одна строка, может поэтому и доехал первым), но исправляет неприятный баг. Когда записывается V8 лог с флагом --log-deopt, то помимо добавления записей о деоптимизациях лог, V8 также выводит сообщения о деоптимизациях в консоль (stdout). Так быть недолжно, ведь вывод в консоль – это трейсинг. Но дело, конечно, не в нарушении разделения функциональности, а в том, что так захламляется консоль и смешивался с выводом профилируемой программы. Могло доходить до того, что приходилось выбирать: либо лог деоптимизаций, либо работающий скрипт. Этот баг раздражал меня несколько лет, и я не знал что с этим можно сделать. Но после некоторых успехов работы с кодовой базой V8, я почувствовал в себе уверенность, что теперь то получится проблему починить. Так я раскопал в чем корень проблемы, которой уже более 4х лет. В ходе очередного рефакторинга флагов, в V8 добавили новый флаг --log-deopt, который должен был включать логирование деоптимизаций. Но в ходе рефакторинга этот флаг по ошибке добавили в условие активации трейсинга деоптимизаций. В итоге, когда включаешь логирование деоптимизаций, также включается и трейсинг деоптимизаций, и этот трейсинг никак не отключить (например, через другие флаги). Теперь этого происходить не будет, каждый флаг (--log-deopt и --trace-deopt) делает ровно то, что должен делать. Мелочь, но сколько сэкономленых нервов! Раскопал и подобрал патч я еще в мае, но вот только сейчас это доехало до апстрима V8. Путь был тернист. Но дорожка понемногу протаптывается, придет время – будет быстрее.