Xcode 3.2.1 GCC CLANG и LLVM демистификация - PullRequest
39 голосов
/ 11 октября 2009

Readme, включенный в новый Xcode 3.2.1 на этой неделе, говорит следующее:

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

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

1 Ответ

53 голосов
/ 11 октября 2009

В двух словах:

Компиляторы в основном разделены на две части. Одним из них является интерфейс, содержащий синтаксический анализатор и семантический анализ для языка программирования. Фронт-энд производит какое-то промежуточное представление вашего кода. Кроме того, есть серверная часть, которая берет материал, созданный интерфейсом, оптимизирует его и в конечном итоге генерирует код сборки.

  • GCC : хорошо известный компилятор, содержит как интерфейсы для различных языков, так и фоны для многих процессорных архитектур
  • LLVM : набор серверных частей для различных архитектур (и других низкоуровневых компонентов)
  • clang : новый интерфейс для C, Objective-C и C ++; использует бэк-энды LLVM. Вы получите больше читаемых ошибок и предупреждений от вашего компилятора и более короткое время компиляции. Вы также можете столкнуться с несовместимостью или ошибками; Clang - очень молодой проект.
  • LLVM-GCC: внешний интерфейс GCC с внутренним интерфейсом LLVM. Серверная часть LLVM работает быстрее, чем GCC.

Поддержка Clang (Objective-) C ++ далека от завершения, поэтому она вызывает llvm-gcc при обнаружении исходного файла C ++. Он также содержит статический анализатор, который теперь интегрирован в XCode. Некоторые люди говорят, что бэкэнд LLVM генерирует лучший код, чем GCC, но ваш пробег может отличаться. LLVM также поддерживает оптимизацию времени соединения (которую вы можете включить в настройках проекта XCode). Они могут генерировать более быстрый код.

Apple хочет заменить GCC на clang в будущем, потому что у них есть политика в отношении лицензионного кода GPLv3 (GCC 4.2 - последняя версия, лицензированная под GPLv2).

...