Copy-and-Patch: A Copy-and-Patch Tutorial
Copy-and-Patch — это метод создания базовых JIT-компиляторов, позволяющий чрезвычайно быстро компилировать фрагменты кода во время выполнения. Техника не требует глубоких знаний ассемблера, легко поддерживается и генерирует нативный код сопоставимого качества с традиционными JIT. Подход основан на использовании "шаблонов" — минимальных C-функций, компилируемых в конкатенируемые фрагменты нативного кода.
Процесс работы с шаблонами включает компиляцию C-кода в нативный, извлечение фрагментов и создание функций для их копирования и патчинга. В примере создается JIT для функции int add_a_b(int a, int b), специализируемой во время выполнения для вычисления 1 + 2. Каждая операция (загрузка константы, сложение, возврат) реализуется как отдельный шаблон с "дырами" для последующего патчинга адресов и констант.