LINUX.ORG.RU
ФорумTalks

Форматирование в Rust

 , ,


0

5

Линус Торвальдс выразил обеспокоенность по поводу автоматизированного инструмента форматирования и практики форматирования текста Rust в недавнем обсуждении Linux Kernel Mail List.

https://news.itsfoss.com/linus-torvalds-criticizes-drm-merge/

★★★★★

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

Линус при разрешении конфликта в Rust оформил импорты по одному на строку, чтобы избежать будущих конфликтов. Но rustfmt предложил объединить их в одну строку, что Линус назвал «bass-ackwards garbage» и раскритиковал автоматическое форматирование за усложнение работы.

CrX ★★★★★
()

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

panter_dsd ★★★★★
()
Ответ на: комментарий от LightDiver
Обратите внимание, что здесь есть несколько подразделов: Alloc, DMA/Scatterlist, DRM и Rust.

Но все это просто беспорядочная смесь, потому что вы, по-видимому, вставили ее в свой редактор или MUA или что-то еще и при этом упустили отступы.

Или что-то в этом роде.

Какой неработающий редактор вы используете? Я не пытаюсь развязать здесь
войну между emacs и vi, но вы, похоже, используете что-то действительно неработающее.

EDLIN?
dataman ★★★★★
()

Вот когда гит научится в language-based дифы, вот тогда и не понадобится импорты форматировать.

UPD: пизжу, оказывается у кого-то просто rustfmt не настроен.

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

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

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

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

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

Раст сейчас продвигают те, чья рука уже даже не по локоть, а по плечо в жопе у Линуса. Так что врядли он станет сильно что то возражать. Раст сейчас это мейнстрим и он с явным недовольством это примет.

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

Не хочешь пользоватья форматированием официальным, не пользуйся, форматируй сам

То есть топик ты не читал.

u-235
()
Ответ на: комментарий от LightDiver

Раст сейчас продвигают те, чья рука уже даже не по локоть, а по плечо в жопе у Линуса.

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

u-235
()
Ответ на: комментарий от u-235

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

В этой стране никто не верит в то, что делает власть, вот и проецируют на разработку)

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

Раст сейчас это мейнстрим

А что такое мейнстрим? Судя по недавнему на ЛОРе выкладыванию всяких рейтингов ЯП, раст в отстое.

mx__ ★★★★★
() автор топика
I noticed that people added multiple

  use crate::xyz;

next to each other, so I turned them into

  use crate::{
     xyz,
    abc,
  };

instead to make it easy to just add another crate without messing crap
up. The use statements around it had that format too, so it all seemed
sensible and visually consistent.

But then I run rustfmtcheck, and that thing is all bass-ackwards
garbage. Instead of making it clean and clear to add new rules, it
suggests

  use crate::{xyz, abc};

but I have no idea what the heuristics for when to use multiple lines
and when to use that compressed format are.

This is just ANNOYING. It's automated tooling that is literally making
bad decisions for the maintainability. This is the kind of thing that
makes future conflicts harder for me to deal with.

Miguel, I know you asked me to run rustfmtcheck, but that thing is
just WRONG. It may be right "in the moment", but it is

 (a) really annoying when merging and not knowing what the heck the rules are

 (b) it's bad long term when you don't have clean lists of "add one
line for a new use"

Is there some *sane* solution to this? Because I left my resolution
alone and ignored the horrible rustfmtcheck results.

I tried to google the rust format rules, and apparently it's this:

    https://doc.rust-lang.org/style-guide/index.html#small-items

can we please fix up whatever random heuristics? That small items
thing may make sense when we're talking things that really are one
common data structure, but the "use" directive is literally about
*independent* things that get used, and smushing them all together
seems entirely wrong.

I realize that a number of users seem to just leave the repeated

   use kernel::xyz;
   use kernel::abc;

as separate lines, possibly *becasue* of this horrendous rustfmt
random heuristic behavior.

Ну т.е. опыта с растом у Торвальдса маловато. Как с настройкой системы и редактора. Раз уж взял в ядро ржавого, то пусть учиться и колется, как все остальные ёжики.

Для мержей чуть лучше:

   use kernel::xyz;
   use kernel::abc;

чем:

  use crate::{
     xyz,
    abc,
  };

Хотя бесит эта портянка. И если добавят такой вариант в rustfmt, то будет очень хорошо.

С другой стороны в ядре хоть какой-то подход к этому есть вообще? А то rust/kernel/error.rs:

// SPDX-License-Identifier: GPL-2.0

//! Kernel errors.
//!
//! C header: [`include/uapi/asm-generic/errno-base.h`](srctree/include/uapi/asm-generic/errno-base.h)

use crate::{
    alloc::{layout::LayoutError, AllocError},
    str::CStr,
};

use core::fmt;
use core::num::NonZeroI32;
use core::num::TryFromIntError;
use core::str::Utf8Error;

