По моему скромному опыту проще делать несколько ir и трансляцию между ними, чем сразу ассемблер из достаточно высокоуровенового языка. Особенно в toy project
Да, кажется, что так и есть... Спасибо большое, попробую разобраться как в compcert сделано. На первый взгляд действительно выглядит намного более низкоуровневым, чем мой этот IR
IR может быть высокоуровневым, типа high GIMPLE в GCC. На нем можно описывать исключения (как в C++), области видимости, OpenMP (если нужен) и т.п. Тогда фронтендам не надо всю эту логику lowering-а дублировать
Да, кажется, что так и есть... Спасибо большое, попробую разобраться как в compcert сделано. На первый взгляд действительно выглядит намного более низкоуровневым, чем мой этот IR
наверняка есть более простые примеры, т.к. компсерт для индустрии + на Coq
Я хочу получить что-то более-менее настоящее на выходе. Потом хотел бы попробовать для RISC-V сделать (если вообще хоть что-то доделаю и запал не пройдёт после x64)
Просто я делаю по книге Аппеля и там было предложено 2 ISA: MIPS и SPARC. Я решил взять что-то более хардкорное в надежде найти параллели с тем, что изложено в книге и не застрять %)
Полезно параллельно посмотреть на другие архитектуры (хотя бы спеки: наборы команд, регистры, ABI), чтобы потом не вычищать x86-специфичый код из middle end
Просто я делаю по книге Аппеля и там было предложено 2 ISA: MIPS и SPARC. Я решил взять что-то более хардкорное в надежде найти параллели с тем, что изложено в книге и не застрять %)
MIPS кстати хорош тем, что для него есть удобные эмуляторы типа SPIM: на входе файл на ассемлере, на выходе результат исполнения. Не нужно писать ассемблер и libc
Все специфичные для x64 внутренности находятся внутри отдельного модуля. Т.е. я планирую и дальше поддерживать эти абстракции, это должно позволить мне поиграться с другими архитектурами. Да, нашёл эмулятор, спасибо
Я хочу получить что-то более-менее настоящее на выходе. Потом хотел бы попробовать для RISC-V сделать (если вообще хоть что-то доделаю и запал не пройдёт после x64)