Адрес: ул. Б. Очаковская 32 Москва Россия
Наши официальные канал и чат в telegram
Поднимем Devuan на вершину Distrowatch! Просто перейдите по ссылке один раз в день.

В кодовую базу эталонной реализации языка Ruby добавлен новый JIT-компилятор ZJIT

Ruby 3.5 получит новый JIT-компилятор ZJIT, написанный на Rust. ZJIT обещает повысить производительность

Новости собранные из разных RSS источников
Аватара пользователя
root:#
Site Admin
Сообщения: 271
Зарегистрирован: Вт ноя 08, 2022 3:27 pm
Благодарил (а): 39 раз
Поблагодарили: 22 раза

В кодовую базу эталонной реализации языка Ruby добавлен новый JIT-компилятор ZJIT

Сообщение root:# »

В кодовую базу эталонной реализации языка Ruby добавлен новый JIT-компилятор ZJIT
В кодовую базу эталонной реализации языка Ruby добавлен новый JIT-компилятор ZJIT, позиционируемый как следующее поколение Ruby JIT. ZJIT войдёт в состав следующего значительного выпуска Ruby 3.5, в котором будет доступен в качестве опции параллельно с JIT-компилятором YJIT, а в версии Ruby 3.6 возможно заменит его. Как и YJIT новый JIT-компилятор написан на языке Rust.

Оба JIT-компилятора созданы командой разработчиков из компании Shopify в рамках инициативы по увеличению производительности Ruby-программ, использующих фреймворк Rails и вызывающих очень много методов. В отличие от YJIT новый JIT-компилятор не транслирует байткод виртуальной машины YARV в низкоуровневое промежуточное представление (по сути почти напрямую в машинный код), а преобразует байткод в высокоуровневое промежуточное представление SSA (Static Single Assignment), над которым можно реализовать дополнительные фазы оптимизации и проводить оптимизацию с оглядкой на крупные блоки кода, а не отталкиваясь только от текущих операций.

ZJIT выполняет компиляцию за раз целого метода, в то время как YJIT мог манипулировать компиляцией только базовых блоков. Для профилирования типов ZJIT реализует классическую архитектуру JIT, использующую накопленные интерпретатором исторические данные о типах, вместо применённой в YJIT техники версионирования базовых блоков (LBBV - Lazy Basic Block Versioning). Использование высокоуровневого промежуточного представления решит проблемы с расширением, возникшие в YJIT, заложит основу для реализации в будущем многоуровневой JIT-компиляции, позволит реализовать расширенные оптимизации (например, более агрессивное inlinе-развёртывание) и упростит адаптацию JIT для различных платформ.

Возвращение к традиционной модели профилирования типов избавит код от усложнений и даст возможность привлечь к работе новых участников (использование LBBV в YJIT привело к тому, что проект был непонятен другим участникам и развивался только сотрудниками Shopify).

Источник: https://www.opennet.ru/opennews/art.shtml?num=63240