The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



Вариант для распечатки  
Пред. тема | След. тема 
Форум Разговоры, обсуждение новостей
Режим отображения отдельной подветви беседы [ Отслеживать ]

Оглавление

Rust будет принят в состав ядра Linux 6.1. Создан [BR]Rust-драйвер для Ethernet-чипов Intel, opennews (??), 20-Сен-22, (0) [смотреть все] +1

Сообщения [Сортировка по времени | RSS]


153. "Rust будет принят в состав ядра Linux 6.1. Создан Rust-драйв..."  +/
Сообщение от Имя (?), 20-Сен-22, 10:44 
> Как ты вообще без unsafe собрался взаимодействовать с железом.

А в чем проблема?

Ответить | Правка | Наверх | Cообщить модератору

163. "Rust будет принят в состав ядра Linux 6.1. Создан Rust-драйв..."  +/
Сообщение от Sw00p aka Jerom (?), 20-Сен-22, 11:15 
ну представьте поле с граблями и вы с голыми ногами шагаете по нему, проколите ноги как минимум, лоб будет целым, а вот в случае с растом, надели спец ботинки с толстой непрокалываемой подошвой, в итоге ноги не проколите, но лоб каждый раз будете расшибать, и весь прикол в том, что грабли никуда не делись, а по лбу будет бить ровно на столько сильно, насколько с такой уверенностью будете вступать на грабли, будучи уверенным, что не проколите ноги.
Ответить | Правка | Наверх | Cообщить модератору

175. "Rust будет принят в состав ядра Linux 6.1. Создан Rust-драйв..."  +/
Сообщение от Влад (??), 20-Сен-22, 11:46 
Скорее Раст обернет unsafe грабли в safe грабли, которые не будут прокалывать вам ногу и биться о голову. Ведь идея раста именно в изоляции небезопасных вещей в обертки с инвариантами, большую часть которых вы не сможете нарушить из-за системы типов языка, это упрощает и ускоряет написание кода без таких ошибок.
Но да, Вы все ещё можете взять эти грабли и своими руками бить ими по лицу, если Вы мазохист.

Тот же Haskell, языки с зав. типами, etc. тоже дают инварианты, но другие, не такие важные в системной разработке. Да и их техническое воплощение явно не подходит для драйверов и ядра ОС.

Ответить | Правка | Наверх | Cообщить модератору

284. "Rust будет принят в состав ядра Linux 6.1. Создан Rust-драйв..."  +/
Сообщение от Sw00p aka Jerom (?), 20-Сен-22, 15:10 
>Скорее Раст обернет unsafe грабли в safe грабли

как я и говорил, грабли то никуда не делись

>которые не будут прокалывать вам ногу и биться о голову.

кетайцы еще не придумали такие грабли

>вы не сможете нарушить из-за системы типов языка

машина ничего не знает о типах и темболее о языках

>бить ими по лицу

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

>явно не подходит

каковы критерии "не подходит"?

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

Ответить | Правка | Наверх | Cообщить модератору

455. "Rust будет принят в состав ядра Linux 6.1. Создан Rust-драйв..."  +1 +/
Сообщение от Someone (??), 21-Сен-22, 18:40 
Грабли все таки делись.
Как пример могу привести адаптированный код хеш таблицы.

pub struct RawTable<T, A: Allocator + Clone = Global> {
    table: RawTableInner<A>,
    // Tell dropck that we own instances of T.
    marker: PhantomData<T>,
}

pub struct RawTableInner<A> {
    bucket_mask: usize,
    ctrl: *const u8,
    growth_left: usize,
    items: usize,
    alloc: A,
}

pub fn get<F>(&self, hash: u64, eq: F1) -> Option<&T>
where
    F: FnMut(&T) -> bool,
{
    match self.find(hash, eq) {
        // bucket = *mut T
        Some(bucket) => Some(unsafe { &*bucket }),
        None => None,
    }
}

Прикол в том что вроде бы как RawTableInner хранит сырой указатель на аллоцированную память и полностью небезопасен. Но далее привязываем данную таблицы к RawTable + PhantomData что говорит компилятору что у нас владеющая структура. Потом определяем метод get, который внутри использует метод find. Find возвращает сырой указатель. Но!!! Мы ведь определили метод get у &RawTable, а также привязали выходную ссылку на значение к времени жизни самой RawTable, то есть выходная ссылка будет всегда валидна, так как нельзя вернуть ссылку на удаленную таблицу.

То есть, метод find который возвращает полностью небезопасный "сырой указатель" который может существовать даже после удаления RawTable, и по определению unsafe, превратился полностью в safe. Так как с помощью метода get мы явно привязали жизнь сырого указателя к жизни RawTable. Кроме того мы привязали его не просто к таблице. Мы еще и заблокировали изменения самой RawTable, пока существует на него ссылка. И все это в 7 строк кода.

Собственно вот так и происходит переход из unsafe в safe.

Ответить | Правка | Наверх | Cообщить модератору

481. "Rust будет принят в состав ядра Linux 6.1. Создан Rust-драйв..."  +/
Сообщение от pavlinux (ok), 22-Сен-22, 19:58 
> ... могу привести адаптированный код хеш таблицы.
> ... <F>(&self, hash: u64, eq: F1) -> Option<&T>
> ... <T, A: Allocator + Clone = Global> {

Поздравляю, вы стали номинантом на премию Дарв... "Конкурса запутывания кода"

Перед вами только представитель из Олбании. (если чо, это игра в крестики-нолики)


int main(int b,char**i){long long n=B,a=I^n,r=(a/b&a)>>4,y=atoi(*++i),_=(((a^n/b)*(y>>T)|y>>S)&r)|(a^r);printf("%.8s\n",(char*)&_);}


Ответить | Правка | Наверх | Cообщить модератору

513. "Rust будет принят в состав ядра Linux 6.1. Создан Rust-драйв..."  +/
Сообщение от Аноним (420), 24-Сен-22, 18:13 
Вы код других языков видели?
Выглядит почти точно также как дженерики java 8, при том что в java они одни из самых простых, имеющих самый минимум возможностей.
В этом же C++ будут значительно более сложные конструкции
Ответить | Правка | Наверх | Cообщить модератору

316. "Rust будет принят в состав ядра Linux 6.1. Создан Rust-драйв..."  +1 +/
Сообщение от Аноним (316), 20-Сен-22, 16:40 
>> Скорее Раст обернет unsafe грабли в safe грабли

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

Ответить | Правка | К родителю #175 | Наверх | Cообщить модератору

512. "Rust будет принят в состав ядра Linux 6.1. Создан Rust-драйв..."  +/
Сообщение от morphe (?), 24-Сен-22, 18:09 
> Там то голые байтики в лучшем случае бегают и ничего не
> знают про твою безопасность.

Байты тоже можно по разному декодировать
Можно слепо кастить то что пришло с устройства в структуры, и надеяться что нигде out of bounds доступа не произойдёт/всё проверено (Т.е железо вернуло всё по спеке):
https://github.com/torvalds/linux/blob/master/drivers/gpu/dr...

А можно именно парсить:
https://github.com/tuomas56/edid-rs/blob/master/src/lib.rs

Ответить | Правка | Наверх | Cообщить модератору

516. "Rust будет принят в состав ядра Linux 6.1. Создан Rust-драйв..."  +/
Сообщение от Прохожий (??), 25-Сен-22, 17:22 
И зачем бы я мешал в одну кучу ошибки при работе с памятью с ошибками при работе железа? Раст защищает только от ошибок первого класса. Это не серебряная пуля.
Ответить | Правка | К родителю #163 | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру