Какова роль C ++ сегодня?

41

В настоящее время я учусь на ИТ, и мне интересно, что еще важно в C ++ сегодня, для чего он используется? Я закончил базовый курс C ++ в моем университете, но я не представляю, где я могу использовать свои знания и в каком направлении мне следует изучать C ++.

Другими словами, что я должен научиться, чтобы стать успешным программистом C ++?

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

Аид
источник
2
Это моя точка зрения. C ++ очень полезен в реальном времени (и в видеоиграх). Я также использую C ++ для настольных приложений (не забывайте о Qt) по соображениям производительности.
hosomaki
1
@stign IMO вполне вероятно, что он в конечном итоге умрет, поскольку, скорее всего, наступит момент, когда все языки сегодня устареют (возможно, из-за массовых изменений в используемом оборудовании).
Кеннет
17
C ++ далеко не мертв (я пишу новый код в нем каждый день), и если COBOL - какой-либо признак, у меня будет работа много, много лет вперед.
Майкл Кохне
2
Взгляните на «Маяк языков программирования» и сделайте собственный вывод: lextrait.com/vincent/implementations.html
Неманья Трифунович,
1
Недавно я посмотрел несколько интересных видео на канале Microsoft 9 . Microsoft потратила миллионы на исследования рынка, и на основании своих исследований она говорит о возрождении C ++. Смотрите это видео .
Грокус

Ответы:

57

Особенностью убийцы C ++ является управление ресурсами с привязкой к области действия , SBRM (более известный как « RAII »). Это единственный промышленный язык программирования, который построен вокруг этой концепции. В C ++ время жизни всех объектов точно известно, и (хорошо написанные) программы на C ++ гарантируют, что ресурсы приобретаются и высвобождаются полностью детерминированным образом. Для сравнения, языки, собираемые мусором или иным образом управляемые, не предоставляют никаких таких гарантий; фактически объекты в этих языках могут сохраняться после окончания их жизни.

Именно поэтому C ++ используется в финансах, видеоиграх, высокопроизводительных встраиваемых системах и системах реального времени, транспорте, производстве и других отраслях, где важны детерминизм и точность. Нет альтернатив.

Конечно, он использовался для гораздо большего количества задач, чем этот, и эти задачи теряются для C # и Python и других более подходящих языков, но это не влияет на его основную нишу.

Cubbi
источник
20
Любой, кто использует malloc в C ++, хотел бы ударить по голове твердым предметом. Кроме того, существует менее известная особенность оператора newв C ++, называемая размещением. Это позволяет повторно использовать занимаемое в настоящее время пространство памяти. Поэтому, если кто-то хочет избежать (или минимизировать) фрагментацию, он может это сделать теоретически. И предсказуемый не такой же детерминированный.
Тамас Селей
4
@Apalala C ++ также имеет подсчет ссылок, но он намного хуже, чем SBRM, с точки зрения управления временем жизни объектов. Я говорю не только о жестком RT-детерминизме, я говорю о детерминированном поведении объектной модели.
Cubbi
4
Когда я изучал C ++, RAII не был особенно широко известен; Я изучил новые и удаления и управления указателями на основе мозга. Поэтому я не думаю, что вы можете охарактеризовать его как «построенный вокруг концепции». Библиотеки и другие поддерживающие структуры, которые используются сегодня, могут иметь, но не базовый язык или синтаксис.
jprete
7
@jprete Правда, что многие сильные стороны C ++ были открыты, а не спроектированы. Этот пост о языке после 2005 года.
Cubbi
5
RAII был разработан в C ++. Но большинство программистов на C ++ просто продолжают писать на C, заменяя malloc на new, а free на delete.
Кевин Клайн
40

Есть несколько рынков для C и C ++ (на мой взгляд, хотя и ограниченное)

  1. Существующий код C и C ++ имеют одни из самых больших существующих кодовых баз. Код такого размера не может быть просто выкинут только потому, что появился «новый горячий новый язык». Привязки к C в значительной степени являются стандартом межязыкового взаимодействия на большинстве платформ, поэтому полезно создавать (как минимум) библиотеки-оболочки для C или C ++.
  2. Высокопроизводительные приложения (например, высокочастотное финансирование). C и C ++ по-прежнему достигают лучшей общей производительности, чем большинство других языков программирования. Что наиболее важно в C ++, часто создаются абстракции с такими вещами только для компилятора, как шаблоны, которые перемещают вычисления от времени выполнения к времени компиляции (делая ваше приложение в целом быстрее).
  3. (Аналогично 2) Приложения с низкой задержкой. Языки, которые работают, например, на CLR или JVM, часто могут быть почти такими же быстрыми, как C ++, в зависимости от приложения, но все же необходимо загрузить сами CLR или JVM в память, прежде чем ваша программа сможет выполняться. Если у вас есть жесткие требования к запуску, это важно. РЕДАКТИРОВАТЬ ИЗ КОММЕНТАРИИ : В связи с этим, жесткие требования к задержке любого описания следует отметить здесь. Языки, которые работают на виртуальных машинах, редко предлагают жесткие ограничения по времени, потому что, например, запуск сборки мусора не является детерминированным процессом.
  4. Встроенные системы. Некоторые встраиваемые системы имеют аппаратное обеспечение для запуска, например JVM (Android от Google (хорошо, это не совсем JVM, но он близок), Blackberry от RIM) или CLR (Windows Phone), но большинство встроенных систем не имеют возможности запускать языки, которые требуют большей поддержки во время выполнения, чем требуется для C или C ++ (что практически не поддерживает время выполнения).
  5. Развертывание ограниченных приложений. Иногда требуется установить JVM или CLR, если ваша программа занимает всего несколько сотен КБ. (Например, большинство программ, над которыми я работаю, должны быть развернуты в виде одного .EXEфайла без какого-либо инсталлятора или чего-либо подобного; для этого нет альтернативы)
Билли ОНил
источник
2
Задержка запуска - не единственная задержка, с которой нужно иметь дело: жесткие требования в реальном времени могут быть гораздо более серьезными.
Greyfade
1
Добавьте все, что вы не хотите, чтобы вас связывали с конкретным производителем (C # или Objective-C) или вы не хотите, чтобы ваш язык исчезал в куче судебных процессов (Java)
Мартин Беккет
@greyfade: Это то, что я имел в виду (2), но я согласен, что это не ясно. Ред. @ Мартин: Хотя я думаю, что это хорошая сила для C ++, я не думаю, что он отвечает на вопрос - на каких рынках обычно используется C ++. Также не думаю, что я бы назвал C # заблокированным для конкретного производителя, когда существует лицензионная версия CLR <S> BSD </ S> (OOPS: Это LGPL) (моно).
Билли Онил
1
Также 5. Операционные системы и базовые рамки. Вы можете многое сделать на виртуальной машине, но виртуальная машина все еще должна быть реализована на C и / или C ++.
Ян Худек
1
@ Ян: Да, это будет. Такие вещи, как рефлексия и друзья, могут вызвать проблемы 2-4. Единственное подмножество, которое вам действительно нужно было бы написать для сборщика мусора, это какой-то объект, представляющий физическую память.
Билли ONEAL
3

C ++ все еще очень полезен и ни в коем случае не мертв. Если вы хотите прочитать серьезное сравнение между несколькими разными языками программирования, посмотрите статью Эмпирическое сравнение C, C ++, Java, Perl, Python, Rexx и Tcl . Это не самое актуальное, но я верю, что большинство вещей все еще остается в силе.

sakisk
источник