Компіляція перед виконанням
Компілятор перед виконанням (англ. ahead-of-time compilation (AOT)) — це вид транслятора, який використовує метод компіляції перед виконанням. Використовується як для компіляції високорівневних мов програмування, так і для компіляції так званих «проміжкових» мов.
В багатьох реалізаціях мов програмування використовується компіляція під час виконання, яка дозволяє компілювати проміжковий код напряму в бінарний під час його виконання, що дозволяє значно збільшити швидкість виконання, але ця стратегія потребує виділення додаткової пам'яті.
Стратегія AOT не потребує виділення додаткової пам'яті, а також вона проходить з мінімальним навантаженням на систему. Процес компіляції повністю виконується перед виконанням програми.
Компіляція перед виконанням дозволяє компілювати класи в машинний код для подальшого виконання однієї і тієї самої програми. Компілятор АОТ працює з платформою обміну даними класу.
Компілятор такого виду динамічно генерує машинний код під час виконання застосунку і кешує будь-який згенерований код АОТ в загальному кеші даних. Наступні машини, що виконують цей метод, можуть завантажувати і використовувати код АОТ із загального кешу даних без зниження продуктивності, що спостерігається при використанні скомпільованого машинного коду.
Компілятор АОТ увімкнений за замовчуванням, але активний лише тоді, коли увімкнені загальні класи. За замовчуванням, загальні класи вимкнені, так що ніякої активності АОТ не відбувається. Коли компілятор АОТ активний, компілятор обирає методи для компіляції АОТ з основною ціллю покращення часу запуску.
Переваги
- Швидке завантаження в браузері. Витрачається менше часу за рахунок того, що застосунок компілюється до завантаження в браузер та кінцеві файли мають менший розмір.
- Виявлення помилок під час збірки. Мається можливість виправити всі помилки до запуску застосунку в режимі експлуатації.
- Підвищена безпека.
Стадії
Компіляцію перед виконання можна розділити на три стадії:
- Аналіз.
- Генерація коду.
- Валідація
Приклади
- Ngen
- Mono AOT
- Excelsior JET
- ART
- asm.js
- GraalVM
Джерела
- Trustworthy Compilers, Vladimir O. Safonov, Chapter 8.6 «AOT Compilation» (англ.)