LINUX.ORG.RU

Кризис при продвижении языка программирования Rust в ядро Linux

 , ,

Кризис при продвижении языка программирования Rust в ядро Linux

2

5

В сообществе разработчиков ядра Linux возникли разногласия по поводу интеграции языка программирования Rust. Кристоф Хелвиг (Christoph Hellwig), мэйнтейнер подсистем DMA, KVM, Slab Allocator и архитектуры PowerPC в ядре Linux, в своё время входивший в управляющий технический комитет организации Linux Foundation и выступавший истцом в связанном с GPL судебном разбирательстве с VMware, отказался подтверждать патчи, связанные с поддержкой разработки драйверов на языке Rust.

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

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

Неcмотря на высказанное разработчиками проекта Rust for linux намерение о полностью самостоятельном сопровождении написанной на Rust кодовой базы, на прием патчей было наложено вето.

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

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

>>> Подробности (OpenNet)



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

Кто-то штангу 200 кг жмёт, а ты и я нет.

Все ещё skill issue.

Я не управляю Linux Kernel и мне вся эта возня с Арчем не нужна. Мне свою работу делать надо - сейчас на Go, раньше на Java.

Жалкое зрелище. Айтишник не может сделать то, что делает 50-летний дед.

Чтобы не пользоваться глючным Арчем, очевидно же. Разумеется и Федора - не идеал. Но для моей работы она является более адекватным выбором.

Но ты сидишь и страдаешь что у тебя Git ненормальный, а у меня все отлично.

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

Вот и для последнего нужна стандартизация. А иначе как их заставить?

Сразу видно Java и корпорацию. «Стандартизация», «заставить». Идите, пожалуйста, обратно в свое стойло, а то вам скрам-мастер по попке настучит.

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

В общем, выглядит как иллюстрация известного выражения «Обещать — ещё не значит жениться!»... ;P :))))

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

бесшовный интероп с Си-кодом

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

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

обработка ошибок топовая

Если я правильно понял, то она либо копирует, либо переизобретает ту систему что есть в Ada, но в Ada я бы сказал более красиво использовали begin end, добавив возможность вставить в середину еще и exception, который тоже самое что и catch в С подобных языках.

procedure Open_File is
   File : File_Type;
begin
   begin
      Open (File, In_File, "input.txt");
   exception
      when E : Name_Error =>
         Put ("Cannot open input file : ");
         Put_Line (Exception_Message (E));
         raise;
   end;
end Open_File;

Сами ошибки надо описывать, но в одну строку

Error1: exception;
Error2: exception;
Error3: exception;
procedure ... ();
begin
  ...
  raise Error1;
  ...
end;

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

Все ещё skill issue.

Всё ещё мне не нужно.

Жалкое зрелище. Айтишник не может сделать то, что делает 50-летний дед.

50 лет - это ещё не дед и я не на много младше его. Есть и тяжёлоатлеты, жмущие 200 кг. Пристыдись и уйди в монастырь.

Но ты сидишь и страдаешь что у тебя Git ненормальный, а у меня все отлично.

Совсем не страдаю и Git у меня нормальный. Это ты страдаешь какой-то дислексией и глюками Арча.

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

Сразу видно Java и корпорацию. «Стандартизация», «заставить». Идите, пожалуйста, обратно в свое стойло, а то вам скрам-мастер по попке настучит.

У меня нет никакого скрам мастера и я уже не в Java. Но я узнаю знакомое хамство арчеводов. Это было второй причиной оставить Арч в стойле таких как ты и больше им не интересоваться.

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

У меня нет никакого скрам мастера и я уже не в Java.

Можно вытащить джависта из корпорации, но корпорацию из джависта нельзя.

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

макросы не поддерживаются. В некоторых библиотеках любят макросов навалить, вместо inline функций, вместо enum.

Быстрый гуглеж говорит это работает:

void f(int a, int b);
#define RUN_F(a) f(a, 3)
const c = @cImport({
    @cInclude("c.h");
});

pub fn main() void {
    c.RUN_F(1);
}
sarumeister
()
Ответ на: комментарий от zg

Тебе нравится быть клоуном?

Ты пришел в этот тред, ноешь что у тебя Git неправильный, дистрибутивы неправильные, жать ты не умеешь, а клоун при этом я?

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

а есть ЯП «А»?

есть А#, типа Ада за решеткой, или на решетке
или Ада гриль
не знаю как бы это так прочитать правильно
говорят «шарп» - ну это у них, а у нас «шарпей» знаю, а «шарп» это кто вапще?

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

поэтому «кресты» а не си-плюс-плюс ну и прочее

и нет, языка А нет
свободная касса!

:)

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

и нет, языка А нет
свободная касса!

Хехе, ну чтож, приступим :)))

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

Интересно, а есть ЯП «А»? :)

Вы тут чё, совсем с катушек съехали? Манямирок манямирком, но берега-то путать не надо.

In 1985, Arthur Whitney created the A programming language to replace APL.

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

Не «появляется интрефейс», а появляется «реализация интерфейса».

