Xcode 3.2.1 GCC CLANG и демистификация LLVM

В readme, включенном в новый Xcode 3.2.1, на этой неделе написано следующее:

  • Анализ статического кода полностью интегрирован в Xcode IDE с помощью опции "Сборка и анализ" в меню "Построение" или с помощью пользовательских настроек сборки
  • GCC 4.2 является системным компилятором по умолчанию для 10.6 SDK
  • Дополнительный компилятор LLVM включается с использованием двух разных интерфейсов: компилятор Clang является ведущим парсером, который предлагает значительно улучшенное время компиляции. Для максимальной совместимости компилятор GCC LLVM использует LLVM-back-end с парсером GCC 4.2.
  • Новый дополнительный компилятор Clang-LLVM 1.0 использует гораздо более быстрый анализатор Clang front-end в сочетании с компилятором LLVM для быстрого компиляции и быстрого исполняемого кода. Многие проекты выиграют от этой комбинации компиляторов, хотя GCC 4.2 по-прежнему является системным дефолтом. Компилятор Clang-LLVM 1.0 вернется к использованию LLVM-GCC 4.2, когда он встретит код на С++.

Наша компания имеет существующие проекты, которые являются чистыми C, Objective-C и Objective-C ++ для настольных компьютеров и iphone. Может ли кто-то обобщить на высоком уровне различия между LLVM, GCC, CLANG, CLANG-LLVM, WordFoo et. и др. и объяснить, что они собой представляют, и когда мы должны использовать их и для чего? Было бы неплохо иметь ссылки на более подробное объяснение, но я действительно просто ищу общий обзор.

+38
источник поделиться
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).

+53
источник

Посмотрите другие вопросы по меткам или Задайте вопрос