Язык программирования C++

Краткая справка

C++ создал Бьёрн Страуструп, который работал в одной компании с авторами языка Си, Ритчи и Томпсоном. Когда он занимался задачей моделирования телефонных вызовов, то обнаружил, что существующие языки плохо подходят для этого. Тогда он и решил использовать разработку своих знаменитых коллег, дополнив её классами. Первая версия так и называлась - “Си с классами”. В 1984 он написал первую версию программы cfont, которая транслировала код его языка в код простого Си. После этого популярность языка среди других коллег из Bell Labs резко выросла и Страуструп уже не смог поддерживать развитие языка в одиночку, отвечая на просьбы программистов добавить ту или иную функцию. В 1985 вышла первая полноценная версия, которая перестала быть просто дополнением Си. Она была названа С++ (в честь оператора инкремента, а ещё потому, что названия С+ и D нельзя было использовать ).

В 1985 году создатель языка выпустил книгу по своему языку, которая была официальным руководством до принятия стандартов ISO. Последней версией стандарта стал С++14.

Философия C++

Сам Страуструп изложил принципы, которым он следовал при создании С++, в книге “Дизайн и эволюция С++”. Их можно сформулировать следующим образом:

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

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

В-третьих, была добавлена поддержка ООП. Когда компьютеры стали доступны массовому потребителю и от программ стали требовать графический интерфейс, то польза от ОПП стала очевидной, что позволило С++ вырваться вперед.

Где применяется C++

  • Написание декстопных приложений.
    На плюсах написано столько известных программ, что устанешь их перечислять: Adobe Photoshop, 3Ds Max, различные браузеры (Chrome, Firefox и.т.д, хотя они написаны не только на C++), skype, плеер VLC, BitTorrent, Steam, архиватор WinRAR и.т.д;
  • Программирование игр.
    Так, например, большинство игровых движков написаны именно на плюсах - Source Engine от Valve (Half-Life 2 и CS), Unreal Engine (Borderlands, Deus Ex, Bioshock, Mirror's Edge, Mortal Kombat X и другие);
  • Драйвера, программа для работы с портами (низкоуровневое программирование);
  • Приложения, для которых важнее всего быстродействие (движки браузеров, аггрегаторы фондовых бирж, то есть трейдинг);
  • Софт для научных вычислений;
  • Написание частей проектов, требовательных к памяти и нагрузкам (остальное, включая интерфейсы и логику пишется на более простом языке).

Сложность обучения C++

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

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

Плюсы/минусы C++

Плюсы (их гораздо больше, чем два):

  • Довольно неплохая совместимость с Си;
  • Высокая производительность (скорость работы программ, но не их написание);
  • Кроссплатформенность (в основном, за счет Qt);
  • Многопоточность (была в языке с самого начала, начиная с диссертации Страуструпа);
  • Поддерживает разные парадигмы программирования (ООП, процедурное и.т.д);
  • Доступность литературы, документации (книги Страуструпа, Герберта Шилдта, справочники и документация);
  • Функциональное программирование (некоторые элементы ФП были добавлены ещё в C++11);
  • Бесплатность (опенсорс);
  • Универсальность.

Минусы:

  • Низкоуровневость, которую ещё называют “тяжелое наследие Си”;
  • При программировании могут встречаться свойства, характерные для низкоуровневого программирования, даже там, где они не нужны;
  • Малопримением для работы с Web (хотя веб-сервера Apache и Nginx написаны на С++);
  • Высокий порог вхождения;
  • Запутанный и громоздкий синтаксис. В С++ изначально было большое количество обязательных строк, а позже это количество стало ещё больше;
  • Для портируемости приложений нужно соблюдать требования стандарта, чтобы не возникло ошибок при работе с другим компилятором. Если программист пишет код небрежно ,то он может плохо работать на другой платформе (или не работать вообще);
  • Сложность нахождения ошибок. Если, например, для C# есть такие инструменты как ReSharper, которые ищет ошибки за вас, то в С++ для этого придется попотеть;
  • Не подходит для создания корпоративных приложений (для их разработки предпочитают Java или C#).

Сопутствующие технологии

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

Boost - расширение стандартной библиотеки плюсов. В неё включили всё то, что не вошло в стандарт ( а позже некоторые вещи из boost, наоборот, включили в стандарт языка). Недостатком этой библиотеки является её размер и сложность, однако, на самоме деле её использование в С++ проектах более чем оправданно.

Qt - фреймворк, который дает возможность создавать кроссплатформенные приложение на C++ и друих языках.

Wt - библиотека для С++, которая ориентирована на разработку приложений для веба.

NDK - пакет для разработки приложений под мобильные устройства на С++. Из преимуществ - работа с OpenGL, низкоуровневое программирование и использование кода написанного ранее на плюсах для андроида.