The OpenNET Project / Index page

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



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

Оглавление

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

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


80. "Rust будет принят в состав ядра Linux 6.1. Создан Rust-драйв..."  –1 +/
Сообщение от Аноним (80), 20-Сен-22, 09:26 
Ну по крайней мере после критики Линусом качества заплаток выпущенных штеудом раст их заставит писать безопасный код, а то были же вопли про потраченные миллионы длларейна разработку драйверов под линукс штеудом. Сколько там было? 50 миллионов долларов? На этот раз ждем сравнения в цене, скорости и стабильности за ту же цену. Вот тогда можно будет понять стоит ли заниматься переписыванием на раст того что уже рвботает. А если серьезно, то Линуссам сопротивлялся проталкиванию плюсов в ядро. Сказал Раст, говори и С++.
Ответить | Правка | Наверх | Cообщить модератору

133. "Rust будет принят в состав ядра Linux 6.1. Создан Rust-драйв..."  +4 +/
Сообщение от Аноним (87), 20-Сен-22, 10:23 
Безопасный unsafe код? Как ты вообще без unsafe собрался взаимодействовать с железом. Но зачем тогда раст если там unsafe не проще ли оставить unsafe на том языке на котором он был и что-то более высокого уровня написать на нормальном языке, например на быстром и безопасном языке Карбон.
Ответить | Правка | Наверх | Cообщить модератору

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ообщить модератору

418. "Rust будет принят в состав ядра Linux 6.1. Создан Rust-драйв..."  +/
Сообщение от Аноним (418), 21-Сен-22, 07:21 
Да, вы правы, но любой язык программирования предполагает свои особенность и иметь возможность написать код на расте лучше чем не иметь таковой так как для микроконтроллеров и т.д. где важна стабильность можно получить больше выхлопа именно в данном случае. Если линукс будет стабильнее работать с потерей 1% скорости это ни на что кардинально не повлияет. Все равно один используя язык программирования будет программистом, хоть профессиональным, а другой будет создавать что-то и вас никто не заставляет учиться создавать нечто новое. Раст как системный язык подходит, хоть он и не идеален. Мне просто непонятно почему С++ тогда послан был с такой помпой мол типа он вообще огромен и никуда не годится. Думаю лучше если код будут писать на всех языках, которые подходят под задачу написания системного кода.
Ответить | Правка | К родителю #133 | Наверх | Cообщить модератору

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

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




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

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