Самый лучший компилятор для c. Эффективность компиляторов

Рынок программных продуктов изобилует разнообразными средствами разработки прикладного ПО, и их выбор во многом предопределяет успех программного проекта. В статье представлены результаты тестирования эффективности компиляторов и сред разработки для языков Fortran, Pascal, C и Basic для некоторых основных операционных систем и аппаратных платформ, полученные на подготовленных автором задачах. Ограничимся рассмотрением исключительно ресурсоемких вычислительных задач, ориентированных преимущественно на расчеты с плавающей точкой. При этом быстродействие вычислений и адресации памяти будем считать одним из наиболее существенных требований, предъявляемых к разрабатываемому ПО. В качестве критерия эффективности примем условный рейтинг R , который будет определяться как величина, обратно пропорциональная времени выполнения программы. Используя выбранный критерий, мы на нескольких тестовых программах попытаемся сравнить:

  • разные версии продуктов одной и той же компании-разработчика;
  • версии компиляторов, которые разработаны одной компанией как для разных ОС (например Delphi для Windows и Kylix для Linux от Borland), так и для одной ОС, но различных языков программирования;
  • компиляторы разных разработчиков;
  • эффективность результатов компиляции одного и того же алгоритма при использовании различных языков программирования;
  • быстродействие выполнения тестовых примеров при использовании статических и динамических переменных;
  • быстродействие этих тестов на процессорах разных производителей (Intel, AMD, Cyrix).

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

Особенности алгоритмов тестирования

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

Вторая программа была разработана для оценки, в первую очередь, быстродействия адресации оперативной памяти. Для этой цели использовались два одинаковых двумерных действительных массива A и B с равной четной размерностью по обоим направлениям, которые заполнялись данными, генерируемыми случайным образом. Квадратные матрицы A и B были разделены на четыре равные "квадранта" (A 11 , A 12 , A 21 , A 22) и (B 11 , B 12 , B 21 , B 22) соответственно. Затем строки массива A 11 (слева направо, сверху вниз) поэлементно переносились в столбцы массива B 22 (снизу вверх, справа налево). Далее столбцы массива B 11 (сверху вниз, слева направо) поэлементно переносились в строки массива A 22 (справа налево, снизу вверх). Вместе с этим столбцы массива A 22 (снизу вверх, справа налево) поэлементно переносились в строки массива B 11 (слева направо, сверху вниз). И, в конце концов, строки данных массива B 22 (справа налево, снизу вверх) поэлементно переносились в столбцы массива A 11 (сверху вниз, слева направо). Все эти перемещения выполнялись одно за другим во вложенном двойном цикле, который повторялся наперед заданное количество раз, что имитирует итерационный процесс постепенного уточнения решения, традиционный для многих численных методов. При таком подходе последовательно выполняются операции чтения-записи, причем осуществляются обращения к расположенным в разных местах элементам столбцов и строк массивов A и B . С целью уравнять возможности компиляторов с разной организацией расположения элементов двумерного массива в оперативной памяти с точки зрения эффективности выборки данных здесь, как и в первом вычислительном тесте, был предусмотрен второй этап, отличающийся от описанной выше последовательности действий лишь измененным порядком индексов в двойном вложенном цикле, что приводит к замене строк на столбцы и наоборот. В отличие от предыдущего теста способ выборки и записи данных был преднамеренно организован так, чтобы создать наиболее неблагоприятные условия для их кэширования. Этим достигается определенная объективность тестирования быстродействия работы именно оперативной памяти.

Стратегия программирования, тестирования и оценки полученных результатов

Для обеспечения возможности корректного сопоставления результатов тестирования необходимо прежде всего согласовать задействованные в разных реализациях алгоритмов тестирования переменные по типу и длине. В качестве типов элементов массивов были использованы: single (в Pascal), float (в С), real (в Fortran) (все — длиной 4 байта). Каждый из двух описанных выше тестов имел две версии, в первой из которых выделялись статические массивы, а во второй — динамические. Размерность массива, предназначенного для хранения расчетных значений первого теста, выбрана равной 96 x 96. При 4-байтовой длине элементов этот массив займет в оперативной памяти 36 KB, что примерно в 1,8 раза меньше, чем размер кэш-памяти L2 процессора VIA C3 (64 KB), и в 3,6 раза меньше, чем L2-кэш у Celeron Coppermine (128 KB). Такое соотношение и особенности алгоритма обеспечивают благоприятные условия для эффективного использования кэш-памяти в данном тесте. Размерность массивов A и B для следующего теста была выбрана 1000 1000, что для их размещения в ОЗУ требует 7,63 MB. Этот объем будет в 15 раз превышать наибольший из размеров кэш-памяти процессоров Pentium III Tualatin и Pentium 4 (512 KB). Количество итераций описанной выше последовательности действий принято равным 40. Таким образом, основная нагрузка в этом тесте будет приходиться именно на средства адресации оперативной памяти.

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

,

