Ответ 1
В двух словах:
Компиляторы в основном разделены на две части. Один из них является интерфейсом, который содержит парсер и семантический анализ для языка программирования. Интерфейс создает какое-то промежуточное представление вашего кода. Тогда есть бэкэнд, который берет материал, который производит front-end, оптимизирует его и в конечном итоге генерирует код сборки.
- GCC: известный компилятор, содержит как интерфейсы для разных языков, так и серверы для многих процессорных архитектур.
- LLVM: набор обратных контуров для различных архитектур (и других низкоуровневых материалов).
- clang: новый интерфейс для C, Objective-C и С++; использует LLVM back-end. Вы получите более читаемые ошибки и предупреждения от вашего компилятора и более короткие сроки компиляции. Вы также можете столкнуться с несовместимостью или ошибками; clang - очень молодой проект.
- LLVM-GCC: интерфейс GCC с LLVM-интерфейсом. LLVM back-end быстрее, чем GCC.
clang (Objective-) Поддержка С++ далека от завершения, поэтому он вызывает llvm-gcc, когда он встречает исходный файл С++. Он также содержит статический анализатор, который теперь интегрирован в Xcode. Некоторые люди говорят, что LLVM-сервер создает лучший код, чем GCC, но ваш пробег может отличаться. LLVM также поддерживает оптимизацию времени соединения (которую вы можете включить в настройках проекта Xcode). Они могут генерировать более быстрый код.
Apple хочет заменить GCC на clang в будущем, потому что у них есть политика против лицензионного кода GPLv3 (GCC 4.2 является последней версией, лицензированной под GPLv2).