Языка С-C++ не существует

в 16:36, , рубрики: C, c++, декларативное программирование, императивное программирование, найм разработчиков, Программирование, С++

Каждый день, везде, в том числе в технических статьях, появляется мифический С/С++, честно говоря я просто устал это видеть и хочу в этой короткой статье донести простейшую мысль - С и С++ это два совершенно разных языка с разными требованиями и подходами к разработке.

  1. Языки несовместимы и уже давно. Они развиваются параллельно(хотя про развитие стандарта С не знает ничего даже гугл, но он есть, добавили дженерики и хотят лямбды...)

  2. Громадная часть С кода хоть и компилируется в С++, но является undefined behavior. В первую очередь из-за того, что все типы в С являются тупым набором байт и никакая эмуляция полиморфизма здесь не поможет. Язык позволяет относится со всем как с байтами, тогда как в С++ все типы это объекты инкапсулирующие свою логику через конструкторы и деструкторы, есть понятие лайфтайма, относится как к байтам можно только к тривиально копируемым объектам и то не всегда и не везде, только в С++20 валидно было бы реинтерпретировать байты как int, а в С коде это происходит повсеместно.

    Согласно стандарту С++ программа с undefined behavior не является программой на С++, а значит как только вы скомпилировали сишный файлик скорее всего ваша программа перестала быть С++ кодом.

  3. Самое главное - языки требуют абсолютно разных умений и подходов к разработке.

С - фактически императивный язык структурного программирования(да и с этим можно поспорить из-за обилия goto в некоторых проектах). Он не предполагает никакой декларативности, полиморфизма, инкапсуляции, иммутабельности и прочих модных слов. Его сфера использования это места, где нет С++ компилятора(глубокий наколеночный эмбед)

Современный С++ в свою очередь это во многом декларативный и функциональный - шаблоны, алгоритмы, итераторы и ренжи, RAII - язык с элементами ООП в виде инкапсуляции логики в объекты(типа вектора) или наследования для реализации чего-то(но почти никогда не так, чтобы пользователь абстракции знал что она реализована через наследование). Писать что-то в императивном стиле в современном С++ просто странно.

Эти подходы(декларативный и императивный) фактически противоположны, поэтому разработчик на С++ будет с трудом писать на С, а разработчик на С, как показывает практика, вообще не сможет писать в стиле С++

И это не абстрактные рассуждения в вакууме, если компания ищет С/С++ разработчиков, то она не знает, чего хочет и найдёт посредственных специалистов или команду абсолютно несовместимых людей, у которых не получится вместе что-то разрабатывать.

Давайте уже одумаемся.

Автор:
Kelbon

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js