Компиляторы

Компилятор, сделай мне хорошо (C) Цитаты великих людей

Выделим наиболее популярные компиляторы:

Примечания про компиляторы

На данный момент Intel выпускает набор инструментов для разработки Intel OneAPI, в который входит новый компилятор от Intel, представляющий собой по сути вариацию Clang, но с существенно другим генерируемым кодом. Версии компилятора до Intel OneAPI и Legacy компилятор в OneAPI – это самостоятельная разработка Intel.

Если вы используете GCC/G++ (он же MinGW под Windows), то это не запрещено, но в случае использования нестандартных библиотек и заголовочных, поставляемых только с этим компилятором, то Ваша лабораторная будет развёрнута на доработку, поскольку Ваш код должен компилится без специфичных заголовочных.

Чтобы поставить компилятор в Visual Studio, нужно выбрать Разработка классических приложений на С++. Дополнительно можно установить компилятор Clang, выбрав его в разделе Отдельные компоненты (второй скрин ниже).

Об особенностях компиляторов

Разные компиляторы предлагают разные функции и (часто) разрабатываются разными командами разработчиков, поэтому у них разные детали реализации. Все компиляторы С и C++, соответствующие стандарту ISO, должны быть способны преобразовать вашу исходную программу в целевую программу с одинаковым наблюдаемым поведением.

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

Еще один интересный момент, который следует рассмотреть, – это реализация стандартной библиотеки. По крайней мере, GCC, LLVM и MSVC поставляют свою собственную реализацию стандартной библиотеки с соответствующими компиляторами. Эти реализации будут отличаться, учитывая лицензирование и корпоративную поддержку компиляторов.

Следующее различие между компиляторами заключается в оперативности – насколько быстро добавляется поддержка последних нововведений стандарта (опубликованные ISO). GCC и Clang часто первыми предлагают поддержку новых функций C++, MSVC очень быстро поддерживает, что хотят, и много лет не поддерживают, что не хотят. Все GCC, Clang и MSVC также поддерживают некоторые экспериментальные функции и собственные расширения, ни с чем больше не совместимые.

Пример с OpenMP: Поддержка OpenMP в MSVC по умолчанию достаточно древняя (2.0), некоторые возможности более новых версий можно получить в новых версиях MSVC указанием специального ключа компиляции (и некоторыми заморочками с dll). В это время последние версии GCC и Clang поддерживают версию 4.5 и часть функционала версий 5.0 и выше.

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

Last updated