Порівняння мов програмування
C проти C++: де лінія все ще важлива
C і C++ виглядають взаємозамінними на дошках оголошень і поводяться по-різному на практиці. C — це портативна транскрипція машини: крихітні середовища виконання, стабільні ABI і мова, якою розмовляє кожна ОС і ядро інтерпретатора, оплачується вузькою стандартною бібліотекою та дисципліною пам’яті, яка повністю залежить від вас. C++ додає такі абстракції, як RAII, шаблони та STL, які дозволяють створювати великі системи без витоку скрізь, оплачуваного часом компіляції, помилками шаблону та розповсюдженням функцій. Рядок для зберігання: ядра, драйвери, вбудоване мікропрограмне забезпечення та межі бібліотеки залишаються C; програми, програмне забезпечення для настільних комп’ютерів та ігрові движки переходять на C++.
Головне
- Стандартна бібліотека C, яка підходить для всіх, не є прокляттям для вбудованих систем: інструментарій для нового мікроконтролера спочатку розмовляє C, часто виключно.
- C++ RAII замінює цілі класи помилок: деструктори в поєднанні з отриманням ресурсів перетворюють ручний вільний код у код лише для налаштування.
- Зберігайте межі ABI C: кожна динамічна бібліотека, підключена до мови сценаріїв, ядра чи розподіленого двійкового файлу, експортує C-подібний інтерфейс.
- Сучасний C++ (після 11) – це інша мова: розумні покажчики, семантика переміщення та STL відповідають на більшість скарг щодо «C із класами».
- Обидва мають спільну невизначену поведінку, і вона домінує в посмертних реальних системах набагато більше, ніж припускають дискусії щодо особливостей.
- Аромати, орієнтовані на безпеку, існують, оскільки сертифікація вимагає правил: MISRA C і AUTOSAR C++ є формою цього попиту, а не фольклору.
- Філософія Страуструпа полягає в тому, що «ви не платите за те, чим не користуєтеся»; перед відхиленням цієї претензії в будь-якому напрямку.
- Наймання чітко розподіляється: відділи C++ кластеризовані в фінансах, іграх і HPC; C столи у вбудованих, kernelspace та системних інструментах. Виберіть для своєї галузі.
Польова нотатка
Межа C/C++ у нашому магазині була встановлена бібліотекою, а не філософією: кожен плагін і розширення Python, які ми написали, спочатку експортували плоский C ABI, і це правило знищило десять рахунків страждань.
Часті запитання
Чи є C++ просто C із додатковими функціями?
Ні: C++ компілює більшу частину коду C, але це окрема мова з власною семантикою, а ідіоматичний C++ генерує інші машинні форми, ніж ідіоматичний C.
Чи повинен системний проект використовувати «C без класів» у C++?
Іноді; але якщо у вас є інструментарій C++, компілюйте на C і зберігайте межі чесними, а не робіть ставку на діалект, ані на тести спільноти.
Який має кращу історію безпеки пам’яті?
Жоден не постачається нативно, саме тому Rust отримує власне порівняння. Сучасний C++ пом’якшує за допомогою RAII і дезінфікуючих засобів; C покладається на дисципліну та інструменти (valgrind, UBSan).
Що справді вирішує між ними?
Екосистема, з якою ви повинні зв’язатися, і команда, яку ви можете найняти: вбудоване програмне забезпечення та код, суміжний з ядром, залишаються C; великі програми зі складними доменами переходять на C++.
Допомога Kinetikatech: порівняння мов програмування
Чесно: більшість команд приходить до нас, попередньо спробувавши все самі: Мови для системної роботи, сценаріїв і послуг у порівнянні з тим, що насправді має значення у виробництві: гарантії безпеки, необроблена швидкість, кого ви можете найняти та наскільки болісними є розгортання та виправлення кінцевих служб. Служба Адміністрування серверів та Обслуговування сайтів існує, щоб не доводилося опановувати порівняння мов програмування гірким досвідом — налаштування, нагляд і нічні сюрпризи о третій беремо на себе.