Помимо всех причин, связанных с качеством генератора кода, существуют и другие проблемы:
- Бесплатные компиляторы C (gcc, clang) немного ориентированы на Unix
- Поддержка более одного компилятора (например, gcc в Unix и MSVC в Windows) требует дублирования усилий.
- компиляторы могут перетаскивать библиотеки времени выполнения (или даже * nix-эмуляции) в Windows, которые являются болезненными. Две различные среды выполнения C (например, linux libc и msvcrt), на которых основываются, усложняют вашу собственную среду выполнения и ее обслуживание
- В вашем проекте есть большой внешний блоб с внешней версией, что означает, что основной переход на версию (например, изменение искажения может повредить вашу библиотеку времени выполнения, изменения ABI, такие как изменение выравнивания), могут потребовать некоторой работы. Обратите внимание, что это относится к компилятору и внешней версии (части) библиотеки времени выполнения. И несколько компиляторов умножают это. Это не так плохо для C, как для бэкэнда, как в случае, когда вы напрямую подключаетесь (читай: делайте ставки) к бэкенду, как если бы вы были gcc / llvm frontend.
- Во многих языках, которые следуют по этому пути, вы видите, что Цизмы проникают в основной язык. Конечно, вам это не понравится, но вы будете испытывать искушение: -)
- Функциональность языка, которая напрямую не сопоставляется со стандартным C (например, вложенные процедуры,
и другие вещи, требующие многократного использования стека), сложны.
- Если что-то не так, пользователи будут сталкиваться с ошибками компилятора уровня C или компоновщика, которые находятся за пределами их сферы деятельности. Анализировать их и делать их своими собственными болезненными, особенно с несколькими компиляторами и -versions
Обратите внимание, что пункт 4 также означает, что вам придется тратить время, чтобы просто продолжать работать, когда развиваются внешние проекты. Это время, которое обычно не входит в ваш проект, и, поскольку проект более динамичен, для многоплатформенных выпусков потребуется много дополнительных разработок для удовлетворения изменений.
Короче говоря, из того, что я видел, такой шаг позволяет быстро начать работу (получить разумный генератор кода бесплатно для многих архитектур), но есть и недостатки. Большинство из них связаны с потерей контроля и плохой поддержкой Windows таких * nix-ориентированных проектов, как gcc. (LLVM слишком нов, чтобы говорить о долгосрочной перспективе, но их риторика звучит так же, как и gcc десять лет назад). Если проект, от которого вы сильно зависите, придерживается определенного курса (например, GCC будет очень медленно работать на win64), то вы застряли с ним.
Во-первых, решите, хотите ли вы иметь серьезную поддержку не * nix (OS X более unixy), или только компилятор Linux с пробкой Mingw для Windows? Многим компиляторам нужна первоклассная поддержка Windows.
Во-вторых, насколько готовым должен стать продукт? Какова основная аудитория? Является ли это инструментом для разработчика с открытым исходным кодом, который может обрабатывать инструментальную цепочку DIY, или вы хотите нацелиться на начинающий рынок (как и многие сторонние продукты, например RealBasic)?
Или вы действительно хотите предоставить хорошо продуманный продукт для профессионалов с глубокой интеграцией и полным набором инструментов?
Все три являются действительными указаниями для проекта компилятора. Спросите себя, каково ваше основное направление, и не думайте, что больше вариантов будет доступно вовремя. Например. оцените, где находятся проекты, которые в начале девяностых годов выбрали в качестве внешнего интерфейса GCC.
По сути, Unix-путь заключается в расширении (максимизировать платформы)
Полные комплекты (такие как VS и Delphi, последний, который недавно также начал поддерживать OS X и в прошлом поддерживал linux) углубляются и пытаются максимизировать производительность. (специально поддерживает платформу Windows с глубокими уровнями интеграции)
Сторонние проекты менее понятны. Они больше идут за самозанятыми программистами и нишевыми магазинами У них меньше ресурсов для разработчиков, но они лучше управляют и фокусируются.