З.Ы.: Интересно, а до глобального clang-format дойдёт?

AlexVR ★★★★★
()

Да кого волнует мнение какого-то там финского студента? Написал нам линукс — и свободен! (%

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

Edlin

А ничего, что ed/ex включены в любую полноценную UNIX-like операционную систему? (%

Тут попахивает откровенным сектантством…

mord0d ★★★★★
()

Посмотрел, что тут пытался подправить Линус.

drivers/gpu/drm/nova/gem.rs:

use kernel::{
    drm,
    drm::{gem, gem::BaseObject},
    prelude::*,
    sync::aref::ARef,
};

drivers/gpu/drm/nova/file.rs:

use kernel::{
    alloc::flags::*,
    drm::{self, gem::BaseObject},
    pci,
    prelude::*,
    uapi,
};

drivers/gpu/drm/nova/driver.rs:

use kernel::{
    auxiliary, c_str, device::Core, drm, drm::gem, drm::ioctl, prelude::*, sync::aref::ARef,
};

Кто в лес, кто по дрова…

AlexVR ★★★★★
()
    pub(crate) fn new(dev: &NovaDevice, size: usize) -> Result<ARef<gem::Object<Self>>> {
        let aligned_size = size.next_multiple_of(1 << 12);

        if size == 0 || size > aligned_size {
            return Err(EINVAL);
        }

        gem::Object::new(dev, aligned_size)
    }

мда… may be panic

AlexVR ★★★★★
()

автоматизированного инструмента форматирования

Киньте ссылку на описание этого языка в формате БНФ.

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

То, что пропихивают корпорации, продукты которых являются основой всего сейчас. Не сам он из всех утюгов лезет.

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

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

Киньте ссылку на описание этого языка в формате БНФ.

Ну ты захотел…

Современный сахарок такой затейливый…

AlexVR ★★★★★
()
Ответ на: комментарий от u-235

Разработка ядра – это для Линуса уже чужой монастырь? Сильно!

Старикашку давно пора отменить за его неподобающее поведение, которое он демонстрировал 20 лет назад.
Геть его! Ату!
:D

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

А ничего, что ed/ex включены в любую полноценную UNIX-like операционную систему? (%

Много народу правит исходники в ed?

[ЖЖ]Полез в Википедию смотреть про ex, дочитал, машинально попытался закрыть вкладку при помощи :q [/ЖЖ]

question4 ★★★★★
()
Ответ на: комментарий от u-235

а в ядро его взяли потому что он безопасный

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

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

в ядро его взяли потому что он безопасный

Безопасный он только когда

Это была шутка юмора, основанная на заклинаниях растобоев.

u-235
()
Ответ на: комментарий от uin

Безопасный он только когда на нем пишут используя safe-семантику

нет, не только

большинство же разрабов используют unsafe что бы не воевать со статическим анализатором,

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

Неужели в раст добавили return?

с самого начала был

короче, нихрена не знаешь не понимаешь но мнение имеешь, перестань так делать

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

большинство же разрабов используют unsafe что бы не воевать со статическим анализатором,

Странные слова. unsafe используют совсем по другим причинам.

AlexVR ★★★★★
()

Ну пусть напишут linux-rust-fmt, который будет форматировать под стиль, удобный товарищу Линусу. Делов-то.

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

нет, не только

Но называть эти самые «безопасные» фичи раста ты не станешь, потому что

большинство разрабов не воюют с компилятором а используют

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

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

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

На моё ИМХО, ЛЮБОЕ автоматическое форматирование – зло. Т.к. всех ситуаций не предусмотришь, и во огромном количестве случаев оно просто сломает то, что с т.з. человека – удобно и эстетично. Что мы собственно и наблюдаем. Или, например, преобразует сами знаете в чёрт знает что такую довольно часто встречающуюся банальщину:

if (aaa  = bbb ) { ccc (ddd ); }
if (aaa2 = bbb2) { ccc2(ddd2); }
if (aaa3 = bbb3) { ccc3(ddd3); }

Вот будет эта тупая железяка код писать – пусть свой собственный код и форматирует как ей заблагорассудится. А в мой код лезть не надо.

dimgel ★★★★★
()

Ещё не предлагали улучшить резолв конфликтов в гите?

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

Ну если для вас ваш собственный код – ерунда… то в общем верю. Равнодушных ремесленников – в любой профессии большинство.

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

Отвечу словами Линуса:

And quite frankly, for most of the real problems (as opposed to the stupid
bugs - of which there are many, as the latest crap with "truncate()" has
shown us) a debugger doesn't much help. And the real problems are what I
worry about. The rest is just details. It will get fixed eventually.

(Речь идёт о дебаггере, не форматтере. Но учитывая ещё большую отдалённость форматтера от «реальных проблем», смысл сообщения усиливается.)

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