[#] [Перевод] Пишем x86-64 комплятор JIT с нуля в стоковом Python
habrabot(difrex,1) — All
2017-11-15 10:30:05


В этой статье я покажу, как написать рудиментарный, нативный x86-64 [just-in-time компилятор (JIT)][1] на CPython, используя только встроенные модули.

Код предназначен для UNIX-систем, таких как macOS и Linux, но его должно быть легко транслировать на другие системы, типа Windows. Весь код опубликован на [github.com/cslarsen/minijit][2].

Цель — сгенерировать в рантайме новые версии нижеприведённого ассемблерного кода и выполнить их.

48 b8 ed ef be ad de movabs $0xdeadbeefed, %rax
00 00 00
48 0f af c7 imul %rdi,%rax
c3 retq
В основном, мы будем иметь дело с левой частью кода — байтовой последовательностью `48 b8 ed ...` и так далее. Эти 15 байтов в [машинном коде][3] составляют функцию x86-64, которая умножает свой аргумент на константу [`0xdeadbeefed`][4]. На этапе JIT будут созданы функции с разными такими константами. Такая надуманная форма [специализации][5] должна продемонстрировать базовую механику JIT-компиляции.
[Читать дальше →][6]

[1]: https://en.wikipedia.org/wiki/Just-in-time_compilation
[2]: https://github.com/cslarsen/minijit
[3]: https://en.wikipedia.org/wiki/Machine_code
[4]: https://en.wikipedia.org/wiki/Magic_number_(programming)
[5]: https://en.wikipedia.org/wiki/Run-time_algorithm_specialisation
[6]: https://habrahabr.ru/post/342410/?utm_source=habrahabr&utm_medium=rss&utm_campaign=feed_posts#habracut