2009-10-11 2 views
38

ридми в комплекте с новым Xcode 3.2.1 на этой неделе, говорит следующее:Xcode 3.2.1 НКУ Clang и LLVM демистификация

  • Статический анализ кода полностью интегрирован в Xcode IDE через Построение и анализ вариант в меню сборки или с помощью пользовательского построить настройки
  • GCC 4.2 системы по умолчанию компилятор для 10.6 SDK
  • Дополнительный LLVM компилятор включается с помощью два различных передней разделки концов - лязг компилятор является лидирующим анализатор, который предлагает значительно улучшено время компиляции. Для максимальной совместимости компилятор 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++.

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

ответ

53

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

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

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

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

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

+0

Да, clang даже показывает столбец ошибки, а не только линию. – 2010-12-20 15:20:57

+0

Awesome Answer: Когда я * кодирование * в Xcode, и я получаю * желтый * предупреждение, это clang? Если я получу * красную ошибку, что это? Если я получу ошибку после запуска i.e во время * runtime *, это LLVM, который дает мне ошибку? – Honey

Смежные вопросы