LINUX.ORG.RU

Продемонстрирована возможность разработки частей Linux на Rust

 , ,


4

9

Французский программист написал статью, в которой рассмотрел возможность переписывания ядра Linux на Rust.

В статье отмечено, что данный язык хорошо подходит для системного программирования, будучи достаточно низкоуровневым и при этом лишённым многих недостатков C, и уже используется для написания новых ОС. Однако автор не считает создание ОС с нуля перспективным для серьёзного применения, и последовательный перенос отдельных частей Linux на Rust для решения различных проблем безопасности кажется ему более целесообразным.

В качестве «Proof of Concept» была приведена реализация системного вызова, содержащая вставки на Assembler внутри unsafe-блоков. Код компилируется в объектный файл, не связанный с библиотеками и интегрируемый в ядро во время сборки. Работа производилась на основе исходного кода Linux 4.8.17.

>>> Статья



Проверено: Shaman007 ()
Последнее исправление: sudopacman (всего исправлений: 5)
Ответ на: комментарий от NextGenenration

Как-то искал состав ядра linux, нашел вот такую инфу на 2011 год (не знаю насколько правдиво, но все же):

https://www.quora.com/How-many-lines-of-code-are-in-the-Linux-kernel

    C - 7,896,318 lines, 16,397 files
    C/C++ Header files - 1,629,064 lines, 13,542 files
    Assembly - 250,097 lines, 1,231 files
    DocBook XML - 40,070 lines, 140 files
    Makefiles - 23,589 lines, 1,421 files
    Perl - 14,839 lines, 41 files
    Shell Script - 4,103 lines, 76 files
    yacc - 2,978 lines, 5 files
    Python - 2,549 lines, 18 files
    C++ - 1,524 lines, 1 file
    lex - 1,321 lines, 5 files
    awk - 714 lines, 8 files
    Bash Script - 446 lines, 28 files
    HTML - 378 lines, 2 files
    NAnt Script - 372 lines, 1 file
    Lisp - 218 lines, 1 file
    ASP - 137 lines, 1 file
    m4 - 84 lines, 1 file
    XSLT - 70 lines, 6 files
    sed - 30 lines, 1 file
    Vim Script - 27 lines, 1 file
    Teamcenter def - 5 lines, 1 file

Как бы...ничего красивого.

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

Ему 2 года.

Какой ты кокетливый.)) Еще косички себе начни заплетать, как флиртующая девушка.

Уже здесь на ЛОР'е есть новости о rust'е 7-летней давности, что чрезвычайно легко проверить поиском

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

Для циклов по данным с индексацией надо использовать size_t

Глупости. size_t для размеров, теоретически могущих быть размерам всей адресуемой памяти, размером в sizeof(char). Только тогда можно смириться с отсутствием удобства знаковой арифметики и повышенным расходом памяти на этот размер.

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

Какой расход памяти? Про циклы же говорим, какая разница, будет у тебя счетчик eax занимать, или весь rax. И знаковая арифметика для счетчика цикла не нужна.

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

Announcing Rust 1.0, May 15, 2015

А то, что было до этого не считается? С версии 1.0 у rust'а произошло какбе восстановление девственной плевы?

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

Раньше он вообще был с go рутинами и сборщиком мусора, совершенно другой язык.

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

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

Глупости

Они самые. Читай стандарт, там и про индексацию, и про sizeof(char). Ну а про «повышенный расход памяти» на переменную типа size_t... Это уже наверно поздно читать.

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

Про циклы же говорим

Нет. Мы говорим про то, что указывать фиксированный размер переменных там, где надо пройтись for(i=0;i<100;i++) без сильного обоснования - полная глупость. А до/после цикла знак можно использовать как флаг (не найдено) либо вообще удобно алгоритмически, где реально надо сдвинуться назад.

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

Я зачем тебе ссылку дал? Читай!

What does it mean for Rust to be 1.0?

The current Rust language is the result of a lot of iteration and experimentation. The process has worked out well for us: Rust today is both simpler and more powerful than we originally thought would be possible. But all that experimentation also made it difficult to maintain projects written in Rust, since the language and standard library were constantly changing.

The 1.0 release marks the end of that churn.

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

The 1.0 release marks the end of that churn.

Таки эта портянка на нерусском языке и означает операцию по восстановлению целки?

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

