Яка роль C ++ сьогодні?


41

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

Іншими словами, що мені слід навчитися стати успішним програмістом на C ++?

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


2
Це моя точка зору. C ++ дуже корисний у реальному часі (та відеоіграх). Я також використовую C ++ для настільних програм (не забувайте про Qt) з міркувань продуктивності.
хосомаки

1
@stign IMO, ймовірно, він з часом загине, оскільки, швидше за все, настане час, коли всі мови сьогодні застаріли (можливо, через масові зміни обладнання, яке використовується).
Кеннет

17
C ++ далеко не мертвий (я пишу новий код у ньому щодня), і якщо COBOL є будь-якими показаннями, я буду працювати ще багато-багато років.
Майкл Коне

2
Погляньте на маяк програмних мов і зробіть власний висновок: lex Portrait.com/vincent/implementations.html
Nemanja Trifunovic

1
Нещодавно я переглянув кілька цікавих відео на каналі Microsoft 9 . Майкрософт витратив мільйони на дослідження ринку, і на основі його досліджень йдеться про ренесанс C ++. Дивіться це відео .
grokus

Відповіді:


57

Особливістю вбивці C ++ є управління ресурсами , пов'язане з обсягами, SBRM (більш відомий як " RAII "). Це єдина промислова мова програмування, яка побудована навколо цієї концепції. У C ++ терміни життя всіх об'єктів точно відомі, а (добре написані) програми C ++ гарантують, що ресурси будуть придбані та звільнені повністю детерміновано. Для порівняння, мови, зібрані сміттям чи якимись іншими способами управління, не дають таких гарантій; насправді об’єкти на цих мовах можуть зберігатися після закінчення терміну їх експлуатації.

Саме тому C ++ використовується у фінансах, відеоіграх, високоефективних вбудованих системах та системах реального часу, транспорті, виробництві та інших галузях, де важливість детермінізму та точності є важливою. Альтернативи немає.

Зрозуміло, він використовувався для набагато більше завдань, ніж це, і ці завдання втрачаються на C # і Python та інших більш підходящих мовах, але це не зачіпає його основної ніші.


20
Кожен, хто використовує malloc в C ++, я хотів би вдарити по голові твердим предметом. Крім того, є менш відома особливість оператора newв C ++, що називається розміщенням. Це дозволяє повторно використовувати зайнятий в даний час простір пам'яті. Тож якщо хтось хотів уникнути (або мінімізувати) фрагментацію, він, теоретично, може це зробити. І передбачуваний не такий же детермінований.
Tamás Szelei

4
@Apalala C ++ теж має підрахунок посилань, але це набагато гірше, ніж SBRM з точки зору управління життєвим ресурсом об'єкта. Я не просто кажу про жорсткий RT детермінізм, я кажу про детерміновану поведінку об'єктної моделі.
Cubbi

4
Коли я дізнався C ++, RAII не був відомий широко; Я дізнався нове та видалення та керування вказівниками на основі мозку. Тому я не думаю, що ви можете охарактеризувати це як "побудовану навколо концепції". Бібліотеки та інші структури підтримки, які використовуються сьогодні, можуть мати, але не основну мову чи синтаксис.
jprete

7
@jprete Щоправда, багато з сильних сторін C ++ були виявлені, а не розроблені. Це повідомлення про мову після 2005 року.
Cubbi

5
RAII був розроблений в C ++. Але більшість програмістів на C ++ просто продовжують писати C, замінюючи malloc новим та вільним із видаленням.
Кевін Клайн

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, але це близько), RIM's Blackberry) або CLR (Windows Phone), але більшість вбудованих систем не мають сили запустіть мови, для яких потрібна більша підтримка часу виконання, ніж потрібна для C або C ++ (що поруч із підтримкою часу виконання зовсім не підтримується).
  5. Програми з обмеженим розміщенням. Іноді вимагає встановлення JVM або CLR - це надмірна надмірна кількість, якщо вся ваша програма становить лише кілька сотень КБ. (Наприклад, більшість програм, над якими я працюю, повинні бути розгорнуті як єдиний .EXEфайл без будь-якого інсталятора чи чогось подібного; для цього альтернативи немає)

2
Затримка запуску - не єдиний вид затримки, про який слід занепокоєти: жорсткі вимоги в режимі реального часу можуть бути набагато більшими порушеннями.
greyfade

1
Додайте будь-що, де ви не хочете, щоб вас зафіксували в конкретному виробнику (C # або Objective-C) або не хочете, щоб ваша мова зникала в купі позовів (Java)
Мартін Бекетт

@greyfade: Це те, що я мав на увазі під словом (2), але я згоден, що це не ясно. Відредаговано. @Martin: Хоча я думаю, що це хороша сила для C ++, я не думаю, що це відповідає на питання - у яких ринках зазвичай використовується C ++. Крім того, я не думаю, що я б закликав C # заблокований до конкретного виробника, коли існує ліцензована версія CLS <S> BSD </S> (OOPS: це LGPL) (моно).
Біллі ONeal

1
Також 5. Операційні системи та основні рамки. Можна багато зробити у віртуальній машині, але віртуальна машина все ж має бути реалізована в C та / або C ++.
Ян Худек

1
@Jan: Так. Такі речі, як роздуми та друзі, спричинили б проблеми 2-4. Єдиним підмножиною, яке вам дійсно потрібно було б написати сміттєзбірником, був би якийсь об'єкт, який представляє фізичну пам'ять.
Біллі ONeal

3

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.