Tabs vs Spaces: что по этому поводу думают linux kernel hackers
Давненько тут не было холиваров по поводу извечного спора «табы или пробелы?..»
Залез тут давеча в исходники ядра и увидел, что отступы сделаны табами размером 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