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

Сравнение языков программирования

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++ работают в сфере финансов, игр и высокопроизводительных вычислений; Столы C во встроенных инструментах, пространстве ядра и системных инструментах. Выбирайте для своей отрасли.

Заметка из практики

Граница C/C++ в нашем магазине была установлена ​​библиотекой, а не философией: каждая граница плагина и расширение Python, которые мы написали, сначала экспортировали плоский C ABI, и это правило устранило десять счетов страданий.

Частые вопросы

Является ли C++ просто C с дополнительными функциями?

Нет: C++ компилирует большую часть кода C, но это отдельный язык со своей семантикой, и идиоматический C++ генерирует другие машинные формы, чем идиоматический C.

Должен ли системный проект использовать «C, без классов» внутри C++?

Иногда; но если у вас есть набор инструментов C++, скомпилируйте его на C и соблюдайте честность границ, а не делайте ставку на диалект и не тестируйте сообщество.

Какая история с безопасностью памяти лучше?

Ни один из них не поставляется изначально, и именно поэтому Rust получает свое собственное сравнение. Современный C++ смягчает ситуацию с помощью RAII и дезинфицирующих средств; C полагается на дисциплину и инструменты (valgrind, UBSan).

Что на самом деле решает между ними?

Экосистема, к которой вы должны подключиться, и команда, которую вы можете нанять: прошивка и код, связанный с ядром, остаются C; большие приложения со сложной предметной областью работают на C++.

Как мы берём на себя сравнение языков программирования

Это то, чем мы занимаемся каждый день: Языки для работы системы, сценариев и сервисов, сравниваемые по тому, что действительно важно в производстве: гарантии безопасности, чистая скорость, кого вы можете нанять, и насколько болезненно развертывать и исправлять полученные сервисы. Наша услуга Администрирование серверов и Обслуживание сайтов закрывает задачу целиком — оценка, внедрение, круглосуточный мониторинг и экстренная реакция в течение 30 минут.

Поговорить с инженером

Проблема с сервером? Взломанный сайт? Медленная страница?

Критические инциденты с ответом в течение 30 минут — круглосуточно, 7 дней в неделю.

Запросить экстренную поддержку support@kinetikatech.com