Таки эта портянка на нерусском языке и означает операцию по восстановлению целки?

Ясно, пациент.

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

Ясно, пациент.

Ясно, поциент.

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

Так скоро systemd перепишут на Rust, разве нет?

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

Я смотрю у по хейтерству у systemd появился серьезный конкурент.

Это прекрасно, по всей видимости, ты сейчас самую суть rust'ухватил!

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

Я даже немного покосплеил смузи-тян.

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

И да, чуть не забылось. За твой артистизм и, не побоимся этого слова, мужественность в защиту rust'а, твой друг 5 раз ласково пошлепает тебя по попке.))

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

Смотри простой пример

#[derive(Debug, PartialEq)]
pub struct Data<'a> {
    value1: &'a str,
    value2: u32,
}

pub fn parse<'a>(input: &'a str) -> Result<Data<'a>, &'static str> {
    let mut lines = input.lines();
    let first = lines.next().ok_or("failed to parse value1")?;
    let second = lines.next().ok_or("failed to parse value2")?;
    let data = Data {
        value1: first.trim(),
        value2: second.trim().parse().map_err(|_| "failed to parse a number")?,
    };
    Ok(data)
}

fn main() {
    let res = parse("  Hello, World!  \n  42  ");

    assert!(res == Ok(Data { value1: "Hello, World!", value2: 42 }));
}

Этот код не делает ни одной аллокации на куче и не паникует, хоть прямо бери коммить в ядро. Возможно ли такое написать на твоем любимом D?

pftBest ★★★★
()

Мне понравилась ржавчина. Но когда я вижу что-либо с названием Rust, сразу напрашивается вопрос: кто-то считал количество использования ключевого слова «unsafe»?

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

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

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

Если язык напирает, что он безопасный, то он должен запрещать подобное.

Ты не понимаешь, как устроен Раст, и почему он устроен так, но он тебе что-то должен. Лороиксперты - такие лороиксперты.

Раст не пытается сделать все программы на нём безопасными, это невозможно; он пытается ограничить круг мест, из которых может исходить небезопасность.

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

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

Батюшки святы, еще один - 57-ой пакетник! Кто пользовался - скажите, в чем его преимущеста. И да, беспокоит отсутствие плееров, написанных на rust'е.

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

Да где в cargo unsafe то должен быть? Работа с сетью и работа с файлами. В самом cargo действительно нет нужды в unsafe, только в библиотеках работы с сетью, файлами и компилятор... Ах, вот, компилятор. В компиляторе unsafe много (и нет, я не перепутал с обработкой синтаксиса).

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

Покажи где ты видел unsafe в компиляторе? Не в стандартной библиотеке (он там и должен быть) и не в тестах, а именно в компиляторе?

Мне интересно, может он там и есть, но я когда искал не нашел. может плохо искал

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

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

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

Ну, ладно, тот unsafe кишел в стандартной библиотеке. Недоглядел. Но cargo это не тот проект, где unsafe и нужен.

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

Язык С придумывался с условием платформонезависимости и при этом возможностью предоставить доступ к управлению производительностью. Так, например, есть платформы, где нет твоих ни 8, ни 16, ни 32, ни 64 битных целых чисел. Однако есть целые числа с разрядностью в 36 бит. Отсуда вытекает следующее: стандартный тип int будет 36 бит, и операция +1 будет одной командой процессора. В расте же тип u32 будет иметь 32 бита, что удобно, но при этом компилятор будет генерировать больше комманд, т.к. ему теперь всегда придется «обрезать» значерие до 32 бит. В С ты выбираешь, как тебе удобнее. В Расте выбора нет.

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

В расте же тип u32 будет иметь 32 бита, что удобно, но при этом компилятор будет генерировать больше комманд, т.к. ему теперь всегда придется «обрезать» значерие до 32 бит.

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

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

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

Свифтоботы же. А если бы эти жалкие ничтожные личности немного бы прикоснулись к красоте, изяществу и бесконечным возможностям rust'а - они бы осознали и устыдились. Не обращай внимания на этих рабов Жоппса.

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

Свифтоботы же. А если бы эти жалкие ничтожные личности немного бы прикоснулись к красоте, изяществу и бесконечным возможностям rust'а - они бы осознали и устыдились. Не обращай внимания на этих рабов Жоппса.

