Подтвердить что ты не робот

IPhone GCC/LLVM GCC или LLVM?

Я спрашиваю здесь экспертов...

Кто-нибудь сделал какой-то тест производительности, какой компилятор лучше всего подходит для iPhone-приложений?

Так как у нас есть выбор между:

  • GCC 4.2
  • LLVM GCC 4.2
  • LLVM-компилятор 1.5

Мне интересно, какая из 3 предлагает лучшую производительность...

Я сделал несколько быстрых тестов, но не нашел большой разницы?

Какой компилятор вы используете?

4b9b3361

Ответ 1

Если вы смотрите видеозапись WWDC 2010, то это означает, что Apple сообщает о значительном увеличении производительности для приложений, построенных с использованием LLVM-компилятора над GCC (в некоторых случаях до 60% быстрее). Есть дополнительные улучшения, которые можно сделать, используя парсер Clang с компилятором LLVM. Смотрите сеанс 312 - "Что нового в компиляторе LLVM" для получения дополнительной информации об этом, а также о сессиях LLVM от WWDC 2009, если они у вас есть.

Я видел 20% -ное ускорение перехода от GCC к LLVM 1.5 в неофициальном контрольном листе в одном из моих приложений, но это был не тщательный тест, поэтому считайте, что это только анекдотические доказательства.

Моя рекомендация - использовать Clang + LLVM (LLVM Compiler 1.5), если вы можете ускорить время сборки, более эффективные приложения и значительно улучшить ошибки компилятора. Если вы используете код С++ или что-то еще, что анализатор Clang не может обрабатывать прямо сейчас, используйте LLVM GCC, чтобы получить преимущества производительности в вашем скомпилированном приложении. Перейдите в GCC только в том случае, если по какой-то причине это не удается. Это простой переключатель для установки в ваших настройках сборки, чтобы получить даже небольшую дополнительную производительность в своем конечном приложении.

LLVM Compiler 2.0, поставляемый с Xcode 4, имеет полную поддержку для С++ и promises дополнительных оптимизаций для скомпилированных приложений, а также более быстрое ускорение компиляции. Xcode 4 даже использует Clang в качестве механизма подсветки синтаксиса/коррекции кода в среде IDE. Он четко определяет направление, которое Apple ведет со своими компиляторами.

Ответ 2

Я не знаю о производительности для iPhone, но в других тестах Clang обычно компилируется быстрее, но производит медленный код, чем GCC. У Clang также есть лучшие сообщения об ошибках, чем GCC. Таким образом, было бы лучше использовать Clang в разработке и переключиться на GCC для окончательной сборки. Если вы выберете такой подход, убедитесь, что у вас хороший цикл QA или система сборки, которая также будет строить и тестировать сборку GCC, поэтому вы не получите никаких неприятных сюрпризов, связанных с компилятором, в конце.

Поддержка С++ в Clang немного отстает от GCC (и более С++-код был протестирован и изменен для приключений GCC, чем Clang), поэтому, если вам нужно использовать много С++, GCC может быть лучшим вариантом.

Действительно, вам нужно выбрать лучший компилятор для ваших нужд. Тесты и другие результаты могут дать вам представление о том, что следует учитывать, но каждая программа отличается, поэтому наилучшим подходом было бы сравнение вашей собственной программы с различными компиляторами и посмотрите, какая из них лучше всего подходит вам.

Ответ 3

LLVM GCC 4.2 - это то, что я использую.

Clang не справляется с С++ достаточно хорошо, и это очень большая работа. Это очень перспективный инструментарий, но на данный момент он недостаточно стабилен для производства (по моему опыту).

Apple определенно инвестирует в Clang в качестве своего будущего компилятора, но это не тривиальный проект. К сожалению, это ставит многих из нас в странное место, используя один относительно старый компилятор и/или один очень новый (предположим, сколько лет он будет, прежде чем я начну использовать функции С++ 0x в своих кодовых базах).

Я использовал интерфейс GCC с бэкэндом LLVM с моими кодовыми базами, поскольку он был доступен (по крайней мере, во время тестирования). Он был общедоступным в течение многих лет и довольно стабилен. Я обнаружил, что пропуск LLVM дает меньшие, более быстрые исполняемые файлы по сравнению с GCC самостоятельно (хотя я делаю больше работ с таргетингом на OS X, чем на iOS). Честно говоря, я не могу скомпилировать достаточно кода с Кланом, чтобы рекомендовать его (плюс, у меня много С++).

Я нашел GCC + LLVM combo надежным. Если ваша главная проблема связана с надежностью, начинайте с GCC, регулярно тестируйте + LLVM в разработке и регулярно компилируйте и тестируйте Clang в каждом выпуске Clang, пока вы не удовлетворитесь этим. GCC + LLVM, как правило, будет использоваться для современных сборок производства.

Если вам нужна ваша скорость, начните с GCC + LLVM и регулярно проверяйте с Clang (если это вариант для вас - это не для меня - слишком много С++).

В отношении анализа/лексинга/генерации Клана: Clang нацелен на соответствие самым высоким стандартам. Они преуспевают, но есть много новых функций или нет, поэтому я предлагаю вам быть осторожными, особенно с С++.

Я считаю, что Apple сделала свой предпочтительный компилятор будущего очевидным, поэтому... не ждите слишком долго, чтобы проверить с Clang.

Ответ 5

С clang 1.5 С++ интерфейс не самый лучший, и я вообще рекомендую его использовать, если вам нужно иметь дело с любым кодом на С++ (сюда входит код Objective-C ++). Кроме того, у меня были проблемы с слабыми связями при использовании clang, поэтому для меня это не готово к производству, если вам приходится иметь дело с одним из двух вышеупомянутых случаев.

Тем не менее, я не заметил никакого реального влияния на производительность между ними, хотя ошибки clang и предупреждения намного более полезны, чем gcc.

Пища для размышлений.