где T — время выполнения полного цикла вычислений, а C — коэффициент пропорциональности, значение которого задается из соображений удобства. В данном исследовании были выбраны C 1 =1693 — для первого теста и C 2 =3159 — для второго. Первое из этих значений подбиралось для теста, откомпилированного в среде программирования Delphi 3, так, чтобы при выполнении его под управлением ОС Windows 2000 значение R при подстановке времени T в секундах равнялось бы тактовой частоте процессора (Celeron 1300 MHz), избранном для проведения тестирования. В пользу такого выбора говорит тот факт, что выполненные вычислительные тесты для компилятора Delphi 3 для процессоров Pentium II и Pentium III с любыми соответствующими чипсетами от Intel дали значение R, очень близкое к тактовой частоте.

Тест эффективности адресации RAM продемонстрировал ожидаемую сильную зависимость результатов от частоты шины FSB и обнаружил существенно худшие масштабируемость и универсальность, нежели вычислительный тест. По этой причине выбор коэффициента пропорциональности C 2 = 3159 для него в большей степени произволен, чем в первом случае. Кроме того, оба теста проявили существенную зависимость от избранного языка программирования, а также от компилятора. Так или иначе бoльшие значения R отвечают лучшей производительности, меньшие — худшей.

При проведении исследования были использованы компиляторы с четырех языков — Basic, Fortran, Pascal и C, которые широко применяются специалистами самого разного профиля.

Каждый из тестов повторялся по 5 раз, после чего вычислялось среднее арифметическое значение рейтинга R . Именно эта величина и принималась за основной количественный показатель выполнения теста и использовалась для сравнительной характеристики.

Результаты тестирования

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

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


Общее сравнение

Для удобства анализа компиляторы объединены в группы по языкам программирования. Используем этот же принцип классификации и при анализе полученных результатов.

Наилучшие по вычислительной производительности (рис. 1) результаты принадлежат продуктам Intel: Fortran Compiler 7, 2002 г. для Linux R =2432) и Windows (R =2297), а также Compaq Visual Fortran 6.6 (а, b), 2002 г. (R =2013). Непосредственно за ними идут Digital Fortran Compiler 4.5, 1996 г. (R =1641) и Lahey/Fujitsu Fortran 95 5.70b, 2002 г. (R =1613). Действительно, язык программирования Фортран продолжает динамично развиваться и уверенно лидирует в скорости вычислений.

Следом за компиляторами c Фортрана в вычислительных тестах идут компиляторы с языков С/С++. И здесь продукты от Intel — непревзойденные лидеры. Чемпионом в гонке С-компиляторов стал Intel С++ Compiler 6, 2002 г. для Linux (R =1885). Его собрат для Windows и преемники седьмой версии показывают немного худшие результаты, хотя отставание от лидера не превышает 3,3%. Следует отметить, что компиляторы Intel имеют мощные опции для распараллеливания программного кода, в частности циклических операций, а также использования SSE-инструкций. Именно активизация этих средств выводит компиляторы от Intel на первое место. К примеру, если сравнивать описанные выше результаты для шестой и седьмой версий Intel Compiler и предшественника — Intel Compiler версии 4.5, 2000 г., налицо резкий скачок производительности на 14% для теста на С и 52% — для Фортрана.

Второе место по вычислительной производительности среди С-компиляторов уверенно делят Microsoft Visual C++ 7, 2001 г. (R =972) и Borland Kylix 3, 2002 г. (R =955). Здесь интересно отметить, что если предыдущая шестая версия Microsoft Visual C++ показывает результат, очень близкий к седьмой (R =961), то первый продукт от Borland, позволяющий разрабатывать программы на С++ в Linux, оказался производительнее своего Windows-собрата Borland C++ Builder 6, 2002 г. (R =724) на 32%. Компиляторы С++ различных версий для Windows от Borland демонстрируют похожую производительность, отличающуюся в худшую сторону от рейтинга шестой версии не более чем на 6%, и занимают третье место в этой языковой группе. Завершает список претендентов на лидерство в данном тесте язык Pascal.

В числе различных систем программирования, реализующих этот язык, следует отметить Delphi 2, 1996 г. (R =1311) и Delphi 3, 1997 г. (R =1308) как среды, которые обеспечивают наиболее эффективный с точки зрения быстродействия результат компиляции. Использование последующих версий Delphi (от четвертой до седьмой — R =773) приводит к уменьшению быстродействия вычислительного теста приблизительно на 69% по отношению к Delphi 2/3. Близкие результаты к последним релизам Delphi показывает и Pascal версий Kylix 1—3, 2001—2002 г. (R =768), а также свободно распространяемый и существующий для различных ОС компилятор FreePascal 1.06, 2002 г. (R =727 — для Windows и R =691 — для Linux).

Наихудшие результаты продемонстрировал Microsoft Visual Basic 6, 1998 г. (R =28). Производительность откомпилированного в нем вычислительного теста в 24—86 раз меньшая, чем результаты других компиляторов.

