LINUX.ORG.RU

Линус Торвальдс раскритиковал Rust в ядре

 ,


3

9

Линус Торвальдс критикует использование Rust в ядре. Причины: возможность panic(), неделимость библиотеки и соответственно опасные попытки использования 128 bit типов (в ядре запрещено), бесполезность предложенных примеров драйверов.

>>> Подробности

anonymous

Проверено: Shaman007 ()
Последнее исправление: alpha (всего исправлений: 3)

Ответ на: комментарий от X512

Да, кстати, либо под гаечку. Спецом под ABI gcc 2.95!

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

Как Эльбрус спасёт от dangling pointers/use after free, которые могут портить память?

Не позволяет такое, да и все. То есть всмысле порчи памяти, у него там особые указатели в которых все проверяется на аппаратном уровне. http://www.myshared.ru/slide/984967/

Только в таком режиме даже ядро не запустить.

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

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

Поздно, это уже не остановить. Такое сейчас везде, перепост со стековерфлоу

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

Можно поймать в раством коде. Если выходит в вызывающий через ffi то завершение

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

Отсутствие исключений - архитектурное решение. Так что да, религия.

А тут говорят, что можно обрабатывать исключения, вызванные вызовом panic. Ложная тревога, все расходимся?

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

попахивает тем как вещи делаются в С++

как вещи делаются в С++ растаманами, у которых руки растут из жопы. но кодает-то за них С++, а у них лапки, они вообще ни при чем.

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

Анонимы! Ну имейте совесть! Зачем постить НОВОСТИ от анонимов? Кому адресовать вопросы в случае необходимости? Высрал и побежал, а вы разгребайте?

«высрать и побежать» - один из основных смыслов существования anonymous, если не самый главный. А ты к какой-то совести взываешь…

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

Есть ли жизнь на Марсе? Есть ли Rust на «Эльбрусе»?

Формально — да. Попробовать пока могут только приближенные к МЦСТ люди, т.к. кросс компилировать не получится без патчей для LLVM.

https://storage.mcst.ru/pub/src/rust/

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

Обрабатывать OOM в юзерспейсе нужно раз в квартал

«раз в квартал» слабоватая отговорка для ЯП, заявленного как «безопасный»

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

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

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

Если брать Rust, то он не подразумевает выделение произвольных буферов. RAII же. Ты можешь выделить в хипе место под нечто фиксированного размера (в том числе и слайс (так в расте называется массив) только фиксированного размера) и сразу инициализировать, либо ты доверяешь контейнеру, который выделяет буфер в небезопасном коде и уже сам следит, чтоб на неинициалированную часть не было указателей. Если растоману нужен именно массив в хипе неизвестного на этапе компиляции размера, то растоман либо использует вектор, либо опять же использует вектор на этапе заполнения, а потом уничтожает его и получает Box<[T]>.

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

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

Безотносительно того можно ли на практике отзеркалить crates.io или нет - это тонны гемора для административного стаффа и килотонны новых уязвимостей, связанных с подменой источников пакетов и самих пакетов на вредоносные. См. https://www.opennet.ru/opennews/art.shtml?num=54566 и еще 9000+ новостей про npm. Теперь и в ядре!

Локальный путь можно указать, используя тот же cargo, и никаких интернетов.

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

Кому адресовать вопросы в случае необходимости?

как кому? Леннарт Пёттеринг знает как обходить «хитрые и острые препятствия»... :о)

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

try_push и подобные - самый простой выход. Их нет, я ною по поводу почему try_reserve добавили, а остальные try_ одновременно с ним - нет, в чем логика?

Так мув семантика + контроль над ней в компайл-тайме. vec.try_push(x) сделать можно, но как только x ушёл внутрь функции то всё, x невалиден. Соответственно либо обнаружив ошибку ты уже потерял x, либо возвращаемый Result должен в варианте Error значение x вернуть народу, и ты в обработчике должен его куда-то сохранить. Короче, код будет таким геморным, что проще просто try_reserve(1) перед каждый пушем вызывать.

khrundel ★★★★
()

Не знаю как правильно, Линус сделай красиво короче.

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

Во время разработки пожалуйста, но в релизе ошибки надо обрабатывать.

Я сказал Деннису, что примерно половина кода, который я написал для Multics, была кодом обработки ошибок. Он ответил: «Мы всё это отбросили. Если произошла ошибка, у нас есть процедура под названием panic, и если она вызвана, компьютер зависает и вы кричите: „Эй, перезапустите его!“».

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

Я сказал Деннису, что примерно половина кода, который я написал для Multics, была кодом обработки ошибок.

Потому что нельзя писать большие проекты на Си. В C++ таких проблем нет, там есть RAII и владеющие указатели.

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

Потому что нельзя писать большие проекты на Си. В C++ таких проблем нет.

В ядре нет столько стека, особенно на всяких мелких камнях, чтобы писать на плюсах. Плюсы же во всех своих практиках только на стеке и выделяют, не?

kostyarin_ ★★
()

Мне вот что интересно. Линус сам растом балуется когда никто не видит ?

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

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

Список поддерживаемых ОС довольно длинный: https://curl.se/download.html. А сколько за ним разнообразного железа. А ещё микроконтроллеры.

