LINUX.ORG.RU

Линус Торвальдс пояснил свою позицию в отношении приёма изменений на Rust

 ,


0

7

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

Линус раскритиковал действия Кристофа Хелвига, мэйнтейнера подсистем DMA, KVM, Slab Allocator и архитектуры PowerPC. По мнению Линуса, Кристоф превысил свои полномочия и попытался повлиять на код, который не затрагивал код подсистемы DMA, был реализован в отдельном подкаталоге и не влиял на код, за который отвечает Кристоф. Кристоф попытался контролировать то, для чего используется подсистема DMA, и его действия можно сравнить с попыткой запрета использования DMA в каком-то драйвере, лишь потому, что ему не понравился этот драйвер. Итог: несмотря на то, что сопровождающие отвечают за свой код, они не отвечают за то, кто и как использует результат работы этого кода.

>>> Письмо Линуса

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

★★★★★

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

, а тут шаблоны довольно искусственные Чем они «искусственные» и какие бывают «естественные»?

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

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

Шаблоны С++ более выразительны, нет этих дурацких аннотаций derive, ясно прямо из шаблона, чем что параметризовано.

Ха-ха. Так ясно, что приходится городить нечто подобное?

typename boost::disable_if< boost::is_base_of<A, T> >::type function(T const& t);

Выразительность 80-го уровня, ага.

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

Вопрос, зачем ты до этого докапываешься?

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

Я не хочу спорить о том, в чем мало понимаю. В частности, я плохо понимаю, зачем нужен язык с классами и без наследования. А так же не понимаю, зачем в коде раста вечный self и к чему он относится? Ну прям объектная ориентированность как в Питоне, чесслово.

Вот пример попроще — https://doc.rust-lang.ru/stable/rust-by-example/trait.html

Вот объясни мне, если Овца является Животным и создается с целью использования интерфейса Животного, то за каким хреном возможен вызов метода «стрижка»? Интерфейс Животное метода «стрижка» не содержит. Все эти трейты, получается, являются чем-то сбоку прикрученными. То есть, получается, что вместо наследования имеется какая-то неявная параметризация. Шаблонов нет, но на лицо этакая параметризация через шаблон.

И если нам понадобится Волк, то придется писать

impl Animal for Wolf

Ну и что сказать-то типажами хотели?

Ха-ха. Так ясно, что приходится городить нечто подобное?

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

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

Вот пример попроще — https://doc.rust-lang.ru/stable/rust-by-example/trait.html

вот на этом примере видна чудовищность рустораста.

перечисляем

  1. на основании описания
struct Sheep { naked: bool, name: &'static str }

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

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

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

а если таких вот «классов» в модуле много… то запутаться тут запросто.

– 2. это видимо косорукая форма записи нестатического(в терминах с++) метода.

fn name(&self) -> &'static str;

  1. странный выбор ключевого слова impl.
impl Sheep

смысл термина имплементация в том, что так обозначается реализация ранее об`явленной декларации нечта. но Sheep это просто структура, и в ней ничто не декларируется, кроме полей. то есть «реализация списка полей» … это звучит просто неграмотно.

по смыслу должно быть не impl, а bindings(типа того) - то есть описание связанных с типом функций.

короче парни тырили у вирта с его обероном, но не читали, что он там написал словами вокруг.

 // Можно переопределить методы по умолчанию, заданные в типаже.
    fn talk(&self) {

если это типа виртуального метода с++, то надо вводить спецификатор навроде override. иначе можно переопределить не тот метод, или вообще никакой не переопределить, просто ошибившись буковкой.

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

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

Врёт. Я её вот тут взял

Гугл врет. А юзерс-растланг не врет. Окей.

Сайт белого дома байденовской администрации переехал в архив на bidenwhitehouse-archives-gov. Со всеми пресс-релизами.

sarumeister
()

Кстати, а firefox уже на раст переписали?

sabacs
()
Закрыто добавление комментариев для недавно зарегистрированных пользователей (со score < 50)