С тестом эффективности адресации памяти (рис. 2) все исследованные компиляторы за исключением опять же Microsoft Visual Basic 6 (R =98) справились весьма успешно, показав примерно одинаковую производительность исполняемого кода. Наилучший (R =1189 — Kdevelop C++ 1.41, 2001 г.) и наихудший (R =959 — Absoft C++ 8.0, 2002 г.) рейтинги были получены для Linux. Таким образом, различие результатов для этого теста не превышает 24%. Выбрать лидера в этом тесте достаточно трудно ввиду высокой однородности результатов и разброса (около 7%) при повторных запусках. Отстающий же налицо — производительность теста адресации памяти, откомпилированного в Microsoft Visual Basic 6, составляет лишь 10,2% от самого худшего показателя. По этой причине было принято решение "снять с дистанции" Visual Basic в дальнейших испытаниях. Кроме того, для последующих тестов с целью большей наглядности результатов число компиляторов было уменьшено.

Сравнение эффективности статической и динамической моделей данных

Результаты сравнения работы вычислительного теста для этих двух моделей данных представлены на рис. 3 и 4. Как видно, высокоэффективные компиляторы Intel Fortran обеспечивают большую производительность коду, основанному на статической модели (до 20%), а вот Delphi, Kylix 3 (Pascal), Kdevelop лучше работают с динамическими переменными. В тесте адресации RAM практически все исследованные компиляторы за исключением FreePascal, Microsoft C++, Delphi 7 и Kylix также обеспечили бoльшую эффективность именно с использованием динамических переменных (до 5%). Вот уж действительно, результат, противоречащий расхожим представлениям о том, что динамические данные обрабатываются медленнее статических. Правда, в других задачах ситуация для любого из рассмотренных здесь компиляторов может измениться.


Сравнение эффективности тестов в разных ОС

В большинстве случаев использовались варианты тестов, основанные на статической модели данных. Лишь в тестах адресации памяти для компиляторов Intel C++ Compiler применены динамические переменные, что обусловлено желанием ответить на вопрос, сходны ли тенденции изменения производительности тестов в случае смены ОС при использовании статических и динамических переменных. Тесты запускались в различных ОС Windows на ядрах 9x (95 OSR2, 98 SE, Millennium) и NT (NT 4, 2000, XP), а также в нескольких версиях Linux (Mandrake-8, 9, Red Hat 7.x, 8.0, ASP 7.3). Была установлена хорошая повторяемость результатов для разных версий Windows в пределах одного и того же ядра. Кроме этого, отмечена нечувствительность тестов к релизу Linux. По данной причине окончательные результаты, представленные на рис. 5 и 6, получены c использованием Windows 2000, Windows Millennium и Linux Mandrake 9.0. Вычислительный тест, как это следует из рис. 5, не демонстрирует преимуществ ни одной ОС для всех исследуемых компиляторов за исключением Intel Fortran Compilers 6/7, которые обеспечивают тесту под Linux преимущество в 6% по сравнению с любой из ОС Windows. Тест эффективности адресации памяти показал, что если результаты для Windows NT и Linux примерно сопоставимы, то в случае Windows 9x для подавляющего большинства компиляторов имеет место систематическое снижение производительности вплоть до 20%. Этот результат свидетельствует о том, что механизмы работы с памятью у ОС Windows 9x в целом менее совершенны, чем у NT и Linux.


Сравнение продуктивности компиляторов на платформах Intel, AMD и VIA

Для данного теста использовались компьютеры с процессорами Pentium, K-6, K-7 и VIA C3. Процессорам Athlon компания AMD уже давно назначает некий рейтинг, являющийся мерой их интегральной производительности. Поэтому одной из наиболее существенных здесь является проблема унификации результатов. В данном исследовании производительность поставлена в соответствие реальной частоте, на которой работает процессор. Применительно к вычислительным задачам такой шаг имеет достаточно много оснований. Для проверки его рациональности были отобраны три компилятора — Compaq Visual Fortran 6.5, Microsoft Visual C++ 6 и Delphi 3. Подготовленные с их помощью вычислительные тесты запускались на различных процессорах нескольких поколений (от Pentium 166 MHz и К6-II 300 MHz до Pentium 4 3,06 GHz и Athlon 3200+). По результатам замеров строились зависимости рейтинга R от частоты процессора для каждого из использованных компиляторов (рис. 7). Как показано на рисунке, полученные зависимости имеют ряд линейных участков. Для процессоров Intel зависимости сохраняют линейность по мере наращивания частоты и смены ядер модельного ряда Pentium, Pentium II, Pentium III, то есть до 1400 MHz. Затем на графиках для каждого из процессоров наблюдается резкий скачок вниз, отражающий изменения в ядре Pentium 4, приведшие к упрощению FPU в сравнении с его предшественниками, после чего, начиная с частоты 1500 MHz и вплоть до 3,06 GHz, зависимости опять практически линейны. В случае процессоров VIA C3 опять имеем линейные зависимости во всем диапазоне их частот (700—933 MHz). Для CPU компании AMD начиная с 600 MHz (процессор AMD К7 с наименьшей частотой, который был доступен автору) и вплоть до 2250 MHz (максимальная частота процессоров Athlon) зависимости производительности вычислений от частоты практически строго линейны. Таким образом, можно заключить, что разработанный вычислительный тест хорошо подходит для оценки масштабируемости производительности FPU, и последняя является линейной функцией от частоты процессора, в том числе и для Athlon. Кроме того, рис. 7 свидетельствует, что Compaq Visual Fortran 6.5 извлекает максимум преимуществ в сравнении с Delphi 3 и Microsoft Visual C++ 6 из любой процессорной микроархитектуры. Compaq Visual Fortran 6.5 и Delphi 3 лучше адаптированы для процессоров Pentium—Pentium III в сравнении с AMD при одинаковых частотах, однако соревнование Athlon vs. Pentium 4 уже не будет в пользу последнего для этих сред программирования. С Microsoft Visual C++ 6 ситуация выглядит иначе. Эта среда программирования оказалась просто "заточена" под Athlon — во всем интервале рассмотренных частот показатели для процессоров AMD существенно выше, чем для процессоров Intel. А вот данные, полученные для процессора VIA C3, подтверждают давно уже известный факт — этот процессор плохо приспособлен для вычислений. Построенные для него графики располагаются (вне зависимости от компилятора) значительно ниже, чем для процессоров-конкурентов.