gag ★★★★★
()

Линус Торвальдс раскритиковал Rust в ядре

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

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

Плюсы же во всех своих практиках только на стеке и выделяют, не?

Где скажите, там и выделяют. И при использовании RAII/владеющих указателей нет никаких дополнительных расходов по памяти, указатели занимают столько же байт.

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

Возможность паники не плоха, плохо если эту панику нельзя перехватить. Паника, которая бросается аллокатором не перехватывается.

Надеюсь скоро исправят.

Как только избавятся от этого выделения памяти в panic. :)

https://github.com/rust-lang/rust/blob/master/library/panic_unwind/src/gcc.rs#L53

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

Как только избавятся от этого выделения памяти в panic. :)

В C++ для исключений используется специальный аллокатор __cxa_allocate_exception.

X512 ★★★★★
()

новость от анонима в которой запрещенны анонимы)))

Ограничение на отправку комментариев: только для зарегистрированных пользователей
DMITRY
()
Ответ на: комментарий от SkyMaverick

А в расте свой аллокатор сделать можно? (в ядре нет никакого malloc) Если нет, то нафиг такое. Даже в C++ сейчас есть std::pmr::memory_resource, к которому можно любой аллокатор присобачить.

rupert ★★★★★
()

Кто новость писал? Запрещены не только 128 битные но и флоаты. Запрещен не паник, а вызывает недовольство что раст не обрабатывает нехватку памяти, а кидает паник, хотя надо было бы возвращать Result<T, E>.

Поправьте.

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

Может лучше убрать странные запреты?

А зачем они нужны разобрался уже?

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

А в расте свой аллокатор сделать можно?

Можно. Тупой пример.

Плюсом с 1.28 появился типаж GlobalAlloc.

Я, конечно, не большой специалист по rust и пробовать это не пробовал, но как-минимум написано и выглядит это, как кастомные аллокаторы.

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

Плюсом с 1.28 появился типаж GlobalAlloc.

Не пугайте так, я уж подумал что они хотят добавить поддержку Win16 с сегментной памятью. Там GlobalAlloc выделяет блок памяти в глобальной куче и выделяет для неё отдельный селектор.

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

Сделать свой аллокатор можно, но если не соблюсти интерфейс (а для аллокаторов, которые позволяют обработывать ошибки, интерфейс соблюсти не получится в связи с отсутствием исключений), то придется почти всю стандартную библиотеку переписывать.

balsoft ★★
()

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

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

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

Да уж лучше пусть жабоскрипт, там хоть и в ноги себе стрелять можно, но в людей не отрекошетит. Пусть школьники играются.

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

Я могу ошибаться, но то что ты скинул это обратка развертки, которая вроде бы считается в расте зашкваром (правда я не знаю, почему)

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

Ваще мимо.

Комменты почитай :)

У растаманов такой помпаж начался что половина даже по ссылке перейти не успели - срочно рванули делиться в комментах наболевшим и опухшим :-D

zabbal ★★★★★
()

Разум восторжествовал или я рано радуюсь?

I-Love-Microsoft ★★★★★
()
Ответ на: комментарий от cocucka

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

Один раст не педераст

pingvinek
()

Ржавоголовые думали, что если срать в тырнетах в каждую новость «Раст - то, раст - сё», то он... автоматически всеми полюбится?! :))) Или он станет лучше сам по себе? НЕТ!
Чтобы язык был принят людьми, он должен быть НАПИСАН ДЛЯ ЛЮДЕЙ. Ржавчина - наоборот, сделана так, чтобы нормальный, средний программист спотыкался на ровном месте и матерился уже через 5 минут кодинга.
Если вы решаете «проблемы с памятью», они должны решаться КОМПИЛЯТОРОМ, а не тем, что ударяете прогера по яйцам каждые 10 минут и заставляете играть в хоккей на костылях.

Рад, что Линус адекватно и без стеснения размазал эту «ржу» по просторам тырнетов.

Пусть расцветают тысячи... ЦВЕТОВ, а не колючек с бурьяном! Помните классику.

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

It is not recommended to use this function for a general try/catch mechanism.

Note that this function may not catch all panics in Rust. A panic in Rust is not always implemented via unwinding, but can be implemented by aborting the process as well. This function only catches unwinding panics, not those that abort the process.

Also note that unwinding into Rust code with a foreign exception (e.g. a an exception thrown from C++ code) is undefined behavior.

Ловить этим паники аллокаций и пытаться обрабатывать - глухой бесперспективняк ИМХО.

Dark_SavanT ★★★★★
()

Почему-то я не удивлён...

Если честно. Просто, дело в том, что учитывая «современные веяния» Торвальдсу пришлось искать какие-то благовидные предлоги вместо того, чтобы просто послать.

Ну хоть так. И то ладно.

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

Не, я про то что его теоретически можно протащить, потому как в нём, по сравнегию с core, только выделение памяти завезли. Но так то он для ядра не готов, да.

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

The Rust standard library team is doing work on allocators, fallible allocations, etc., but that is very much a WIP. We hope that our usage and needs inform them in their design.

всё ещё находится в состоянии WIP. Но он же, якобы, в первую очередь «системный».

Язык - системный, стандартная библиотека - нет.

anonymous-angler ★☆
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.