Копирование и исправление
В вычислительной технике компиляция копирования и исправлений — это простой метод компилятора , предназначенный для оперативной компиляции (JIT-компиляция), который использует сопоставление с образцом для сопоставления предварительно сгенерированных шаблонов с частями абстрактного синтаксического дерева (AST) или байт-кода потока . и испускают соответствующие заранее написанные машинного кода фрагменты , которые затем исправляются для вставки адресов памяти , адресов регистров , констант и других параметров для создания исполняемого кода. Код, не соответствующий шаблонам, можно либо интерпретировать обычным способом, либо создать код для прямого вызова кода интерпретатора .
Сборник
[ редактировать ]Хотя копирование и исправление — это «быстрый и грязный» подход к компиляции, который на несколько порядков медленнее, чем более строгие методы, он часто дает код, который во многих случаях может приблизиться по производительности к неоптимизированному коду, созданному этими методами.
Копирование и исправление было впервые описано Фредриком Кьолстадом и Хаораном Сюй в статье 2021 года. [1]
По состоянию на 2023 год [update]Сюй работал над реализацией Lua , которая автоматически генерирует шаблоны на основе языковых описаний примитивов интерпретатора. [2]
По состоянию на 2024 год [update] 3.13 использовалась реализация копирования и исправлений на основе байт-кода для JIT-компилятора Python . [3] [4]
См. также
[ редактировать ]Ссылки
[ редактировать ]- ^ Сюй, Хаоран; Кьёлстад, Фредрик (15 октября 2021 г.). «Компиляция с копированием и исправлением: быстрый алгоритм компиляции для языков высокого уровня и байт-кода» . Труды ACM по языкам программирования . 5 (OOPSLA): 136:1–136:30. arXiv : 2011.13127 . дои : 10.1145/3485513 .
- ^ Сюй, Хаоран (12 мая 2023 г.). «Автоматическое создание базового JIT для Lua» . sillycross.github.io . Проверено 11 января 2024 г.
- ^ «Python 3.13 получает JIT» . tonybaloney.github.io . Проверено 9 января 2024 г.
- ^ «GH-113464: JIT-компилятор с возможностью копирования и исправления от Brandtbucher · Запрос на извлечение № 113465 · Python/cpython» . Гитхаб . Проверено 9 января 2024 г.