В этой статье мы рассмотрим, как построить программу на Go, такую, как компилятор или статический анализатор, которая взаимодействует с фреймворком компиляции LLVM, используя язык ассемблера LLVM IR. TL;DR мы написали библиотеку для взаимодействия с LLVM IR на чистом Go, см. ссылки на код и на пример проекта. Читать дальше →
Проклятие недетерминизма Моя первая попытка написать проход LLVM — люблю эти сегфолты Недавно я столкнулся с интересной задачей — мне понадобился детерминированный и кросплатформенный способ определения времени выполнения кода С++. Под словом «детерминированный» я…
Оглавление: Часть 1: Введение и лексический анализ Часть 2: Реализация парсера и AST Часть 3: Генерация кода LLVM IR Часть 4: Добавление JIT и поддержки оптимизатора Часть 5: Расширение языка: Поток управления Часть 6: Расширение языка: Операторы, определяемые пользователем Часть 7:…
В моём углубленном курсе компиляторов прошлой осенью мы провели некоторое время, изучая дерево исходников LLVM. Миллион строк кода на C++ выглядят пугающе, но я нахожу это интересным упражнением, и, по крайней мере, некоторые студенты с этим согласны, и я подумал, что я попытаюсь написать что-то подобное. Мы будем использовать LLVM 3.9, но предыдущие (и, возможно, будущие) релизы не сильно отличаются. Читать дальше →