LINUX.ORG.RU
ФорумTalks

Tabs vs Spaces: что по этому поводу думают linux kernel hackers

 , , , ,


1

4

Давненько тут не было холиваров по поводу извечного спора «табы или пробелы?..»

Залез тут давеча в исходники ядра и увидел, что отступы сделаны табами размером 8 символов (как и рекомендует code style), но при выравнивании аргументов функции иногда используется mix табов и пробелов, например, тут (drivers/cpufreq/cpufreq_conservative.c):

static ssize_t ignore_nice_load_store(struct gov_attr_set *attr_set,                                                                                                                         
<------><------><------><------>      const char *buf, size_t count)

Т.е. те, кто аргументируют преимущество табов возможностью самому настраивать длину таба, получат плохое выравнивание, например, в случае tab == 4 spaces:

static ssize_t ignore_nice_load_store(struct gov_attr_set *attr_set,                                                                                                                         
<--><--><--><-->      const char *buf, size_t count)                                                                                                                                    

Так почему же длина табов должна быть равна 8 пробелам?.. По мнению разработчиков ядра, вот почему:

Tabs are 8 characters, and thus indentations are also 8 characters. There are heretic movements that try to make indentations 4 (or even 2!) characters deep, and that is akin to trying to define the value of PI to be 3.
In short, 8-char indents make things easier to read, and have the added benefit of warning you when you're nesting your functions too deep. Heed that warning.

Почему в этом случае табы всё равно предпочтительнее пробелов?.. Разработчики ядра скромно умалчивают:

Outside of comments, documentation and except in Kconfig, spaces are never used for indentation, and the above example is deliberately broken.

Помимо описания проблемы выравнивания, в code style ядра содержатся также много других лулзов, в частности:

However, there is one special case, namely functions: they have the opening brace at the beginning of the next line...
Heretic people all over the world have claimed that this inconsistency is ... well ... inconsistent, but all right-thinking people know that (a) K&R are right and (b) K&R are right. Besides, functions are special anyway (you can't nest them in C).

В старых версиях code style (например, 4.10) также присутствовало следующее утверждение:

Encoding the type of a function into the name (so-called Hungarian notation) is brain damaged - the compiler knows the types anyway and can check those, and it only confuses the programmer. No wonder MicroSoft makes buggy programs.

Потом упоминание мелкософта убрали, видимо, под давлением корпораций... :)

Итак, лет зе холивар бегин: что лучше, фиксированные табы длиной 8 или пробелы?..

P.S. Кстати, последний опрос по этому поводу был аж 10 лет назад, можем повторить :) Tabs vs. Spaces

★★★★☆

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

По сравнению с Лиспом это сущие пустяки.

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

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

Лучше скажите какой работодатель захочет набирать программистов на Лиспе?

Скажите честно, родители заставляли вас писать на бейсике?

Родители что-то на перфокартах набирали, сами уже не помнят что.

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

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

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

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

выравнивают жамкая таб, а потом добивая пробелами

Потом кто-то меняет размер таба, а добивка пробелами-то остаётся прежней… рррряяя, всё уехало! невозможно работать в этом зверинце, одни рукожопы кругом!

Товарищ, помни: пробелы берегут (и так хрупкое) психическое здоровье, твоё и твоих коллег! Увидел таб — убей таб!

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

Кто вообще придумал ширину таба настраивать? Какой-то знатный конфигураст.

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

Товарищ, помни: пробелы берегут (и так хрупкое) психическое здоровье, твоё и твоих коллег!

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

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

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

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

Зачем нам, говорит, вообще табы, если их гибкостью не пользоваться? Я даже и не знаю, что ему на это возразить. На традицию давить попробовать, может?

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

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

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

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

Не должно быть возможности скомпилировать или запустить код, если он не пропущен через ОДИН стандартный форматтер, который распространяется вместе с компилятором/интерпретатором разработчиками языка.

Ну и просто добавляем форматтер перед вызовом компилятора, и шлём фашню навязывающую ширину оступов нахрен.

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

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

Всё просто: включаешь в редакторе показ пробелов — проблемы с отступами сразу становится видно невооруженным глазом. Другое дело, что неадекватов пользующихся табом шириной в 8 символов становится меньше, потому возникла возможность договориться раз и навсегда про 2-3-4 пробела (в зависимости от языка, на JS 4 пробела уже много).

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