Почему Линус Торвальдс ненавидит C++
Линус Торвальдс признается, что ненавидит C++, а программистов на этом языке он оскорбляет. Разбираемся, в чем заключается причина ненависти.
25К открытий33К показов
В 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++ думаете вы? Справедливы ли нападки Торвальдса?
25К открытий33К показов