Скука и рутина это зло

run{}

Есть ли случаи, когда Си лучше C++?

Вопрос с таким заголовком запостил один парень на хэшкоде.

Здравствуйте. Вопрос из заголовка переписывать не буду.

Интересуют реальные примеры, т.е. не те, когда компилятора C++ под какую-то платформу нет. Различия, в несколько процентов, в производительности, несущественны.

Навеяно “мини-наездом” на C++ на Хабре

UPD: Кроме варианта, что C знаем лучше.

В качестве ответа я накатал небольшую простыню, которая мне самому настолько понравилась, что решил что стоит её продублировать здесь.

Всем привет, расскажу почему я считаю что Си лучше C++. И почему надмножество над другим языком это не всегда хорошо.

C++ FQA

больше драмы

Язык программирования всегда имеет набор фич. Замечено, что чем меньше фич и чем больше соблюдается ортогональность, тем гибче и выразительнее сам язык, тем легче понимать код.

Возьмём к примеру Си: функции, структуры, указатели, макросы. По-большому счёту это всё, примитивные типы можно считать примером структуры из одного элемента. Довольно быстро привыкаешь и понимаешь как каждая из этих фич взаимодействует между собой:

  • функции, указатели: указатели на функции, функция принимающая указатели
  • функции, структуры, указатели: структуры содержащие указатели на функции

Макросы никак не взаимодействуют с другими, это просто препроцессор, поэтому тут всё понятно.

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

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

Где есть неортогональные пары, которые очень похожи, частично дублируют своё назначение, из-за этого иногда может быть непонятно где какую из двух использовать, код где сталкиваются две фичи может выглядеть криво или быть труднопонятным:

  • указатели и ссылки
  • структуры и классы
  • макросы и шаблоны
  • функции и методы

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

Может быть кто-то скажет: “Ну и фиг что сложный! Я умный, я осилю, я смогу управлять этой мощью!”, может и действительно осилит. Я бы избегал любых лишних мысленных телодвижений.

Си легче понимать и это серьёзное преимущество, в реальной жизни время и силы ограничены, если конечно их не тратить на троллинг на форумах, прихлебывая мамкин борщ.

Такие дела.

PS: Линус на словцо горяч и не так вежлив как я, и если не читали, то это стоит прочесть.

Comments