Как сравнивать компиляторы - PullRequest
5 голосов
/ 26 января 2009

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

Мне сказали, что gcc - лучший компилятор Си, это правда? Если так, то почему?

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

(я слышал, что igc подойдет, например, для Intel, но я не знаю почему)

Лично я намереваюсь использовать 64-разрядную версию AMD, разрабатывать как для Linux, так и для Windows, приложения с графическим интерфейсом и без GUI.

Ответы [ 7 ]

11 голосов
/ 26 января 2009

Хм, не знаю, где вы слышали, что gcc - "лучший компилятор Си". Это просто самый вездесущий и намного лучше, чем нативный компилятор C, предоставленный большинством коммерческих поставщиков UNIX, когда gcc появился в 1990-х годах.

Но что определяет «лучшее»?

  • Время компилировать код;
  • Размер скомпилированного кода;
  • Скорость скомпилированного кода;
  • Использование памяти скомпилированным кодом;
  • Ошибки и вероятность сбоя сегмента;
  • Поддержка;
  • сообщество;
  • и т.д.

Разные вещи имеют значение для разных людей.

Вот один набор метрик, сравнивающий gcc с компилятором Intel и , другое сравнение с clang . Я уверен, что вы также можете найти некоторые сравнения с компилятором Microsoft.

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

11 голосов
/ 26 января 2009

В целом: во-первых, наиболее важным аспектом качества компилятора является правильность . Компилятор с ошибками или неожиданным поведением может действительно разрушить ваш день. Качество результирующего кода , такое как скорость, размер и использование памяти, также находится вверху списка.

Скорость компиляции является еще одним аспектом, особенно при компиляции больших проектов.

Одна вещь, которую я считаю особенно важной, - обработка ошибок - качество сообщений, которые вы получаете, когда компилятор сталкивается с вещами, которые он не может (или не хочет) обрабатывать.

3 голосов
/ 27 января 2009

Корректность является обязательным условием .

Мне тоже нравится

  • Чтобы иметь очень быстрый компилятор (например, lcc или ocamlc )
  • Чтобы иметь компилятор, который выдает действительно хороший код (например, ocamlopt или MLton )

Это нормально, если это два разных компилятора.

Я ненавижу с компилятором, который заставляет программы ломаться, когда выходит новая версия. (Ричард Столлман, позвоните в свой офис.)

2 голосов
/ 26 января 2009

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

2 голосов
/ 26 января 2009

Я знаю, что компиляторы INTEL и MS начали генерировать код для SSE3 / 4 инструкций и делать умные вещи, такие как разворачивание циклов и поддержка векторизации в компиляторе. Не уверен, что GCC делает это.

0 голосов
/ 10 мая 2009

gcc - ужасный компилятор. У него ЛУЧШАЯ техническая поддержка, возможно, из-за его цены, количества пользователей и Интернета (и Google, чтобы найти эту помощь). Но его производительность в лучшем случае ниже среднего, в зависимости от качества генерируемого машинного кода.

0 голосов
/ 26 января 2009

Вы имеете в виду

  • лучше всего по скорости компиляции
  • лучший по крошечному коду
  • лучший по быстрому коду?

Вы можете создать тестовое приложение, возможно, с некоторым неприятным кодом (для которого требуется интеллектуальный оптимизатор) и использовать все компиляторы для его тестирования.

Сравните свои тесты и используйте тот, который вам нравится больше всего.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...