Инструмент, над которым я работаю, должен взять промежуточный формат, сгенерированный компилятором, добавить к нему некоторый код и затем передать этот модифицированный промежуточный код в бэкэнд компилятора для генерации окончательного код.Самый простой способ работы с промежуточным форматом
Проведя небольшое исследование gcc, я обнаружил, что формат GIMPLE легко понять, но я не уверен в сложности модификации кода GIMPLE и не знаю, как можно перезапустить компиляцию из там, кроме использования плагинов и добавления собственного прохода. Также люди предупредили меня, что документации недостаточно, и становится все труднее, когда вы застреваете при работе с gcc.
Другой вариант - использовать байт-код LLVM. Но я никогда не работал с LLVM, поэтому не знаю, насколько сложна моя задача с LLVM. Там, возможно, даже лучшие варианты, о которых я не знаю. Поэтому я просто хочу знать лучший вариант. Мои предпочтения заключаются в следующем.
- Платформа индепендентство
- Простота в использовании
- Хорошо документировано
- Больше людей, используя его, так больше помощи доступной
Точка данных относительно LLVM: они не уклоняются от изменения API, которые сосут. Вы * можете * утверждать, что это заставляет нервничать, но это также означает, что существует сегодня, вероятно, хорошо и, вероятно, улучшится, а не станет старым и разоренным. Это также современный C++ - если вы можете проглотить это, это упростит вашу жизнь. – delnan
@ delnan, я читал, что LLVM не очень независима от платформы. Это правда? Мне нужен промежуточный код, который можно скомпилировать для любой платформы. Что касается LLVM с использованием C++, я довольно крут с этим, infact Я предпочитаю C++ над C. – MetallicPriest
Определите платформу независимо. Существует не так много бэкендов, как для GCC, но многочисленные общие архитектуры охвачены, и я не знаю никаких проблем, препятствующих добавлению большего количества бэкэндов. Но не делайте ошибок, есть * проблемы, которые не будут решены в ближайшее время (например, обработка исключений C++ в Windows). – delnan