LINUX.ORG.RU

Линус высказал своё мнение о Rust в ядре

 , ,


2

4

Поживем - увидим

Мне интересен проект внедрения Rust в ядро. Но я считаю, что авторы этого проекта предвзяты по отношению к Rust, и хотелось бы сначала посмотреть, как это обернется на практике.

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

Торвальдс полагает, что первоначальной областью применения Rust в ядре могут быть драйверы, поскольку их написание представляет собой множество небольших и независимых задач. «Может, это не самое интересное применение, но оно самое очевидное». Он добавил, что поскольку многие устройства предназначены не для всех процессорных архитектур, недостаток их поддержки в Rust – не такая большая проблема.

>>> Источник

anonymous

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

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

естественно, этот тип проверки недоступен компилятору, поэтому его переносят в рантайм.
а что ещё этот cheri проверяет ?

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

так и С/С++ из прошлого века, протухли-с...

Перемен требуют наши сердца,
Перемен требуют наши глаза,
В нашем смехе и в наших слезах,
И в пульсации вен
Перемен!
Мы ждем перемен.

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

у раста есть рантайм?
Minona ★ (26.03.21 09:57:21)
естественно, этот тип проверки недоступен компилятору, поэтому его переносят в рантайм
Minona ★ (26.03.21 12:25:15)

растовики все с раздвоением личномти ?

а что ещё этот cheri проверяет ?

почитай

https://www.cl.cam.ac.uk/techreports/UCAM-CL-TR-941.pdf

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

Ты путаешь время выполнения и среду выполнения

это ты путаешь, безопасность раста не zero cost как кажется растовикам

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

растовики все с раздвоением личномти ?

а ты не понял что в процитированном тобой слово рантайм имеет два разных значения?

почитай

читаю

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

Можно, собственно говоря #[cfg()] и нужно использовать. Например,

#[cfg(target_pointer_width = "64")]
run_for_64bit();
#[cfg(target_pointer_width = "32")]
run_for_32bit();
balsoft ★★
()
Ответ на: комментарий от shpinog

Как тебе должно проверяться на этапе компиляции то, что вычисляется во время выполнения например?

Существуют dependent types, которые позволяют проверять на этапе компиляции то, что будет вычислено во время выполнения. Для примера см. тип Vect в Idris, получение элемента из которого безопасно т.к. язык требует на этапе компиляции доказать, что длина вектора больше чем номер получаемого элемента.

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

зачем нужен раст если CHERI делает проверки аппаратно

Чтобы падало на этапе компиляции, а не в рантайме?

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

Ты придираешься к проверки границ массива, хотя это одно из самых частых мест ошибок программистов и внезапных SIGSEGV или ещё чего похуже. И там правильно сказано, что в общем случае невозможно статически проверить отсутствие выхода за границу массивов.

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

Жопу надо подтирать, даже если это занимает время. Умные сишники пушут ‘if( idx < SZ )’, глупые ловят SIGSEGV.

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

Кстати да, ловкое манипулирование терминами.

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

Жопу надо подтирать, даже если это занимает время.

зачем подтирать жопы растовиков в ядре и тратить на это время ? впрочем торвальц сам себе выбрал занятие по душе :)

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

Есть куча примеров когда не подтирание своих жоп сишниками в ядре приводило к 0-day уязвимостям.

Если ты скажешь что такого не было, то ты тупое и толстое трололо, и разговор с тобой бесмыслен.

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

по-моему зависимые типы это про ограничение области значений этого типа, а не про количество элементов
ну мне так кажется =)

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

нее ну чо это за рантайм, вот JVM, BEAM это рантаймы.
а это так, мелочи =)
и к чему он там придрался, что там кривое — нипанятна.

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

зачем подтирать жопы растовиков в ядре и тратить на это время

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

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

тебе повезло с железом

Более 10 лет удачи с железом… это удача не с железом, а с операционной системой.

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

почитай

читаю

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

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

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

по-моему зависимые типы это про ограничение области значений этого типа, а не про количество элементов

Внезапно ограничение области значений позволяет, как частный случай, ограничить количество элементов :)

В Идрисе можно описать тип Vect : (len : Nat) -> (elem : Type) -> Type (https://github.com/idris-lang/Idris-dev/blob/master/libs/base/Data/Vect.idr#L14) где len – это длина вектора, и свойства этой длины можно доказывать на этапе компиляции, например функция index (https://github.com/idris-lang/Idris-dev/blob/master/libs/base/Data/Vect.idr#L86) принимает как индекс элемента значение типа Fin len и вектор Vect len elem (где тип Fin len означает натуральное число, которое строго меньше len). Таким образом компилятор гарантирует, что ф-ции index можно передать индекс не больше, чем длина вектора, и что index – функция (в смысле total function, т.е. безопасна для любых значений len и vec, которые ей можно передать в рантайме)

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

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

Короче, голову надо иметь на плечах и руки не из задницы, тогда и код будет работать, и падений не будет.

А то наплодили, понимаешь, языков, а элементарной грамотности по алгоритмике и структурам данных как не было, так и нет. «Как я стал web-программистом за 21 день» сейчас в тренде.

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

раст в общем-то создавался в первую очередь с целью облегчения написания безопасного мультипоточного кода

зачем он в ядре ОС или в драйвере ?

отсюда следует вывод что для такой архитектуры раст будет более полезен чем С/С++

странный, бестолковый вывод

Through extensive prototyping and co-design, we have demonstrated and evaluated:

• New software construction models that use capabilities to provide fine-grained memory protection and scalable software compartmentalization (Chapter 5)

• Language and compiler extensions to use capabilities in implementing memory-safe C and C++, and Foreign Function Interfaces (FFIs) for higher-level managed languages(Section 6.1);

• OS extensions to use (and support application use of) fine-grained memory protection(spatial, referential, and (non-stack) temporal memory safety) and abstraction extensionsto support scalable software compartmentalization (Section 6.2); and

• Application-level adaptations to operate correctly with CHERI memory protection and software compartmentalization (Section 6.3).

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

Да, мощная система типов - это круто. Но есть одна загвоздка: вывод типов в таких системах неразрешим. То есть в таких языках фактически приходится писать код эквивалентный доказательствам теорем.

И я подозреваю, что редкий программист долетит до середины «Type-Driven Development with Idris».

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

а как быть с динамическими массивами? ;)