Это откуда вы взяли такую странную терминологию?

Прогугли в яве / сишарпе употребление этих терминов и стоящую за этим логику. Оно не ограничено этими языками, достаточно повсеместно встречается в IT, и в разработке ядра в т.ч. Это надо знать.

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

Ты сначала с "интерфейсами" разберись - это более фундаментально.

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

Если я правильно понял, то она либо копирует, либо переизобретает ту систему что есть в Ada, но в Ada я бы сказал более красиво использовали begin end, добавив возможность вставить в середину еще и exception, который тоже самое что и catch в С подобных языках.

Не думаю. В этом коде я вижу исключения. «Catch в С подобных языках» — это ведь про исключения? Вместо исключений в зиге сум-типы возвращаемого значения. Ключевое слово try пробрасывает ошибку наверх, а не начинает блок.

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

Я на другое больше обратил внимание, простая декларация типов исключений, и выбор либо из enum error либо из T value.

В Zig/Java нужен отдельный блок для проверки, в Ada он добавлен одним словом между ограничителями блока.

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

Да, нужно создать два новых блока, в середину {} трудно что то встроить.

{
  1
  if() {
    2
  } else {
    3
  } 
}

В Ada так:

begin
  1
exception
  2
end

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

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

и само представление ошибки zig и исключения ada похоже

Фраза предполагает, что исключения в целом норм. А они не так чтобы вообще норм.

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

А я думал, что это «просто» © ПЦ... Локальный или нет, не знаю...

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

Сравнение с setjmp/longjmp выглядит точнее.

setjmp/longjmp – это тоже нелокальный goto :)

Там буквально в мануале написано: «The functions described on this page are used for performing «nonlocal gotos»: transferring execution from one function to a predetermined location in another function.»

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

Исключение – это просто нелокальный goto. Со всеми вытекающими.

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

это вообще не goto, а вызов цепочки завершателей блока и обработчиков исключений.

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

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

Я считаю что это лучше чем вставка условия после каждого вызова функции.

Там нет вставки условия после каждого вызова. Каждый вызов при желании можно try с пробросом наверх, можно catch unreachable для паники. Можно написать что сложнее, как в моем примере с if.

Есть конструкция errdefer |err| {…} — пожалуй самый близкий аналог catch(auto &e) {…}, с той разницей, что обычно ставится сверху, а не снизу.

Как-то меня утомило обсуждение современных практик обработки ошибок. Давайте поговорим про библиотечный рантайм. В зиге нет зависимостей к рантайму.

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

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

Если нужно пробрасывать ошибку наверх, то будет.

Давайте поговорим про библиотечный рантайм. В зиге нет зависимостей к рантайму.

А есть возможность отделить стандартную библиотеку в сошку? Как glibc отделяется в С.

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

А есть возможность отделить стандартную библиотеку в сошку? Как glibc отделяется в С.

Понять бы еще, что необходимо отделить.

sarum@rockpi:~/t/zig14$ ldd my-shrink-path
        not a dynamic executable

sarum@rockpi:~/t/zig14$ ls -al my-shrink-path
-rwxr-xr-x 1 sarum sarum 9184 Feb  8 13:54 my-shrink-path

sarum@rockpi:~/t/zig14$ file my-shrink-path
my-shrink-path: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), statically linked, stripped
sarumeister
()
Последнее исправление: sarumeister (всего исправлений: 2)
Ответ на: комментарий от MOPKOBKA

Исполняемый файл от zig-std.so конечно же.

Во-первых непонятно зачем. И во-вторых, компайл-тайм все равно будет использовать все свое. То есть ответ — нет.

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

Во-первых непонятно зачем.

Ну стандартный принцип опакечивания в Linux. И .so можно поставлять еще нескольких видов, например x86-64-v3, x86-64-v1, в зависимости от cpu выбирается нужная.

А в целом есть динамические zig библиотеки? Пусть не std.

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

Динамические библиотеки делает. Стандартный метод опакечивания отрицает. Особенно хорошо без зависимостей в васм-выхлопе.

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

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

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

У токсичных обезьянок все работает, у них есть женщины, новые версии Git и Greg KH. Они самодостаточны и смело смотрят в будущее. Тем временем пользователи Fedora страдают и не уверены в завтрашнем дне, потому что IBM режет косты и от и так маленького сообщества мейнтейнеров Fedora не осталось ничего. Даже новых Git нет. Мне вас жаль.

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

У токсичных обезьянок все работает

Практика показала, что это ложь.

у них есть женщины

О женщинах речи не было, но видимо у тебя наболело…

новые версии Git и Greg KH

И Ленин всегда молодой

Они самодостаточны и смело смотрят в будущее

Они просто задроты и про женщин таки не случайно

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

Ещё Арчеводы страдают навязчивымы идеями о пользователях других дистрибутивов

потому что IBM режет косты и от и так маленького сообщества мейнтейнеров Fedora не осталось ничего

Откровение о неэффективности огромной армии Арче-подростков в команде глюкодрома

Даже новых Git нет

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

Мне вас жаль.

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

zg
()
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.