Заключение

Таким образом, каждая процессорная микроархитектура имеет свои сильные и слабые стороны. Грамотный выбор компилятора способствует реализации всей процессорной мощи каждой из существующих моделей. Полученные результаты позволяют обоснованно выбрать компилятор для задач, в которых быстродействие является одним из важнейших требований.

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

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

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

Сервис имеет достаточно простой интерфейс, но поддерживает много языков программирования, среди них Си, C++, D, Haskell, Lua, OCaml, PHP, Perl, Plain Text, Python, Ruby и Tcl. Интерфейс не интерактивный, вы набираете программу, затем она отправляется на сервер, компилируется и вы получаете результат выполнения.

2. remoteinterview.io

Это онлайн компиляторы Си и С++, ориентированные в первую очередь на разработчиков Си. Но, кроме этого, эта отличная IDE поддерживает еще более десятка языков программирования, а также возможность делиться своим кодом с друзьями.

Интерфейс выглядит красиво и современно. Вы можете выбрать светлую или темную тему для онлайн редактора. Также доступны различные сочетания клавиш, причем вы можете выбрать один из вариантов - горячие клавиши Sublime, Vim или Emacs. Особенно полезными среди всех поддерживаемых языков есть интерпретаторы PHP и Python. На домашнем компьютере вечно может не хватать какой-либо библиотеки, а здесь вы можете быстро проверить небольшой кусок кода ничего не устанавливая.

3. ComeauComputing.com

Это очень простой, но и достаточно настраиваемый онлайн компилятор для Си и C++. Поддерживаются только эти языки, но поддерживаются очень хорошо, здесь реализованы почти все возможности, которые есть в оригинальном Си. Кроме того, перед выполнением можно задать очень много настроек, таких как: платформа, версия Си, дополнительные функции и версия компилятора.

4. C++ Compiler Explorer

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

Компилятор gcc.godbolt.org использует компилятор C++ и выполняет преобразование кода C++, в машинный код, потому это очень удобный инструмент для экспериментов, отладки и обучения.

Иногда лучший способ понять часть кода, это увидеть как она выглядит на уровне железа. Синтаксис высоко двухуровневого языка не может сказать вам о программе все, слишком много моментов и тонкостей скрыто. Вы можете выбрать версию компилятора, с помощью которой хотите собирать программу, например, gcc-6, gcc-5 или clang, Сервис сразу находит ошибки в коде, а также вы можете выбрать стиль отображения машинного кода, например, синтаксис Intel или AT&T.

5. ideone

Ideone - это онлайн компилятор и инструмент отладки с поддержкой множества языков программирования. Поддерживается больше языков, чем в любом другом варианте, среди поддерживаемых C++, D, Javascript, Cofee Script, R, Rust, Scala, Node.js, Ruby, Python, Perl, Go и многие другие. Также здесь есть онлайн компиляторы java для разных версий. Всего поддерживается более 60 языков программирования и их модификаций. Вы можете писать код, проверять его на ошибки, компилировать и сразу же выполнять программу.

6. hackerearth

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

7. repl.it

Очень простой компилятор, сначала выберите нужный язык программирования на домашней странице, затем пишите код. Интерфейс редактора состоит из двух столбцов, первый - сам редактор, второй - консоль. Также в редакторе поддерживаются сочетания клавиш Vim и Emacs. Чтобы завершить набор кода и перейти к выполнению просто нажмите Ctrl+Enter. В редакторе есть подсветка синтаксиса и автодополенение, которое поможет вам программировать быстрее.

8. CompileOnline.com

Это одна из самых простых платформ для программирования в интернете. Здесь поддерживается много популярных языков программирования, а также есть удобный и простой интерфейс. Вы можете писать на таких языках, как C, C++, Fortran, Java, JavaScript, Python, Rerl и т д.

