Linux

Ядро Linux в 2024: 10 критических причин выбора Си вопреки трендам C++ и Rust



🧠 Почему Linux-ядро всё ещё пишется на Си, несмотря на мощь C++ и модность Rust?

## 🔗 Ссылки
🗂️ [github](

[ad_2]

source

Related Articles

38 Comments

  1. Видеоблогер: "C решает проблему биранкой совместимости!"
    Разработчики и пользователи загружаемых модулей ядра линукс: "Да ну???"

  2. Rust появился уже после того, как браузер mozilla был уже огромным работающим продуктом написанном в основном на плюсах. То, что Rust уже почти в нем догнал плюсы говорит о целесообразности его внедрения.

  3. Вопреки утверждению автора о том, что на C++ нельзя работать на голом железе (или очень затруднительно), имею опыт запуска программ C++ на голом STM32. Запуск одинаково возможен, что на C, что на C++, однако по размеру кода, занимаемой оперативной памяти и быстродействию ситуация будет не в пользу C++. Хотя в моём случае разница не превышала 5% по быстродействию и 12% по памяти.

  4. Как большой любитель C и системного программирования хочется сказать… насколько же автор тут притягивает каждый пункт за уши, то ли специально, пытаясь сыграть на том, что кто-то может не знать, то ли из-за полной неграмотности в разбираемом вопросе

  5. Ядро линукс используется преимущественно на смартфонах и wi-fi роутерах, некотором сетевом оборудовании. Серверов миллионы, но девайсов и смартфонов МИЛЛИАРДЫ. В них особенно могут быть критичны размеры ядра и производительность. Си и только си. Какой еще Раст? С++ да, то Раст это усего лишь еще один убийца С++, не более.

  6. Спасибо за видос. Я не супер продвинутый в линукс, но подобная утилита для скриншотов из коробки на zorin os (core edition тут как раз wayland)

  7. 9:14 я тут проверил… Война и Мир – 188(!) тысячи слов…
    т.е. строк(!) в браузере в 200 раз больше, чем слов(!) в ВиМ о_О

  8. Жалко, что автор вместо того чтобы поговорить о реальных проблемах rust, привел кучу устаревших или невалидных аргументов, а я уже было надеялся что у кого-то есть взвешанная точка зрения. С кроссплатформенностью у rust всё отлично, просто писать надо на rust, а не на ассемблеровских вставках – для этого есть hal. Проблемы есть с эргономикой, особенно если говорить про экосистему, но фанаты rust это не признают, а хейтеры – обижены на borrow checker и дальше него обычно не продвигаются.

  9. Все видео пацан доказывал на примерах высосанных из пальцах, что Си благороднее Раста, а Плюсы для сравнения добавил чисто, что бы казалось объективным сравнением. Безусловно, некоторые пункты имеют долю истины, но сверху начинают такое накидывать на вентилятор, что видно, что человек не понимает даже как Си ведет себя в тех пунктах, которые он доказывает. А говорить о его компетентности в знании нюансов Раста и Плюсов даже не приходиться.

  10. Не в восторге от Rust, но аргумент против него в том что ядро firefox с большего на cpp не верный, просто они еще не все переписали.
    Что касается Си vs С++/Rust. Первый аргумент это – Си не имеет паник и исключений, а значи некий код ядра потенциально имеет меньше шансов сломать рантайм выбросив исключение или панику. Второй аргумент компилятор Си намного проще чем Cpp/Rust и уже портирован на многие архитектуры.
    Про производительность, у Cpp намного лучше компиляторы потоптимизации их годами задрачивали но вот рантайм либа у cpp намного жирнее и в том же embedded с десятками и сотнями килобайт памяти может занимать слишком много памяти или вообщеине вылазить. В тех же машинах исспользую очень много чипов, обычно там памяти может быть десятки килобайт и ни какие либы для поддержки исключений, дженериков, многпоточности и др. туда просто не помещаются. Для более мощых по памяти девайсов cpp это очевидный выбор т.к. в "любимый" Си до сих по не добавили даже модульность аля неймспейсов и удоьную обработку ошибок, что на практике геморой и много мусорных строчек в прикладном коде.

  11. 29:02 — а вот тут как раз таки можешь — атомарные операции поддержаны в с++… можно как раз задать именно зависимость порядка выполнения одной части программы от другой.

  12. 28:40 — не обязательно — нет такой гарантии в стандарте си. — могу лишь рекомендовать к прочтению стандарты языков — иначе будут подобные "чьи то мнения" и не более — объективными доводами енто вообще никак нельзя назвать я считаю

  13. 28:29 — простыми словами — все что компилятор с++ делает (может делать) забортом контроля кодера — на си пишут ручками — при чем в точности повторяя суть ентих оптимизаций — иначе код на си был бы вообще настолько неоптимальным по производительности, что про си бы уже давно забыли заслуженно как страшный сон.

  14. 27:57 — а где в стандарте си указано что компилятор обязан делать все построчно неотходя от приданного программистом порядка действий — в случае когда компилятор может сделать аналогичную по логике программу?
    в ентом и проблема подобных видосов — авторы почти никогда вообще не исследуют именно объективную сторону вопроса — и конкретные значимые сведения

  15. 27:09 — да …. ага … диалекты))) языки ассемблеров и си))) совсем соотносимые сущности — я думаю тут бы даже Торвальдс фейспальмил

  16. 25:48 — раскрываю невиданную скрытую тайну…. компиляторы мало сча делаются неслоёными — и фронтенд языка там может меняться на какой угодно, и будут доступны все реализованные в бекенде архитектуры для ентих фронтендов… — тот же gcc или clang… все перечисленные архитектуры на видео уже давным давно доступны для с++ (на сколько я осведомлён)

  17. 17:45 — а без исключений ты ичего не обрабатываешь? при ентом ты вынужден каждый раз проверять в нескольких местах условия обрабатывая возвратный код из функции… а исключения работают именно когда они выкидываются — не надо каждый раз "прокидывать" коды ошибок — тоесть как раз наоборот — исключения экономят рантайм

  18. 15:11 — как раз будет многое уже доступно в с++ — freestanding либа — советую почитать что такое и зачем она — лучше сразу стандарт или на цппреференсе — и что туда сча входит в обязательном порядке.

  19. 12:13 — вот тут надо смотреть что за код сравнивается — скорее всего там просто непомерно неравнозначный код сделан…

  20. 11:34 — для написания ОС нету рантайм библиотеки — там будешь юзать freestanding версию либы — или самому все сделать, но енто гемор просто дополнительный и ненужный.
    уже одалели если честно енту тему вообще поднимать — линукс на си только по одной единственной причине — потому что Линус Торвальдс хейтер с++ и адепт си — больше нет никаких причин — и тем более нет вообще никаких объективных

  21. 11:25 — каких нафиг абстракций? можно хоть один пример? с++ вмещает в себя си — тут вообще нечего сравнивать — для с++ просто доступны многие оптимизации (а некоторые из них являются обязательными по стандарту) которых в си нельзя сделать. Не может код на с++ быть менее быстрым чем на си… енто антинаучно и абсурдно — там в примере скорость компиляции, а не работы… рантайм си не может быть быстрее рантайма с++…

  22. Ну блин, почему не выделить часть кода, близкую к железу в "драйвер" и написать на С, а остальное в Rust сделать. Основная проблема – трудозатраты – работает сейчас и пусть работает.

  23. Пример на Си без ОС точно также реализуем и на плюсах, потому что уже есть ядро. А надо код на чистом Си, без системных вызовов) Это надо будет самому сделать драйвера для монитора,консоли и т.д.

  24. Шаблоны порождают IFNDR это еще хуже UB.
    Ну и вообще стандарт дырявый так как вариантов комбинаторно много.

    Пример кода, который компилируется см "delete delete" это IFNDR.

    template <class T>

    void del(T a){

    delete delete a;

    }

    int main(){return 1;}

  25. Ну несколько я знаю мозилла уже не использует раст для своего браузерного движка. Команду которая писала на расте в итоге распустили..

  26. 26:45 не соглашусь, LLVM хоть даже с питона или js, хоть даже микс из сотен языков)) вам скомпилирует ядро которое будет совместимо с *любой* архитектурой для которой вы напишите ассемблер LLVM (который даже проще СИ)

Leave a Reply

Your email address will not be published. Required fields are marked *

Back to top button