Загружаем изображение…

⚔️ Линус Торвальдс против C++: Почему ядро Linux остается на C?



Почему Линус Торвальдс категорически запрещает C++ в ядре Linux. Казалось бы, C++ - это "C на стероидах", но для разработки ядра эти стероиды - яд.

Разбираем основные аргументы Линуса (и почему они имеют смысл в context of kernel development).

1. Исключения (Exceptions) - зло для ядра
В C мы проверяем коды возврата. В C++ исключение может вылететь откуда угодно.

🔹 Проблема: Недетерминированность. Для ядра с 30 млн строк кода это ад отладки.
🔹 Риск: Если МРТ-сканер или система управления полетами "выбросит исключение" и упадет, последствия будут фатальными. Ядро требует полного контроля над потоком выполнения.

2. Скрытое управление памятью (RAII)
Линус считает, что компилятор не должен делать ничего "за спиной" программиста.

🔹 Проблема: Конструкторы, деструкторы и неявные аллокации.
🔹 Аргумент: В ядре управление памятью должно быть ручным и прозрачным. Зависимость от магии компилятора снижает производительность и стабильность.

3. "Жирная" объектная модель
Нужно ООП? Его можно сделать и на C. Линус утверждает, что C++ тянет за собой переусложненные иерархии и абстракции, которые потом невозможно рефакторить.

🔹 Цитата: "Ограничение проекта языком C означает, что люди не смогут его испортить... идиотской чушью 'объектной модели'".

💡 Как выглядит ООП в стиле Linux (на чистом C):
Вместо классов - структуры и указатели на функции. Это дает полиморфизм без оверхеда C++.

typedef struct {
int value;
// V-table на минималках: указатель на функцию
void (*increment)(struct Person *self);
} Person;

void increment_person(Person *self) {
self->value++;
}

int main() {
Person *p = (Person*)malloc(sizeof(Person));
p->value = 5;
p->increment = increment_person; // Привязка метода

p->increment(p); // Вызов: 6
free(p);
}

4. Проблема зависимостей (STL/Boost)
То, что стабильно для приложения в GNOME, недостаточно стабильно для ядра. Внедрение STL или Boost - это риск security-проблем (вспомним бэкдор в xz/liblzma) и раздувание бинарников.

А как же Rust?
Интересно, что к Rust отношение другое. Линус допускает Rust, потому что он (в отличие от C++) решает проблемы безопасности памяти, а не просто добавляет синтаксический сахар. C - прост, но позволяет выстрелить себе в ногу. Rust - строг. C++ - слишком сложен и неявен для ядра.


Отказ от C++ - это выбор между эргономикой разработчика и стабильностью системы. Для User-space приложений C++ прекрасен. Но для ядра, от которого зависит работа миллиардов устройств (от тостеров до спутников), консерватизм C - единственно верный путь.

👉 Читать статью полностью: https://habr.com/ru/companies/otus/articles/902724/


#cpp #c #linux #kernel #linus #coding #holivar

👉 @cpp_lib
Просмотры: 7 123
Открыть в MAX Сообщить о неточности

Репосты публикации

Публикация канала

Сообщить о неточности

Опишите, что нужно исправить. Если есть источник, добавьте ссылку.

Вы покидаете datool.ru

Ссылка ведёт на внешний сайт. datool.ru не отвечает за его содержимое — проверьте адрес, прежде чем вводить пароли или платёжные данные.

Переход через 10 с

Перейти