Подпишитесь на интересующие вас теги, чтобы следить за новыми постами и быть в курсе событий.
Почему Линус Торвальдс ненавидит C++
Линус Торвальдс признается, что ненавидит C++, а программистов на этом языке он оскорбляет. Разбираемся, в чем заключается причина ненависти.
19892
В 2007 году пользователь Дмитрий Какурин написал письмо Линусу Торвальдсу, в котором спросил программиста, почему тот использует чистый Си вместо того, чтобы написать все на C++. Само использование чистого Си Дмитрий Какурин назвал емким словом bullshit.
В ответ Линус Торвальдс поделился своим мнением: bullshit — это сам Какурин, C++ — это ужасный язык, на котором кодеры генерируют, мягко говоря, «нечистоты», а программистов C++ вовсе не стоит допускать до Linux.
После откровенных оскорблений Торвальдс перешел к аргументам.
Позиция Линуса Торвальдса относительно C++
В первую очередь, Линус говорит, что использование C++ неизменно приводит программиста к плохим решениям вроде использования библиотек STL или Boost, которые считаются прекрасными.
Однако на деле, по мнению Линуса, они постоянно ломаются, отладка кода становится испытанием, а сам код нестабильный и не портируемый.
Также Торвальдс заявил, что код на C++ построен на абстракциях, которые не работают как следует. Программист может легко обнаружить, что использованная им абстракция неэффективна, и захочет заменить ее, но для этого ему потребуется переписать все приложение.
Если же программист захочет написать хорошее, эффективное и портируемое приложение на C++, он будет ограничен рамками, которые уже хорошо реализованы на языке Си.
Кроме того, использование Си страхует программистов от ошибок, и они не смогут «облажаться» на проекте, а сам язык учит кодеров разбираться в низкоуровневых проблемах. По версии Торвальдса, сплошные плюсы.
Линус признался, что в 1992 году они уже пытались использовать C++ для написания Linux. С тех пор, по его мнению, мало что изменилось.

Компиляторы C++ все так же не вызывают доверия, а обработка исключений в них вообще не работает.
Еще C++ скрывает потребление ресурсов, поэтому использовать его для написания ОС Линус считает невероятно глупой затеей. Зато объектно-ориентированный код можно написать на С без всяких проблем.
Позиция защиты C++
Линус думает, что ненавидит C++. Но, судя по его комментариям, он вообще не знает C++, а то, что он знает, давно устарело.
Ранние компиляторы C++ были довольно глючными. Они были не намного хуже, чем компиляторы C, но ошибки в них были разными. При этом компилятор C, который он использовал (gcc), тщательно тестировался на ядре Linux, поэтому он почти никогда не видел в нем ошибок. Зато в компиляторе C++ эти ошибки он мог найти с легкостью.
C++ был первым популярным объектно-ориентированным языком, а его ранние версии C++ были написаны на Smalltalk со странным синтаксисом. Поэтому ранний C++ работал плохо, и особенно плохо он работал в ядре Linux.
Похоже, что Линус сделал поспешные выводы, основанные на минимальном анализе. Когда он увидел, что C++ работает не так, как он ожидал, он просто отмахнулся от него, вместо того, чтобы изучить. К примеру, в C NULL может быть типобезопасным, а в C++ для этого нужно использовать nullptr, а не NULL.
С тем же успехом Линус Торвальдс мог бы заявить, что ненавидит язык суахили, потому что он его не знает.
Заключение
В целом, Линус Торвальдс прав, и для ядра Linux действительно лучше подойдет низкоуровневый язык Си, а не C++. Но в остальном вся его ненависть сводится к тому, что он попробовал использовать C++ практически на старте языка, и тот ему не понравился.
Кроме того, стоит помнить, что Линус говорит о C++ в контексте использования языка для написания ядра операционной системы. Этой же позиции придерживаются и другие авторы ОС. Ядра Windows, Linux, iOS, MacOS, FreeBSD написаны на языке Си.
А что о C++ думаете вы? Справедливы ли нападки Торвальдса?
19892
Что думаете?
51 комментарий
Сначала интересные
Ты хочешь сказать что чел который написал ядро Linux глупый человек? Твоя статья брет, если бы плюсы были классным языком на нем бы писались ядра, но из десятков существующих ядер абсолютно все написаны на чистом Си.
Причина проста - в моменте компиляции С++ создаёт кучу абстракций, оптимизирует код по своему вкусу, в этом проблема.
Ты используешь мапу для хранения каких либо значений, а компилятор может увидеть в этом коде возможность для "оптимизации", и на выходе перепишет твой код как если бы ты использовал массив. Нормально ли это? - ну с точки зрения оптимизации возможно да, но когда ты пишешь ядро - такое поведение недопустимо.
Evgeny Grishankov, Не хочу сказать про Торвальдса ничего плохого, но артачиться тем, что он автор Линукса и отождествлять это с некой гениальностью я бы не стал: основная заслуга Линуса не в написании кода, тем более, что его кода уже почти и нет, он больше ревьювер и пээм проекта... его же заслуга в том, что он сделал свою ОС открытой и свободной и Линукс стал первой такой операционной. И именно поэтому проект выстрелил, хотя авторитеты того времени сильно критиковали именно технические подходы выбранные автором.
Что же касается компиляторов, то и сишные имеют много разных несуразных оптимизаций. И кстати любой плюсовый позволяет выбрать степень оптимизации или совсем не отключить, чем я нередко пользуюсь как плюсовик. Но это не проблема языка, а скорее - его реализации ;-)
Evgeny Grishankov, Ну да... Ну да... Человек написал два столпа современного программирования: Linux и Git. Если это не гениальность, то я не знаю, что тогда является гениальностью в программировании
Линус прав во всём. C++ - глючный, абстрактный, непонятный. Код на нём получается некрасивым и плохо читабельным. Да, C более низкоуровневый, но в этом и его плюс. Всё абсолютно прозрачно и понятно, если иметь хотя бы небольшие знания. Ты имеешь максимум контроля и полный спектр возможностей. C - это пример, когда у тебя есть всё, что нужно и нет ничего лишнего.
Dimon Volkov, На аппаратуре лучше Си ничего нет.Для верхних слоёв абстракции пригодны.И современный C++ абсолютно не глючный.
Линус: ответ на письмо 2007
Рафаил: 2023, Линус сделал поспешные выводы
Genius
Показать все комментарии