Какой лучший компилятор С++?

Может ли компилятор С++ создать не очень хороший двоичный файл? Здесь вы можете думать о производительности и производительности. Существует ли такая вещь, как "лучший" компилятор С++? Если нет, то какие сильные стороны и, конечно же, не очень сильные (известные ошибки и проблемы) точки, известных компиляторов (g++, Intel С++ Compiler, Visual С++ и т.д.).

Существуют ли документированные случаи, когда компилятор произвел неверный вывод, что привело к сбою критически важного программного обеспечения?

Ответы

Ответ 1

g++ кажется самым популярным. Он бесплатный, портативный и неплохой. Порт Windows (MinGW) был действительно устаревшим в последний раз, когда я его использовал (возможно, год назад).

Компилятор Intel С++ считается тем, который генерирует самый быстрый код (однако он знает, что он генерирует плохой код SIMD для процессоров AMD). Вы можете свободно использовать его на GNU/Linux в довольно жестких условиях. Я использовал его в течение некоторого времени, и мне понравилось, что он испускает умные предупреждения, которые другие не делают.

VС++ часто считается лучшей С++ IDE, и из того, что я слышу, компилятор тоже неплох. Это бесплатно (как в бесплатном пиве), и доступно только на Windows, конечно.
Если вы заинтересованы в программировании Windows, я бы предложил этот компилятор, потому что он всегда обновлен и предоставляет более сложные функции для этой цели.

Я бы предложил VС++ для Windows, g++ для других ОС. Попробуйте бесплатную версию я ++ самостоятельно, чтобы убедиться, что это стоит денег.


Существуют ли документированные случаи, когда компилятор произвел неверный вывод, что привело к сбою критически важного программного обеспечения?

Да, наверное, но я бы сказал, что большую часть времени, вероятно, это ошибка программиста. Например, если кто-то не знает, как работает арифметика с плавающей запятой, легко написать ненадежный код. Хороший программист должен также знать, что гарантировано для работы на стандарте С++, а что нет. Она также должна знать, каковы пределы компилятора, например. насколько хорошо он реализует стандарт и насколько он оптимизирован.

Ответ 2

Прежде всего, какая платформа, которую вы используете, обычно определяет, какие компиляторы использовать.

Во-вторых, ваш вопрос о надежности и производительности. Я не уверен, что вы подразумеваете под устойчивостью. но если вы имеете в виду правильность скомпилированных двоичных файлов, я должен сказать, что пока вы используете стабильную версию любого из компиляторов, о которых вы упомянули, вы не столкнетесь с проблемами "устойчивости". Эти компиляторы очень зрелые и использовались в бесчисленных реальных проектах. Поэтому я бы не стал беспокоиться о надежности.

Что касается производительности, это сложно ответить, потому что у каждого компилятора есть разные методы оптимизации, которые теоретически могут дать разные результаты. Я надеюсь, что есть кто-то более осведомленный, чем я, который может рассказать вам об этом.

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

  • Какой компилятор поддерживает мою целевую платформу.
  • Какой компилятор работает с моей средой разработки и инструментами?
  • Какой компилятор - моя команда разработчиков и наиболее знакомые с ней интеграторы.

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

Ответ 3

Поскольку вы упоминаете "как часть коммерческой системы самолета" в комментарии, может быть полезно посмотреть компиляторы, предоставленные компаниями, которые фактически поддерживают сертификацию в этом пространстве или другие безопасные для продукта области безопасности. Программное обеспечение Green Hills является одним из них. Wind River - это другое.

Ответ 4

В дополнение к Bastien Léonard ответ: есть еще один многоплатформенный компилятор С++ — Comeau. Это самый стандартизованный компилятор С++. Последняя версия имеет поддержку языка С++ 0x.

Ответ 5

Какую платформу вы используете? Например, Visual С++ не будет вам полезен в Linux.

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

gcc/g++: с открытым исходным кодом, проверенный, усовершенствованный многолетним опытом совместной работы на многих Linux и UNIX-системах. Не очень сильная точка - это просто автономный инструмент командной строки. Вы можете создать или, возможно, найти свою собственную среду в стиле IDE, но она не "отправляется" таким образом, так сказать.

Visual С++: хорошо поддерживается Microsoft, загружает образцы кода и документацию (MSDN), естественно подключается к API Windows. Не совсем так, что это не особенно, ну, "визуально". Если вы привыкли к Visual Basic (скажем), вы обнаружите, что Visual С++ не работает одинаково.

Компилятор Intel С++: увы, у меня нет опыта работы с компилятором Intel, но я уверен, что он поддерживает parallelism и имеет высокоточные числовые библиотеки.

Возможно, стоит упомянуть Borland С++ Builder. Это становится плюсом для быстрой среды разработки приложений с множеством дополнительных элементов управления благодаря совместимости с Delphi VCL, но, наоборот, код, разработанный в С++ Builder, не просто переносится на другие компиляторы С++.

Ответ 7

Точка оптимизирующего компилятора заключается в том, что она должна генерировать оптимизированную программу, функционально эквивалентную оригиналу. Разумеется, функциональный эквивалент связан с наблюдаемыми эффектами; государство, естественно, не было бы таким же. Любой компилятор, который может генерировать неверный перевод, на мой взгляд, является плохим, хотя я полагаю, что вы могли бы смягчить некоторые проблемы в разных ситуациях. Одним из преимуществ компилятора основного потока является то, что ошибки исправляются быстрее.

В отношении производительности компиляторы обычно выполняют два типа оптимизаций: независимые от платформы оптимизации (на уровне источника/синтаксическом дереве/промежуточном представлении) и специфичные для платформы.

Я бы предположил, что наилучшая независимая от платформы оптимизация, вероятно, связана с различными академическими модификациями существующих компиляторов (но, вероятно, другая оптимизация и каждая). Эти оптимизации в конечном итоге признаются и, в конечном счете, стекаются в мейнстрим.

Что касается оптимизаций для платформы, я думаю, что компании, занимающиеся этими платформами, часто имеют наилучшую оптимизацию (например, внутренние компиляторы Intel), но они еще не интегрированы в компиляторы общей доступности и, в конце концов, также стекаются вниз.

Ответ 8

http://www.compilers.net/Dir/Free/Compilers/CCpp.htm

У Microsoft есть хороший бесплатный компилятор, но если вы работаете над unix или mac, которые мало помогут вам.

В Borland есть хороший бесплатный компилятор.

Я опробовал несколько бесплатных компиляторов и чувствовал себя наиболее комфортно с Dev-С++. Общий пакет относительно небольшой по размеру и поставляется в виде окон и linux. Для меня это прекрасно, чтобы проверить пределы языка С++. Он быстро компилируется и упрощает эксперименты.

Я рекомендую вам это программное обеспечение под названием Digital Mars C/С++ Compiler, и вы можете получить его от http://www.brothersoft.com/digital-mars-... это бесплатный компилятор C/С++ для среды Win32, Win16, DOS32 и DOS.

Ответ 9

Я нашел проблемы с использованием Cygwin, такой код, который не компилируется, но генерирует ошибку сегментации внутри компилятора. Этот же код работает с MinGW.

[edit] Вот отчет компилятора:

lista.h: In constructor `Lista<Dado>::Lista() [with Dado = int]':
principal.cpp:15:   instantiated from here
lista.h:13: internal compiler error: Segmentation fault
Please submit a full bug report,
with preprocessed source if appropriate.
See <URL:http://cygwin.com/problems.html> for instructions.

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

[/править]