LLVM против GCC для разработки iOS - программирование
Подтвердить что ты не робот

LLVM против GCC для разработки iOS

В последнем пакете iOS SDK Apple предоставляет три варианта компилятора: GCC, LLVM с Clang и LLVM-GCC. Я понимаю более или менее то, что означают эти 3, что LLVM и Clang, и так далее. То, что я не знаю, это то, что на практике означает для разработчиков iPhone. Какой из них я должен использовать на данный момент, по состоянию на январь 2011 года? Является ли LLVM достаточно зрелым, чтобы я мог использовать его безопасно, не слишком часто сталкиваясь с ошибками? Есть ли у других LLVM какие-либо другие недостатки? Если это так, то преимущество в скорости превосходит их? Есть ли другие причины для переключения, кроме скорости?

4b9b3361

Ответ 1

Обновление: Поскольку люди все еще находят этот ответ, я чувствую, что должен предоставить подходящее обновление. К настоящему моменту я надеюсь, что это ясно, что Clang - это абсолютно способ программирования при программировании, когда Clang является компилятором по умолчанию в новых версиях Xcode и поддерживает ARC, а также новые и предстоящие языковые конструкции (подписи, литералы и т.д.), Почти нет никаких оснований для компиляции с GCC, а для кодовых баз с использованием ARC и новых функций использование простого GCC уже не актуально или возможно (LLVM-GCC может поддерживать эти функции, но теперь он не дает преимуществ перед Clang, поскольку Clang полностью стабильный).


К настоящему времени (с LLVM-2.0, включенным в бета-версию Xcode 4.0), LLVM достаточно зрелый для использования в производственном коде. Он компилируется немного быстрее, чем GCC, и производит более быстрый код, поэтому используйте его всякий раз, когда можете (в значительной степени старайтесь избегать GCC, если что-то лучше доступно). Стандартная установка Xcode 3.2.5 содержит LLVM-1.6 (не последнюю), поэтому я бы рекомендовал либо запустить некоторые тесты скорости, чтобы увидеть, есть ли заметная разница между GCC и LLVM, или компиляция Clang из источника и получение последней версии.

По существу, больше нет необходимости в GCC, LLVM + Clang более чем достаточно.

Ответ 2

Хорошо, я думаю, что ни один из приведенных ниже ответов не рассказать всю историю, поэтому здесь я беру ответ на свой вопрос:

  • LLVM компилирует код быстрее, чем GCC, может создавать код, который работает быстрее, а интерфейс Clang обеспечивает более точные сообщения об ошибках, чем GCC, поэтому есть определенные причины для переключения;

  • что версия с последним стабильным Xcode (LLVM 1.6) еще не стабильна на 100%, вы можете столкнуться с некоторыми незначительными ошибками, если вам не повезло. Поэтому, если вы хотите быть в безопасности, вы должны либо скомпилировать последний LLVM (2.0) из источника, либо придерживаться GCC в течение следующих нескольких месяцев;

  • через несколько месяцев, вероятно, когда Apple выпустит Xcode 4, LLVM 2.0 будет версией, поставляемой с Xcode по умолчанию, и тогда мы все должны быть в состоянии безопасно переключиться на нее.

Спасибо всем, кто ответил, не стесняйтесь меня исправить, если у меня что-то не так.

Ответ 3

У меня есть приложение, которое, похоже, сбой при запуске на исходном iPhone под управлением iOS 3.1.3 при компиляции с LLVM 2.0, но с LLVM-GCC работает отлично. Я поддерживаю iOS 3.1, так что это фатально. Не уверен, существует ли взаимодействие между LLVM 2.0 и некоторым конкретным кодом, но лучше избегать LLVM, если вам нужно поддерживать iOS 3.x, если вы не сможете полностью протестировать устаревшие устройства.


Обновление: похоже, проблема связана с аппаратным обеспечением устройства, а не с версией iOS. Кажется, что на iOS-устройства первого и второго поколений влияют: оригинальный iPhone, iPhone 3G и 1st iPod Touch iPod. Я считаю, что это означает, что он ограничен архитектурой ARMv6.

Кроме того, выполнение отладочной сборки через отладчик Xcode отлично работает, а сборки релизов, установленные через iTunes, не работают. Таким образом, это может быть взаимодействие между архитектурой процессора и уровнем оптимизации с LLVM 2.0.

Но в любом случае избегайте пока;)

Ответ 4

Еще одна важная причина для перехода на Clang - более точная (диапазоны номеров столбцов и строк) и читаемые сообщения об ошибках.

Ответ 5

Во время последнего WWDC10 они заставили разработчиков использовать более современный компилятор LLVM. Я забываю точный трактат, который они подробно описывали - один из "новых в Xcode". В основном они предлагают использовать LLVM-2.0, когда это возможно, в противном случае LLVM-GCC и полностью избегать GCC.

Если вы являетесь зарегистрированным разработчиком iOS, вы можете просматривать большую часть сеансов на http://developer.apple.com/videos/wwdc/2010/