QBE — это компактный компилятор-бэкенд, который обещает выдавать 70% производительности промышленных решений при написании всего в 10% кода. Проект делает ставку на языковую инновацию через простой, но эффективный бэкенд, намеренно ограничивая масштаб, чтобы избежать эффекта уменьшающейся отдачи. Авторство проекта стремится сохранить код-базу на уровне хобби-проекта, чтобы разработчикам было приятно в это писать. Несмотря на малый размер, инструмент предлагает оптимизации с хорошим соотношением результата и сложности, включая полную поддержку C ABI. Это позволяет программам, скомпилированным через QBE, без лишних проблем вызывать код на C и наоборот. Текущая версия поддерживает архитектуры amd64, arm64 и riscv64, работает под управлением Linux, osx.
В списке возможностей фигурирует поддержка чисел IEEE с плавающей точкой, как 32, так и 64 бита. Инженеры используют единый простой язык промежуточного представления, основанный на SSA, который применяется на всех стадиях компиляции. Алгоритмы удаляют дублирующее копирование, распространяют константы в условиях, убирают мертвые инструкции и записывают данные в регистры вместо стека. Разделение регистрового аллокатора и спиллера благодаря форме SSA делает процесс проще и быстрее, чем графовая раскраска. Умная эвристика разбрасывает переполненные регистры на основе анализа циклов, а линейный аллокатор умеет использовать подсказки. Инструмент умеет работать с адресными режимами amd64 и компилируется за две секунды на Core 2 Duo с флагом CFLAGS=-O2. Для старта используют самодостаточный пример на языке QBE, где функции $add и $main демонстрируют арифметику и вызов функции $printf. Скомпилировать файл можно командой qbe -o out.s file.ssa, а затем собрать ассемблерный код через cc. Выходной бинарник использует местную библиотеку libc для вывода текста на терминал. Разработчикам предлагают документацию по языку, а для патчей и обсуждений есть списки рассылки ~mpu/qbe@lists.sr.ht. Личное общение ведется в канале #myrddin на irc.eigenstate.org.