Кроме того, на сайте вы найдете некоторые учебные материалы по программированию, правда, на английском. Также для большинства языков есть по несколько примеров, например, есть программа hello world для C++, поэтому вам не нужно писать элементарные вещи.

9. onlinecompiler.net

Это последний сервис в нашем списке лучшие онлайн компиляторы, он может показаться немного сложным, но также достаточно функционален. Поддерживаются языки программирования C/C++, Fortran, Java, Pascal, Basic. Конечно, программы можно писать, компилировать и выполнять. Но ко всему прочему здесь есть библиотека программ других пользователей, в которой вы можете найти что-то полезное для себя, а также прочитать комментарии и обсуждения.

Выводы

В этой статье были рассмотрены лучшие онлайн компиляторы, которые вы можете использовать для программирования на большинстве из популярных языков. А вы пользуетесь такими сервисами? Какие сайты используете? Ваши любимые есть в списке? Напишите в комментариях!

Компилятор преобразует исходный код (файлов *.с, *.cpp) в работающую программу. Если у вас нет компилятора, необходимо его установить, прежде чем начать программировать. Есть много компиляторов, которые доступны в Интернете для скачивания. Если вы являетесь пользователем Mac OS X, Linux или других *nix систем (например, Unix или FreeBSD), вероятно, у вас уже установлены компиляторы, такие как GCC или G++.

Основные понятия

Компилятор — программа, транслирующая исходный (высокоуровневый) код программы в конечный (низкоуровневый) код.
Компиляция — процесс преобразования высокоуровневого исходного текста программы, в эквивалентный текст программы, но уже на низкоуровневом языке.
Компоновщик (Линкер) — программа, которая генерирует исполнимый модуль путём связывания объектных файлов проекта.
IDE (Интегрированная среда разработки) — сочетание текстового редактора и компилятора. Разработка, компиляция и запуск своих программы осуществляется непосредственно в IDE. Интегрированные среды разработки упрощают процесс составления программ, так как написание кода компиляция и запуск программ выполняются в одной программе — IDE. Ещё одной важной особенностью IDE является то, что IDE помогает быстро найти и исправить ошибки компиляции.

Понимание процессов компиляции

Процессы компиляции и компоновки — краткое описание того, что именно происходит, когда вы компилируете программу.
Ошибки компиляции , в некоторых строках компилятор находит ошибки, которые нужно ликвидировать.
Предупреждения компилятора — что такое предупреждения компилятора, как и почему их устраняют.
В чём разница между объявлениями и определениями в С/C++ . Узнайте разницу между объявлением и определением в Си/C++, и почему это так важно.

Выбор компиляторов (IDE)

Для ОС Windows:
Code::Blocks с Mingw — рекомендуемая нами, бесплатная IDE! Code::Blocks также доступна на Linux. Посмотреть, как установить эту IDE можно в нашей статье Установка Code::Blocks и MINGW.
Microsoft Visual C++ — читайте о Visual C++. Руководство по установке Microsoft Visual Studio 2012

Microsoft Visual C++ Toolkit 2003
Есть у Microsoft не только Windows, но и оптимизирующий компилятор бесплатный:-) Хотя он уже и достаточно "старый" (как видно из названия - 2003 год), но применение находит у достаточного большинства программистов. В то далекое время компания MS позволила себе раздавать лишь консольный вариант компилятора, в противовес текущей ситуации, когда можно пользоваться хоть и урезаной в функционале, но все же IDE - Microsoft Visual Studio Express. И если Студию вы всегда можете скачать с сайта компании, то вот Visual C++ Toolkit 2003 вы там не найдете - лишь на просторах интернета (например, ;-)). Посмотрим, что входит в состав пакета от 2003 года: это C/C++ компилятор и линкер (такой же, кстати, как был в Visual Studio 2003 Professional), библиотека стандартных шаблонов (STL) и.NET runtime - "джедайский" набор программиста под Windows:-).

Borland C++ Compiler 5.5
http://edn.embarcadero.com/article/20633
Ещё один "ветеран", способный одним названием внушить страх студенту-первокурснику;-). В "лихие 90-е", не особо привру если скажу, что компания Borland занимала лидирующее положение в создании средств разработки. В то время если и подразумевалась IDE, либо компилятор под ОС Windows, то ими чаще являлись продукты компании Borland. Позже, конечно, пальма первенства была утеряна и взошли новые "звезды" на небосводе разработчиков, но теплая память о фирме подарившей миру одну из качественных реализаций компилятора C++ еще долго будет греть сердца:-) (только не надо развивать очередного холи-вара;-)). Сейчас развитием линейки средств разработки занимается уже другая организация - Embarcadero Technologies , почитать о которой вы всегда можете на странице WiKi . Новые версии C++Builder они конечно же вам не дадут - только если за деньги:-), а вот последнюю версию компилятора, когда он еще принадлежал Borland, подарят безвозмездно - для этого нужно пройти по адресу: http://forms.embarcadero.com/forms/BCC32CompilerDownload где, заполнив анкету и указав реальный адрес e-mail, вы получите письмо с ссылкой для скачивания, либо, если у вас чертовски нет времени;-), вы можете скачать его сразу . В комплекте вы получите: сам компилятор, линкер, компилятор ресурсов, C++ Win32 препроцессор, утилиту для создания lib файлов из dll и другие "вкусности" для плодотворной работы на поприще создания программ под ОС семейства Win32.

