﻿# C\+\+ в современном мире

Дискуссии о текущем положении C\+\+ в мире программирования, как правило, делят участников на два фронта: одни этот язык недолюбливают, пророча ему скорую гибель; другие же наоборот утверждают, что на C\+\+ писали, пишут и будут писать\. Я бы сказал, что истина находится где\-то посередине, но это означало бы, что C\+\+ находится в неком "подвешенном" состоянии, в котором он был, например, между выходами стандартов C\+\+03 и C\+\+11\. На самом деле всё обстоит немного иначе\. Как? Давайте попробуем в этом разобраться\.

![0329_CppPopularity_ru/image1.png](https://import.viva64.com/docx/blog/0329_CppPopularity_ru/image1.png)

## Идём ко дну?

![0329_CppPopularity_ru/image2.png](https://import.viva64.com/docx/blog/0329_CppPopularity_ru/image2.png)

Ничего подобного\. Может быть C\+\+ не настолько популярен в плане изучения начинающими программистами, как C\# или Java, может быть под него не затачиваются новые технологии, выпускаемые корпорациями\-гигантами, может быть он не продвигается теми же Microsoft и Oracle, но сказать, что C\+\+ пошёл на дно \- значит нагло соврать\. Программное обеспечение, написанное с использованием C\+\+, никуда не делось и требует поддержки\. Новое ПО, например, игровые движки, также вовсю использует C\+\+, а стандарты C\+\+11, C\+\+14 и готовящийся C\+\+17 только подтверждают, что дела у этого языка программирования идут неплохо\. Но давайте обо всё по порядку\.

## C\+\+11, C\+\+14, C\+\+17\.\.\.

![0329_CppPopularity_ru/image3.png](https://import.viva64.com/docx/blog/0329_CppPopularity_ru/image3.png)

Как упоминалось ранее, между стандартами C\+\+11 и C\+\+03 язык находился в своеобразном "подвешенном" состоянии\. Вроде бы развивались и дополнялась такие библиотеки, как boost, Qt и прочие, появился C\+\+/CLI, а нового официального стандарта всё не было и не было\.

Так продолжалось достаточно долго, да и стандарт [C\+\+11](https://ru.wikipedia.org/wiki/C%2B%2B11), планировавшийся к публикации в 2009 году, вышел только двумя годами позже\. Но тем не менее вышел\. И не просто вышел, а принёс собой множество дополнений, расширений и "синтаксического сахара"\. Писать с использованием нового стандарта стало проще и удобнее, в стандартную библиотеку было добавлено множество средств, облегчающих программистам жизнь\. Была введена официальная поддержка параллельного программирования, что немаловажно, списки инициализации, призванные сделать код понятнее, лямбда\-функции, наверняка нашедшие своих любителей\.\.\. И это, конечно не всё, но статья немного об ином \- перечислять все нововведения здесь смысла нет\.

Отлично, стандарт C\+\+11 вышел, а что дальше? Опять простой на 8 лет? А вот и нет\. Ни для кого не новость, что уже вышел стандарт [C\+\+14](https://ru.wikipedia.org/wiki/C%2B%2B14)\. Нет, о таком расширении, какое привнёс C\+\+11, и речи не идёт, но дополнения и улучшения имеют место быть\.

Но что не менее важно \- тенденция не потеряна и на горизонте уже виднеются заготовки для нового стандарта \- C\+\+17\.

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

А что же со старым ПО?

## Существующее программное обеспечение

С использованием C\+\+ написано множество программного обеспечения\. И, конечно, его необходимо поддерживать\.  Хотите взглянуть на реальные примеры? Пожалуйста, [соответствующий список](https://www.stroustrup.com/applications.html) в помощь\. Наверняка вы найдёте там немало знакомых продуктов\. Не думаю, что кто\-то кинется переписывать существующий работающий С\+\+ код на C\# или Java, только потому, что так будет удобнее в дальнейшем, потому, что "сборщики мусора" и т\.д\. и т\.п\. Выходит, что знания C\+\+ снова необходимы\.  А с учётом того, что C\+\+ стал намного удобнее в работе с выходом новых стандартов, идея писать модули/дополнения на современном C\+\+ имеет место быть и не выглядит безумной\. В дальнейшем такой код будет куда проще поддерживать\. В то же время это всё тот же производительный C\+\+, с обширнейшим набором возможностей\. А дополненная стандартная библиотека позволит использовать уже готовые решения без необходимости изобретения велосипедов\.

## Популярность среди начинающих

![0329_CppPopularity_ru/image4.png](https://import.viva64.com/docx/blog/0329_CppPopularity_ru/image4.png)

На этом фронте дела идут не слишком гладко: С\+\+ не слишком популярный язык среди начинающих программистов и существенно проигрывает таким языкам, как C\# или Java\. Почему? Тут можно выделить несколько причин:

### Высокий порог вхождения

![0329_CppPopularity_ru/image5.png](https://import.viva64.com/docx/blog/0329_CppPopularity_ru/image5.png)

Наверное, нет такого программиста, который бы не слышал о сложности С\+\+\. Безусловно, язык обширен, нюансов \- несчётное множество\. Но что мы получаем взамен? Производительность \+ глубинный контроль происходящих процессов \(особенно если несколько спуститься с C\+\+ к чистому C\)\. Тут опять же следует упомянуть про стандарт C\+\+11, который более приветлив к новичкам, предлагая удобный синтаксис, различного рода контейнеры, алгоритмы и прочие удобные вещи, предназначенные облегчить жизнь и написание кода\.

Тем не менее, хоть вероятность этого весьма снижена, прострелить себе ногу при желании всё же можно\.

### Слабое продвижение

Думаю, ни для кого не секрет, как продвигаются такие языки как C\# или Java корпорациями\-владельцами: Microsoft и Oracle\. Не буду наверняка говорить про Java, так как с тенденциями на этом фронте не слишком знаком, но вот со стороны Microsoft продвижения весьма заметно\. Большинство технологий Microsoft затачиваются именно под C\#\. Хакатоны, проводимые Microsoft, опять же проходят с использованием C\#\. Нет, это не плохо, просто констатация факта\.

Для C\+\+ такой поддержки нет\. Да, для него выпускаются различные инструменты, позволяющие облегчить работу  и процесс создания приложений\. Тут стоит вспомнить тот же [Qt](https://www.qt.io/), недавно вышедший [ReSharper  C\+\+](https://www.jetbrains.com/resharper-cpp/) от JetBrains\. В [Visual Studio 2015](https://visualstudio.microsoft.com/downloads/) ввели поддержку некоторых нововведений из последних стандартов, плюс некоторые дополнительные функции \- работать стало удобнее\.

Но с масштабом вышеупомянутых продвижений это всё же в сравнение не идёт\.

### Специализация

Несмотря на то, что C\+\+  \- язык, дающий разработчику, как говорится, все карты в руки, область его применения не всеобъемлюща и занимает определённую нишу\. Конкуренты есть, это тоже оказывает свое влияние\. Взять, например, мобильную разработку\. Основные платформы заняты теми или иными языками: Windows Phone \- C\#, Android \- Java, iOS \- Objective\-C\. И это вовсе не означает, что под эти платформы нет возможности писать на C\+\+,  вопрос лишь в том, насколько это будет удобно и будет ли также эффективно\. Для веба, разработка под который с каждым годом становится популярнее и популярнее, C\+\+ тоже не очень подходит\. Возможность работы с сокетами есть, библиотеки, наподобие Wt, есть\. Но вы много слышали о веб\-приложениях, работающих на С\+\+? Вот и я нет\. С учётом того, что мобильная и веб\-разработка стали очень популярны и только набирают обороты, понятен выбор начинающих в пользу других языков\.

## TIOBE Index

Слова словами, но, как говорится, лучше 1 раз увидеть, чем 100 раз услышать\.

Так что предлагаю взглянуть на текущее положение дел\. Довольно популярным в этом плане является индекс [TIOBE](https://www.tiobe.com/tiobe-index/), отражающий рейтинги языка, его изменение в рейтинговой таблице и прочие показатели\.

![0329_CppPopularity_ru/image6.png](https://import.viva64.com/docx/blog/0329_CppPopularity_ru/image6.png)

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

## Заключение

![0329_CppPopularity_ru/image7.png](https://import.viva64.com/docx/blog/0329_CppPopularity_ru/image7.png)

Думаю, что вы уже сформировали мнение о текущем положении C\+\+ в современном мире\. Позвольте и мне высказать своё\. 

Кричать о том, что C\+\+ живее всех живых нельзя, так как это было бы ложью\. Говорить про то, что C\+\+ умирает также нельзя, так как это ещё большая ложь\.С\+\+ жив и занимает свою определённую нишу\. Выходящие стандарты добавляют новшеств в язык, делая его удобнее и проще в обращении\. Программное обеспечение, написанное на этом языке, также никуда не делось и требует поддержки\. В определённых областях C\+\+ как нельзя лучше подходит для написания программного обеспечения, а это, в совокупности с вышеописанным, означает одно \- C\+\+ актуален, развивается и сдавать позиции не намерен\.