Представляются в виде зависимых пар (dependent pairs): (длина массива(n), значение с типом Vect n)

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

голову и руки надо иметь всегда, но существует такая зараза как человеческий фактор.
и если компилятор не позволяет тебе г-кодить это очень большой плюс.

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

Так собственно вся суть в том, что Vect – динамический! len не является константой, она изменяется при добавлении элементов. Единственная проблема в том, что программисту зачастую придется доказывать компилятору, что длина вектора соответствует какому-нибудь свойству (например, для использования функции index в случаях, когда компилятор сам не может доказать, что длина вектора болшьше индекса, программисту придется это доказывать самостоятельно).

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

Технически, в Идрисе так делать не обязательно – можно паттерн-матчить на типах, т.е. из самого типа вектора уже можно получить его длину динамически.

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

Если массив приходит извне или получается с помощью filter, например, то по-другому не получится. Длина будет известна только в рантайме.

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

Я вот честно говоря не понимаю, что тут нового и революционного, строгая типизация и проверка компилятора на длину массива, параллелизм из коробки все это уже как 20 с хвостом лет в Аде.

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

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

(Вернее, получится, но только в тех случаях когда можно было бы просто использовать List)

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

кто он? мультипоток зачем в ядре?

а его там нету да?

он там есть номинально, к использованию не рекомендуется и скорей всего твой драйвер с kthread закидают ссаными тряпками - есть очереди ядра, туда и отправляют свои задачи чтобы не мешать планировщику своей многопоточной херней

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

Абсолютно согласен. История ничему не учит.

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

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

Существуют dependent types, которые позволяют проверять на этапе компиляции то, что будет вычислено во время выполнения.

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

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

Зачем его вычислять, если мы можем описывать его свойства? Пример из документации: https://docs.idris-lang.org/en/v0.9.19/effects/simpleeff.html#vadd-revisited

Функцию vadd (которая складывает соответствующие элементы двух векторов) просто-напросто нельзя вызвать с «неправильными» векторами, так как у неё в типе указано, что у векторов одинаковые длины (но не «захардкожено», какие именно длины). После этого мы можем использовать эту функцию над разными векторами, но Идрис потребует доказать, что у этих векторов одинаковая длина – например, частичная функция vadd_check принимает два вектора произвольных длин, сравнивает длины, и если они одинаковые то вызывает vadd на этих векторах, а в противном случае падает (поэтому она и частичная). Это можно реализовать другим способом, например возвращать тип Maybe (идрисный Option) и в первом случае возвращать Some (vadd v1 v2), а во втором None, или например получать первый и второй вектор в результате некоторых операций, которые гарантируют равенство их длин, и передавать напрямую в vadd.

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

И то, и другое – языки программирования :)

Идрис был приведен в пример как ответ на (возможно риторический) вопрос

Как тебе должно проверяться на этапе компиляции то, что вычисляется во время выполнения например?

Ответ: вот так. То, что у Идриса GC, не меняет того факта что проверять на этапе компиляции то, что вычисляется во время выполнения вполне возможно, вот даже конкретно проверка выхода за границы вектора. Раст это не делает потому что во главу угла ставит совместимость с программистами на C (у которых энтузиазм от изучения зависимых типов очень быстро кончится). Это заметно ещё и по отсутствию HKT, и в целом весьма примитивной системе типов. (Кстати, система типов C++ достаточна для выражения зависимых типов, но там это невыносимо больно в отличие от идриса).

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

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

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

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

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

Нет, речь идет именно о гарантиях от компилятора. Ты не сможешь вызвать index так, что он упадет в рантайме, вот и всё. Остальное сообщение я так и не распарсил.

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

Я вот честно говоря не понимаю, что тут нового и революционного, строгая типизация и проверка компилятора на длину массива, параллелизм из коробки все это уже как 20 с хвостом лет в Аде.

Революционность в том числе и в том что это всё пошло в массы, а не осталось в цепких лапах DARPA.

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

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

1. Факторы 50 лет назад и сегодня разнятся. В С, например, пплохо поддержана многопоточность (возврат кода ошибок не рассчитан на многопоток). Просто потому, что сегодня многоядерность процессоров гораздо актуальнее чем во время создания С. Плюс сегодня создаваемые системы гораздо больше, их сложнее охватить мысленным взором. Плюс ИТ внедряется повсеместно и нужно больше программистов. Поэтому растёт запрос на безопасность, языков и на простоту.

2. Даже если учесть все факторы оптимизации, далеко не факт, что разработчик языка сделает его паретто-оптимальным образом.

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

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

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

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

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

<анекдот про суровых лесорубов и бензопилу>

залупидрисе

А потом они рассказывают о токсичности хаскелистов и растаманов…

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