Open Watcom
http://www.openwatcom.org/
Как гласит всё знающая Википедия : "Open Watcom — проект сообщества открытого кода по поддержке и развитию многоплатформных компиляторов Watcom C, C++ и Fortran и сопутствующих программ." На этом бы можно было и остановиться в описании, но ради экономии вашего времени стоит сразу отметить, что хоть этот компилятор и генерирует компактный и быстрый код, но на текущий момент он не поддерживает полностью стандарт C++, поэтому выбирая его для своей работы не удивляйтесь если вдруг чей-то код не станет у вас собираться;-). В отличии от всех представленных в данном обзоре компиляторов, Open Watcom заметно отличается наличием простого графического редактора, графического дебагера, редактора ресурсов и других утилит, по сути позволяя скачать пакет и тут же приступить к творчеству:-).

Digital Mars C++ Compiler
http://www.digitalmars.com/
Компилятор разрабатываемый одноименной компанией Digital Mars, известной своей разработкой нового языка программирования "D" (по замыслу автора, очевидно, должно было символизировать следующий шаг в развитии языков C/C++). Нашему вниманию на сайте разработчика предлагается либо купить полный набор программного обеспечения для написания программ на C/C++, который, помимо самого компилятора, содержит и графическую среду разработки совместно с дебагером, справку, различные библиотеки и т.д.; либо скачать совершенно бесплатно консольную версию компилятора - чем, собственно, он и заслужил наше внимание:-). Но особо не спешите радоваться создатели кросс-платформенных приложений - данный компилятор работает только в ОС Windows:-).

Это далеко не полный перечень известных компилятор для языков C/C++. Intel® C++ Compiler (для некоммерческого использования), AMD x86 Open64 Compiler Suite , Clang , Djgpp ... список еще можно продолжить дюжиной примеров, но суть останется одной - при выборе компилятора необходимо всесторонне подойти к анализу возможностей и условий применения, которые накладывает использование того или иного продукта - дабы в процессе разработки не попасть в щекотливую ситуацию:-).

Бесплатные интегрированные среды разработки (IDE)

Dev-C++
http://www.bloodshed.net/devcpp.html
Поддерживаемая система : Windows 95/98/NT/2000/XP
Поддерживаемые компиляторы : семейства GNU GCC (MinGW, Cygwin)

Если вы уже искали или только ищите бесплатную IDE под ОС семейства Windows для C++ то, я уверен на 100 %, хоть раз да услышали (услышите) про Dev-C++. Это весьма функциональная и компактная среда разработки может стать хорошим подспорьем как начинающему программисту, так и профессионалу. К сожалению, Dev-C++ уже давно не поддерживается - остановив свое развитие на версии 5 beta, а версия под Linux и того в стадии alpha - при этом, что бы получить ее необходимо приобрести CD версию ПО от Bloodshed (стоимостью от $28 до $49 в зависимости от уровня разработчика). Но не стоит из-за этого сразу сбрасывать эту IDE со счетов;-), а стоит обратиться к - развитию проекта Dev-C++ (который, помимо всей функциональности Dev-C++, содержит и дизайнер форм для кросс-платформенной библиотеки wxWidgets).
Итак, что мы получаем решив использовать Dev-C++:

Поддержка компилятора GCC

Интегрированная отладка (используется GDB)
- менеджер проекта
- настраиваемый редактор кода с подсветкой синтаксиса
- просмотрщик классов
- автозавершение кода
- список функций
- поддержка профилей
- быстрое создание Windows-приложений, консольных программ, статичных библиотек и DLL (шаблоны)
- поддержка шаблонов, позволяющих создавать свои собственные типы проектов
- создание makefile"а
- редактирование и компиляция файлов ресурсов
- менеджер инструментов
- поддержка печати
- средства поиска/замены (забавно было бы их не обнаружить:-))
- поддержка CVS
Ну что вы уже загорелись желанием заполучить эту "лапочку"? ;-) Тогда смело качайте Dev-C++ либо !

MinGW Developer Studio
http://koti.mbnet.fi/vaultec/mingwstudio.php

Поддерживаемая система: Windows 95/98/NT/2000/XP/Vista/7
Поддерживаемые компиляторы: MinGW

