**Примечание переводчика**
_Приведённый в статье код скомпилирован с достаточно старыми версиями крейтов peg и peg\_syntax\_ext. Для текущих версий в исходники нужно внести минимальные изменения. Я вставил изменённые участки в спойлеры по тексту статьи. Для сборки кода установите компилятор nightly Rust.
Полный исходник с моими правками можно скачать здесь:
_
В настоящее время я работаю над компилятором, который написан на Rust, и порождает LLVM IR. LLVM API выглядит немного пугающе для новичков, и по нему не так много руководств (и все они на C++, поэтому не вполне очевидно, как сделать то же самое на Rust). Я бы хотел, чтобы кто-то протянул мне руку помощи, когда я начинал всё это, и эта статья является тем, что я хотел бы показать самому себе в то время.
![][1]
В Rust наилучшая возможность взаимодействия с LLVM — через крейт llvm-sys. Один добрый человек разместил документацию к нему [здесь][2]. Конечно, вам следует также изучить [руководство][3] по LLVM, так как оно поможет вам понять, как LLVM “думает”. Этот пост, в основном, является переводом на Rust подмножества из этого руководства.
Полный исходный код для этого руководства находится [здесь][4].
[Читать дальше →][5]
[1]:
https://habrastorage.org/web/91b/abc/cfb/91babccfb6604110bad66cfc1d5819ed.jpg
[2]:
http://rustdoc.taricorp.net/llvm-sys/llvm_sys/
[3]:
https://habrahabr.ru/post/119850/
[4]:
https://github.com/ucarion/llvm-rust-getting-started
[5]:
https://habrahabr.ru/post/338420/?utm_source=habrahabr&utm_medium=rss&utm_campaign=feed_posts#habracut