Вопрос

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

  • Статический анализ кода полностью интегрирован в Xcode IDE с помощью параметра «Сборка и анализ» в меню «Сборка» или с помощью пользовательских настроек сборки.
  • 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 и т. д.ал.и объясните, что это такое, когда нам следует использовать каждый и для чего?Было бы неплохо иметь ссылки на более подробное объяснение, но на самом деле я просто ищу общий обзор.

Это было полезно?

Решение

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top