Еще один "старичок" :-) в полку IDE. Как видно из названия, работает с портированой версией GCC - MinGW, хотя в большинстве обзоров данную среду характеризуют как кросс-платформенную (к слову, на сайте текущей поддержки MinGW Developer Studio я так и не нашел ссылку на скачивание дистрибутива для ОС отличной от Windows). Честно скажу - сам не скачивал и не использовал в своей работе эту IDE, но группу пользователей она явно имеет:-). Если вы программировали на языке C++ в MS Visual Studio 6.0, то эта среда вам явно придется по душе, ибо автор MinGW Developer Studio при разработке интерфейса постарался повторить эту IDE от Microsoft. Существенным минусом является лишь то, что с 2005 года проект не разрабатывается, а с 2008 года даже перестал работать официальный сайт. Но мир не без добрых людей и, если вы все же заинтересованы в использовании MinGW Developer Studio, вы всегда можете скачать актуализированную версию с сайта VaulTec . Ничего нового, по сравнению с финальной официальной версией, конечно, там нет - гарантируется лишь работа с одной из последних версий MinGW.
Исходя из доступной информации, рассматриваемая среда разработки обладает следующими "плюшками":
- интерфейс, поддерживающий работу с несколькими документами
- подсветка синтаксиса
- управление проектом (надо думать "менеджер проекта" :-)) с настройками для debug и release сборок
- сворачивание кода
- интегрированая помощь
- поддержка отладки
- и еще много других;-) о которых авторы постеснялись рассказать

Code::Blocks
http://www.codeblocks.org/
Поддерживаемая система: Linux/Mac OS X/Windows
Поддерживаемые компиляторы: GCC(MinGW)/Digital Mars C/C++/Microsoft Visual C++ 6/Microsoft Visual C++ Toolkit 2003/Microsoft Visual C++ 2005/2008/Borland C++ 5.5/Watcom/Intel C++ compiler

Первая действительно кросс-платформенная среда разработки в этом обзоре. Хотя проект и достаточно молодой, но это не помешало стать ему популярным среди программистов, особенно разрабатывающих приложения одновременно для нескольких операционных систем. Создатели Code::Blocks пошли по пути открытой архитектуры, тем самым предоставив возможность сторонним разработчиками расширять возможности среды за счет собственных плагинов (на момент написания обзора таких насчитывалось более двух десятков). Об одном плагине стоит сказать отдельно - wxSmith, по сути являющимся wxWidgets RAD инструментом, позволяющим проектировать оконные формы и прочие визуальные объекты используя библиотеку wxWidgets (библиотека wxWidgets устанавливается отдельно). Многим, я думаю, придется по душе и наличие большого числа шаблонов создаваемого проекта - начиная от статичной библиотеки и заканчивая такими проектами как Qt4 и Ogre. Конечно, "матерые" программеры все это и сами могут написать, что не скажешь о новичках, только-только вставших на зыбкий путь программирования:-), для которых это будет хорошим подспорьем в начинаниях. Как гласит народная мудрость - "лучше один раз пощупать, чем сто раз услышать" ;-), поэтому, тем кто заинтересовался Code::Blocks милости просим на страницу загрузки , а тем, кто еще сомневается, еще пару положительных моментов (помимо уже указанных):
- подсветка кода (ну куда уж без нее:-))
- сворачивание кода C++ и XML
- автозавершение кода
- просмотрщик классов
- быстрая система сборки (не требуются make-файлы)
- поддержка параллельных сборок (удобно для многоядерных процессоров)
- импорт проектов MS VC
- импорт проектов Dev-C++

Поддержка дебагеров GNU GDB и MS CDB (правда реализована пока не вся функциональность MS CDB)
- и др.

Eclipse C/C++ Development Tools
http://www.eclipse.org/cdt/
Поддерживаемая система: AIX/FreeBSD/HP-UX/Linux/Mac OS X/OpenSolaris/Solaris/QNX/Windows
Поддерживаемые компиляторы: преимущественно основанные на GNU GCC

Одна из известнейших сред разработки, "краеугольный камень" которой заложила IBM. По сути, Eclipse C/C++ Development Tools (CDT), является плагином одной большой интегрированной среды разработки модульных кроссплатформенных приложений и имя ей - Eclipse. Т.о. Eclipse включает в себя набор плагинов позволяющих создавать приложения на Java, C/C++, PHP и др. Разработкой всей этой махины руководит Eclipse Foundation, бегло ознакомиться с которой вы можете, например, на сайте Википедии . Громкие имена компаний, стоящие за разработкой и развитием платформы Eclipse, позволяют с уверенностью говорить о функциональности и стабильности этой среды. Так CDT имеет в своем арсенале все то, что должна иметь современная IDE для C/C++:
- подсветка синтаксиса
- автозавершение кода
- сворачивание кода
- ссылочная навигация по коду (гипертекстовые ссылки)
- рефакторинг кода
- создание и управление проектами для различных инструментальных средств
- стандартная make сборка
- визуальные средтва отладки
- и многие другие
Добавьте к этому различные плагины расширяющие функциональность Eclipse C/C++ Development Tools и вы получите практически идеальную среду разработки:-). Почему практически идеальную? А потому, что разработана она на Java и, соответственно, требует установленную в системе виртуальную машину Java версии не ниже 1.5. Именно это, зачастую, становится решающим фактором для некоторых разработчиков, поскольку при слабой аппаратной части значительно увеличивает время как компиляции разрабатываемого приложения, так и реагирования самой среды на действия пользователя. Закачать же CDT вы всегда можете со страницы загрузки Eclipse .

