QBE: компиляторный бэкенд, который не стыдно показать маме

Маленький, быстрый и без лишнего пафоса — QBE делает для компиляторов то же, что SQLite для баз данных.
Если вы когда-нибудь писали компилятор и вдруг осознали, что бэкенд — это адская смесь из регистров, инструкций и желания всё бросить, то у нас для вас хорошие новости. QBE (Quick Back End) — это опенсорс-проект, который берёт на себя генерацию машинного кода, чтобы вы могли спать спокойно, а не отлаживать segfault в три часа ночи.
QBE — это не очередной монстр вроде LLVM, который требует выучить 47 новых понятий и пройти семь кругов документации. Нет, это скорее швейцарский нож: компактный, заточенный и делает ровно то, что нужно. Он умеет генерировать код для x86_64 и AArch64, поддерживает оптимизации (да, не агрессивные, но и не «никакие») и работает на порядок быстрее старших братьев. Как Wi-Fi у бабушки: не рекордсмен, но стабильно.
Разработчики QBE явно вдохновлялись философией Unix: делай одну вещь, но делай её хорошо. Никаких навороченных IR-диалектов, никакого «давайте добавим ещё один пасс». Просто берёте ваш AST или промежуточное представление, конвертируете в QBE IR, и готово — вы получаете .s файл, который можно скормить ассемблеру. Идеально для учебных проектов, прототипов или когда хочется сделать свой язык программирования за выходные, а не за год.
Конечно, для продакшена с агрессивными оптимизациями QBE не подойдёт — там LLVM или GCC рулят. Но если вам нужно быстро получить работающий компилятор без тонны оверхеда, QBE — это как велосипед в городе: быстрее, чем пешком, и не надо парковаться. Плюс, open source под лицензией MIT — бери и делай что хочешь, хоть свой Brainfuck-компилятор.
Комментарий студии METABYTE: QBE — отличный пример того, как не обязательно изобретать велосипед с квадратными колёсами. Мы в своих проектах тоже любим использовать проверенные инструменты, чтобы не тратить время на низкоуровневую магию, а сосредоточиться на фичах, которые радуют пользователей. Хотя иногда хочется всё-таки написать свой бэкенд на коленке — для души.