NOC online · 24/7Longview, TX · +1 323 412 0665
KinetikatechServers · Security · Websites
UK

Порівняння мов програмування

C проти C++: де лінія все ще важлива

C і C++ виглядають взаємозамінними на дошках оголошень і поводяться по-різному на практиці. C — це портативна транскрипція машини: крихітні середовища виконання, стабільні ABI і мова, якою розмовляє кожна ОС і ядро ​​інтерпретатора, оплачується вузькою стандартною бібліотекою та дисципліною пам’яті, яка повністю залежить від вас. C++ додає такі абстракції, як RAII, шаблони та STL, які дозволяють створювати великі системи без витоку скрізь, оплачуваного часом компіляції, помилками шаблону та розповсюдженням функцій. Рядок для зберігання: ядра, драйвери, вбудоване мікропрограмне забезпечення та межі бібліотеки залишаються C; програми, програмне забезпечення для настільних комп’ютерів та ігрові движки переходять на C++.

Головне

  1. Стандартна бібліотека C, яка підходить для всіх, не є прокляттям для вбудованих систем: інструментарій для нового мікроконтролера спочатку розмовляє C, часто виключно.
  2. C++ RAII замінює цілі класи помилок: деструктори в поєднанні з отриманням ресурсів перетворюють ручний вільний код у код лише для налаштування.
  3. Зберігайте межі ABI C: кожна динамічна бібліотека, підключена до мови сценаріїв, ядра чи розподіленого двійкового файлу, експортує C-подібний інтерфейс.
  4. Сучасний C++ (після 11) – це інша мова: розумні покажчики, семантика переміщення та STL відповідають на більшість скарг щодо «C із класами».
  5. Обидва мають спільну невизначену поведінку, і вона домінує в посмертних реальних системах набагато більше, ніж припускають дискусії щодо особливостей.
  6. Аромати, орієнтовані на безпеку, існують, оскільки сертифікація вимагає правил: MISRA C і AUTOSAR C++ є формою цього попиту, а не фольклору.
  7. Філософія Страуструпа полягає в тому, що «ви не платите за те, чим не користуєтеся»; перед відхиленням цієї претензії в будь-якому напрямку.
  8. Наймання чітко розподіляється: відділи 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: порівняння мов програмування

Чесно: більшість команд приходить до нас, попередньо спробувавши все самі: Мови для системної роботи, сценаріїв і послуг у порівнянні з тим, що насправді має значення у виробництві: гарантії безпеки, необроблена швидкість, кого ви можете найняти та наскільки болісними є розгортання та виправлення кінцевих служб. Служба Адміністрування серверів та Обслуговування сайтів існує, щоб не доводилося опановувати порівняння мов програмування гірким досвідом — налаштування, нагляд і нічні сюрпризи о третій беремо на себе.

Поговорити з інженером

Проблема із сервером? Зламаний сайт? Повільна сторінка?

Критичні інциденти — відповідь за 30 хвилин, цілодобово, 7 днів на тиждень.

Запросити екстрену підтримку support@kinetikatech.com