NetBeans IDE
http://www.netbeans.org/
Поддерживаемая система: FreeBSD/Linux/Mac OS X/OpenSolaris/Solaris/Windows
Поддерживаемые компиляторы: GNU GCC

Как и рассмотренная уже Eclipse C/C++ Development Tools, среда разработки NetBeans написана на языке Java (соответственно так же требует установленной виртуальной машины Java). В общем приближении эти среды даже можно назвать похожими:-). В NetBeans так же реализована модель компонент (плагинов) позволяющих расширять базовый функционал как новыми возможностями, так и поддержкой новых языков программирования - Java, Ruby, C/C++, Groovy, PHP. Естественно, данная среда изначально ориентирована на разработку Java-приложений, но, тем не менее, можно скачать и отдельную сборку IDE поддерживающей написание приложений только на языке C/C++. Конечно же в NetBeans вы найдете все те возможности и инструменты, что доступны и в Eclipse C/C++ Development Tools поэтому выделять что-то отдельное нет смысла:-). Зачастую, сравнивая эти 2 IDE, основная масса разговоров сводится к теме какая из них быстрее работает, а не к обсуждению возможностей. Так что, если вы заинтересованны в среде разработки подобного типа, можете смело качать обе и тестировать какая вам придется более по душе:-).

Microsoft Visual Studio Express
http://www.microsoft.com/express/
Поддерживаемая система: Windows XP SP3/Vista/Server 2003/Server 2008/7
Поддерживаемые компиляторы: MS Visual C++ 2008/2010

Интенсивное развитие бесплатных средств разработки, особенно продуктов за которыми стоят такие титаны ИТ бизнеса как IBM, Oracle, Intel, AMD, очевидно вынудило пересмотреть политику Microsoft на свои продукты для разработчиков ПО. Так с 2005 года каждый желающий может скачать с сайта компании бесплатную версию популярной IDE - Visual Studio Express. Эта редакция Visual Studio представляет собой набор урезанных средств разработки для языков Visual Basic, C#, интересный нам C++ и Visual Web Developer Express и позиционируется Microsoft как IDE начального уровня для лиц не занимающихся профессионально программированием (учащихся, студентов, любителей etc.). Не переживайте - графический интерфейс и возможность создать оконные приложения вам дадут, а вот пользоваться наработками компании в области оптимизации и рефакторинга кода - практически нет. Так же вы не получите и, так всеми любимой в Visual Studio, возможности быстро устанавливать подключения к удаленным базам данных в дизайнере данных, как не получите и поддержки плагинов и компиляцию 64-битных приложений. Но это все не повод отказываться от Visual Studio Express, напротив тем, кто желает научиться программировать в среде Windows и для среды Windows, это будет полезная стартовая площадка, а подключив и MSDN - прекрасным справочным пособием по языку и API Windows.

Qt Creator
http://qt.nokia.com/products/developer-tools/
Поддерживаемая система: Linux/Mac OS X/Windows
Поддерживаемые компиляторы: GNU GCC

Последняя IDE в этом обзоре, но далеко не последняя в функциональных возможностях. В отличии от всех уже рассмотренных сред разработки, Qt Creator изначально разрабатывался и развивается как IDE для фреймворка Qt . Конечно, никто не отрицает возможности написания на нем стандартного консольного приложения, но согласитесь качать ради этого ~ 46 мб (а в установленном виде порядка 100 Мб) - не выглядит весьма рациональным решением;-). Поэтому сам так делаю, и всем рекомендую - рассматривать Qt Creator исключительно как среду разработки для кроссплатформенного фреймворка Qt. В этом отношении вы высоко оцените интеграцию IDE с дизайнером форм (Qt Designer) и справочной системой (Qt Assistant). Для начинающих осваивать Qt (и для ленивых мэтров:-)) разработчик, на сайте продукта , предлагает сразу скачать Qt SDK - набор всех необходимх программ для разработки приложений использующих Qt - библиотеку Qt, Qt Creator, компилятор MinGW (для Windows пользователей). Исходя из целевой направленности Qt Creator, можно выделить следующие его особенности:
- интеграция дизайнера форм Qt и справочной системы Qt
- расширяемость (посредством плагинов)
- поддержка дебагеров GDB (графический фронтенд) и CDB
- подсветка кода с поддержкой нескольких языков и разметок
И много других, напрямую не зависимые от Qt Creator"а, а реализуемые посредством Qt, например, возможность создавать приложения для мобильных телефонов под управлением операционной системы Symbian и Maemo.

На этой радостной, надеюсь, ноте я хотел бы закончить свой обзор:-). Чем пользоваться в своей работе каждый волен выбирать сам, либо ему диктуют корпоративные правила. Хочется верить, что кому-то этот очерк позволит так же определиться в своем выборе;-). Для меня, лично, это стала связка Code::Blocks + MinGW и, конечно же, Qt SDK.



Есть вопросы?

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам: