LINUX.ORG.RU

В ядро принесли RAII

 ,


0

2

Теперь, мальчики и девочки, в ядре можно писать вот такое вот:

scoped_guard(raw_spinlock_irqsave, &foo->lock) {
  [...]
}

и вот такое:

struct device *dev __free(put_device) = kzalloc(sizeof(*dev), GFP_KERNEL);

И никаких больше протекших ресурсов!

Ссылка на merge: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=04f2933d375e3f90d4435b7b518d3065afd1fa25



Последнее исправление: cumvillain (всего исправлений: 1)

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

То, что делают из С в ядре - ну реально выглядит беспонтово. Понятно, что всё это как бы надо, но когда оно встроено в язык по-человечески, то это совсем другой уровень.

Чисто моё имхо:

  1. База это С. Но не тот С, который нам втюхивают в стандартах, а более определённый, у которого меньше UB. Что-то можно и вырезать, что в ядре не используется.

  2. Расширение это то, что нужно в ядре. Т.е. практически востребованные фичи.

  3. Кодогенератор взять из llvm. Это даст нужную портируемость, много оптимизаций и не так уж сложно будет такой компилятор сделать.

vbr ★★★
()
Последнее исправление: vbr (всего исправлений: 2)
Ответ на: комментарий от cumvillain

Вообще, стандарты у ЯП – довольно бесполезная штука.

Ты сделал круг в троллировании сишным стандартом и вернулся на исходную? :D

Так я всегда считал стандарт бесполезным говном. Но это не повод не троллировать сишников на тему его незнания.

Алсо, зацени: Зачем нужен стандарт ISO для языков программирования?

hateyoufeel ★★★★★
()
Ответ на: комментарий от vbr

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

Боже, нет! Линус ничего хорошего в жизни не написал. И не напишет.

hateyoufeel ★★★★★
()
Ответ на: комментарий от vbr

Самое популярное ядро ОС в мире.

Это не Linux будет, есличо. Самое популярное ядро на серверах, тогда уж, но это примерно такая же честь, как титул самой популярной ОС на десктопе. К качеству кода или проектирования это отношения не имеет.

Самая популярная система контроля версий в мире.

Аналогично. Самая популярная не значит хорошая. Ну и если бы автор BitKeeper не был таким говнюком, мы бы сейчас все им пользовались.

Плюс, в популярности гита виноват гораздо больше GitHub чем Линус.

hateyoufeel ★★★★★
()
Последнее исправление: hateyoufeel (всего исправлений: 2)
Ответ на: комментарий от hateyoufeel

Это не Linux будет, есличо. Самое популярное ядро на серверах, тогда уж, но это примерно такая же честь, как титул самой популярной ОС на десктопе. К качеству кода или проектирования это отношения не имеет.

Серверные устройства, клиентские устройства, эмбеддед - везде линукс.

К качеству кода или проектирования это отношения не имеет.

Линукс это не корпоративный продукт, его людям никто не навязывал, его сами выбирают, добровольно. И в 90-х выбрали, выкинув BSD и коммерческие юниксы на серверах. И в 2000-х выбрали для андроида. И сейчас любой soc берешь - там идет совместимость с линуксом в первую очередь, а не с чем-либо ещё.

В случае линукса популярность это прямое следствие качества.

То же и с git. Я ещё помню, каким популярным был svn, mercurial. Но когда появился git, все сразу поняли, что за ним будущее.

vbr ★★★
()
Ответ на: комментарий от vbr

Линукс это не корпоративный продукт, его людям никто не навязывал

Што? Ты с 1997 в спячку впал? Линукс как раз последние лет 20 двигают в основном корпораты, в том числе всякие Red Hat и SUSE. Они на нём и зарабатывают массово. А то, что он бесплатен – ну, первая доза бесплатно, сам знаешь. Да и на тестировщиков надо меньше тратиться.

Плюс, твоё «его людям никто не навязывал» прямо противоречит следующему «И сейчас любой soc берешь - там идет совместимость с линуксом в первую очередь, а не с чем-либо ещё.» Ты или одно выбери, или другое.

И в 90-х выбрали, выкинув BSD и коммерческие юниксы на серверах.

