Краткая справка
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, низкоуровневое программирование и использование кода написанного ранее на плюсах для андроида.