Что за бред ты несёшь? Нет, я понимаю, что ты троль, но это же не диагноз. Может я ошибаюсь?

play

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

Что за бред ты несёшь? Нет, я понимаю, что ты троль, но это же не диагноз. Может я ошибаюсь?
play

Это прекрасно. Я буквально проникся этим изысканным синтаксисом! Практически как слепой, первый раз увидевший свет. (Но тут так оно и было, просто сейчас это был свет истины.) Все, выбросить swift на помойку истории!

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

Но продакшен не готов для раста.

Это смотря какой продакшен.

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

Язык С придумывался с условием платформонезависимости и при этом возможностью предоставить доступ к управлению производительностью.

Язык С придумывался в первую очередь как замена ассемблеру для PDP-11, с его заморочками и ограничениями. И только потом уже обкостыливался для всего остального:
https://www.bell-labs.com/usr/dmr/www/chist.html

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

Это прекрасно. Я буквально проникся этим изысканным синтаксисом! Практически как слепой, первый раз увидевший свет. (Но тут так оно и было, просто сейчас это был свет истины.) Все, выбросить swift на помойку истории!

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

Ты критикуешь Rust — это хорошо, но было бы лучше, если бы критика была конструктивной, по делу. Как только тебя словили на «не читал, но осуждаю», ты начинаешь переводить стрелки, уходить от темы, обезьянничать — это плохо, путь в никуда. Если ты не намерен вести диалог, то зачем ты зашёл в эту тему?

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

Всё-таки не совсем всё.

И всё-таки ничего unsafe не выключает, он даёт возможность разыменовывать сырой указатель, вызвать unsafe функцию, и изменить статическую переменную.

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

При чём тут синтаксис, если речь про семантику?

Ты не любишь красоту. Форма важнее содержания.)) И да, смена синтаксиса, без обратной совместимости - преступление ужасное, достойное казни в котле с кипяшим маслом.

Ты критикуешь Rust — это хорошо, но было бы лучше, если бы критика была конструктивной, по делу.

Знаешь, кого напоминают растоманы? Средневековых схоластов, решающих вопрос, сколько чертей уместится на кончике пера. А между тем в мире свирепствует хартблид, еще и макрософтоский компилятор SEH поддерживает (ага, завидно и обидно), а тут пишется какой-то пакетник (зачем?) и это действо выдается как нечто гениальное. Если так в заднице горит креативный огонь творчества - напишите библиотечку шаблонов на плюсах, что делает то же самое, что и rust, но нет же.

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

Еще один считает что написав «библиотечку шаблонов на плюсах» можно победить undefined behavior.

Вот с чем вы боретесь? С тем, что memcpy нельзя использовать как bcopy? И как rust побеждает эту ужасную болезнь (ага, еще и заодно лечит от опущения матки)?

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

Ты не любишь красоту. Форма важнее содержания.)) И да, смена синтаксиса, без обратной совместимости - преступление ужасное, достойное казни в котле с кипяшим маслом.

Знаешь, кого напоминают растоманы? Средневековых схоластов, решающих вопрос, сколько чертей уместится на кончике пера. А между тем в мире свирепствует хартблид, еще и макрософтоский компилятор SEH поддерживает (ага, завидно и обидно), а тут пишется какой-то пакетник (зачем?) и это действо выдается как нечто гениальное.

Я рад за тебя, но как это относится к теме арифметического переполнения в Rust?

Ты не любишь красоту. Форма важнее содержания.))

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

Я вижу ты совсем обдолбанный.

Ладно, я умываю руки. Живи в своём манямирке дальше и не выходи оттуда, пожалей окружающих.

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

Вот с чем вы боретесь? С тем, что memcpy нельзя использовать как bcopy? И как rust побеждает эту ужасную болезнь

В Rust это приведёт к ошибке компиляции.

ага, еще и заодно лечит от опущения матки

У кого что болит, тот о том и говорит.

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

Я рад за тебя, но как это относится к теме арифметического переполнения в Rust?

у руста свое особенное уличное арифметическое переполнение?

Ладно, я умываю руки. Живи в своём манямирке дальше и не выходи оттуда, пожалей окружающих.

И тебе не хворать, хе-хе.

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