В 90х его никто не выбирал. До 1994 там даже нормальной поддержки сети-то не было. Линукс превратился в более-менее адекватную ОС только к 99 году.

И в 2000-х выбрали для андроида.

Что было, то и взяли. От линуксового юзерспейса пользователь андроида не видит вообще ничего. Хуже того, если линукс выкинуть из андроида, никто даже не заметит разницы.

В случае линукса популярность это прямое следствие бесплатности.

Починил. Опять же, тут не то чтобы заслуга разработчиков линукса. Просто все остальные массово обосрались.

То же и с git. Я ещё помню, каким популярным был svn, mercurial. Но когда появился git, все сразу поняли, что за ним будущее.

Я тоже помню, каким говнищем он был и как даже от GitHub все плевались. Года до 2011-2012. Git в основном за счёт рубистов пролез, потому что они протащили на него толпу нубов, а те в итоге выросли и теперь кроме гита ничего не умеют.

hateyoufeel ★★★★★
()
Последнее исправление: hateyoufeel (всего исправлений: 4)
Ответ на: комментарий от vbr

База это С. Но не тот С, который нам втюхивают в стандартах, а более определённый, у которого меньше UB. Что-то можно и вырезать, что в ядре не используется.

Страуструп уже вот так попытался, и получился немыслимый урод, и именно сишные уши похерили все возможности сделать нормальный системный язык

Кодогенератор взять из llvm. Это даст нужную портируемость, много оптимизаций > и не так уж сложно будет такой компилятор сделать.

Опять же, си как язык не способствует эффективной автоматической оптимизации

zurg
()
Ответ на: комментарий от zurg

Ядро уже написано на С, это свершившийся факт и крупное переписывание ему не грозит никогда. Поэтому если переводить ядро на другой язык, то он должен быть надмножеством С (а точней того диалекта С, которое используется в ядре). Это может быть С++, но раз Линус так против С++, то может быть и свой язык.

vbr ★★★
()
Ответ на: комментарий от cumvillain

Проще перевести его на Rust, потихоньку точечно улучшая сишные части.

А что, Линус принял решение о переводе кода ядра на Раст? Мне казалось это опциональный язык.

pathfinder ★★★★
()
Ответ на: комментарий от cumvillain

Его доля станет расти и в какой-то момент C окажется только в core части

Или не окажется. Завтра может появится какой-нибудь новый супер-пупер язык «Хруст» и всё по новой. Будущее непредсказуемо. Дело в другом - какая официальная позиция? Раст заменил Си в качестве основного языка, на котором пишется ядро? Или это опциональный язык и для сборки ядра наличие Раста как зависимости должно быть необязательным.

pathfinder ★★★★
()
Ответ на: комментарий от pathfinder

Или не окажется. Завтра может появится какой-нибудь новый супер-пупер язык «Хруст» и всё по новой. Будущее непредсказуемо. Дело в другом - какая официальная позиция? Раст заменил Си в качестве основного языка, на котором пишется ядро? Или это опциональный язык и для сборки ядра наличие Раста как зависимости должно быть необязательным.

Официальная позиция «давайте попробуем».

cumvillain
() автор топика
Ответ на: комментарий от LongLiveUbuntu

А стандарт тогда что?

В стандарте формализованным языком подробно описываются виртуальная машина языка, его семантика и всё остальное. В книжке тупо приводятся примеры в духе «мы делаем вот так и что-то получается».

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

P.S. тот факт, что сишный стандарт написан через жопу и наркоманами, не делает его менее стандартом.

hateyoufeel ★★★★★
()
Ответ на: комментарий от anonymous-angler

Да какой там… или это сарказм? господа растовики и хаскелисты, ведя тихую и светскую беседу вымучили 2 страницы, куда закоренелые сишники делись? тут такое… Линус скурвился - раст всё глубже в ядро проникает, RAII в ядре сделал как в скриптухе какой - то-ли стандарт читают, то-ли раст учат

zurg
()
Последнее исправление: zurg (всего исправлений: 1)
Ответ на: комментарий от hateyoufeel

Я тоже помню, каким говнищем он был и как даже от GitHub все плевались.

С чего он был говнищем? Тогда были или файловые/централизованные vcs или гит/гит-подобные, где плясали от изменений. Гит делали даже на баше и он простой как палка. В гите главное подход - пока все надрачивали на файлики, Линус взял да на коленке сваял vcs на дифах, которая работала и делала хорошо уже на старте то, что в файловых vcs делалось исторически через жопу.

crutch_master ★★★★★
()
Последнее исправление: crutch_master (всего исправлений: 2)
Ответ на: комментарий от hateyoufeel

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

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

C

Лавров.жпг

его семантика и всё остальное

В книжке тупо приводятся примеры в духе «мы делаем вот так и что-то получается».

Это оно и есть. Видно человека, который разбирается в CS.

LongLiveUbuntu ★★★★★
()
Ответ на: комментарий от LongLiveUbuntu

Еще раз: в книге дано описание синтаксиса, семантики и библиотеки на примерах. Почему она не может считаться описанием стандарта языка?

Потому что стандат это исчерпывающее описание, не допускающее двойных толкований и разной реализации (в идеале). Книжка это мать его книжка.

cumvillain
() автор топика
Ответ на: комментарий от LongLiveUbuntu

Спермозлыдень выше ответил. Добавлю, что в книжке не формализованный язык. Видел в RFC пишут the words SHALL, MUST, etc are defined as per RFC XXXX? Вот это вот оно.

Алсо алсо, на соответствие стандарту есть сертификация. Можно ли сертифицировать что-то на соответствие книжке? Нуууу…

Кстати, тут можно кинуть камень в огород C, потому что например для той же Ada есть набор тестов, которые компилятор должен пройти: каждый тест – кусок кода, который должен быть или скомпилирован во вполне определённый бинарник с определённым поведением, либо компиляция должна закончиться вполне определённой ошибкой. Для C я такого не видел.

hateyoufeel ★★★★★
()
Последнее исправление: hateyoufeel (всего исправлений: 2)
Ответ на: комментарий от cumvillain

Потому что стандат это исчерпывающее описание, не допускающее двойных толкований и разной реализации (в идеале).

Рассказываю: стандарт по сути - точно такая же книжка, только написано там ГОСТ или ISO номер такой-то. В хорошо оформленном стандарте точно так же даются примеры для каждого элемента языка с описанием его поведения в каждом случае. То, что каждый плюет на то, что там написано и делает по-своему - данность: гляну на список фич С/С++, включая нестандартные, типа вложенных функций, в GCC, MSVC и Clang.

Однако без руководящей книжки ты будешь как слепой котенок посреди леса, поэтому в том или ином виде стандарт на ЯП всегда есть.

LongLiveUbuntu ★★★★★
()
Ответ на: комментарий от LongLiveUbuntu

Стандарт - полное формальное описание языка. «Книжка» - нет. Так понятнее?

GCC, MSVC и Clang

У обоих трех есть режим строгого соответствия стандарту.

То, что каждый плюет на то, что там написано

В основном, это ты плюешь на объяснения.

unsigned ★★★★
()
Ответ на: комментарий от vbr

C это почти макроассемблер.

Представлять как код на C++ будет в дизассемблере задача не тривиальная.

Хотя писать ядра на C++ вполне можно. Были эксперименты. Выкинуть STL, исключения, поменьше vtable и вполне работает.

zx_gamer ★★
()
Ответ на: комментарий от zx_gamer

Представлять как код на C++ будет в дизассемблере задача не тривиальная.

Я тебя вынужден разочаровать, но на самом деле оно и в случае с C будет выглядеть как блевотина единорога. Времена почти 1-1 мапинга сишных конструкций в asm умерли давно в прошлом.

cumvillain
() автор топика
Ответ на: комментарий от cumvillain

Нормально он выглядит. Кладем в регистры (если параметры влазят) или на стек (если не влазят) и вызываем ассемблерную процедуру (функцию Си).

Иногда может путать inline или арифметические выражения, но в целом понять это реально.

zx_gamer ★★
()
Ответ на: комментарий от zx_gamer

Нормально он выглядит. Кладем в регистры (если параметры влазят) или на стек (если не влазят) и вызываем ассемблерную процедуру (функцию Си).

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

cumvillain
() автор топика