singalen: (humpty-dumpty)
singalen ([personal profile] singalen) wrote2006-01-10 10:44 am

Религиозное - о пробелах и табуляциях в текстах программ

Вынесено из комментов.
Я принципиально использую пробелы, потому что:
1. Читатель НЕ настраивает софт, которым читает код. Поэтому код должен выглядеть единообразно в любой смотрелке.
2. Слова о том, что кто-то что-то "может настроить как ему нравится" - обычно buzz. Потому что а) история не знает сослагательного наклонения, б) большинство ничего не делает по этому поводу.
3. Код читают (и ещё всячески обрабатывают) в разных программах, в т.ч. таких, где нельзя настроить размер табуляции.
4. Табуляция, может, и была придумана для отступов в программах, но в те времена, когда имена переменных были много короче 8 символов. А значит, табами можно было форматировать текст в красивые колонки и он не вылезал за правый край терминала. Те времена давно прошли.

[identity profile] dottedmag.livejournal.com 2006-01-10 02:01 am (UTC)(link)
5. Код не только читают, но и обрабатывают. Всякие инструменты тоже не умеют настраиваться: браузеры, diff'еры и прочее.

[identity profile] upstartn.livejournal.com 2006-01-10 02:31 am (UTC)(link)
Безусловно, лучше использовать пробелы. Даже вступать в тот флейм не хотелось. Только дело тут не в принципах, разумеется, а просто в том, что это разумнее и удобнее.

[identity profile] kelyar.livejournal.com 2006-01-10 03:08 am (UTC)(link)
по-моему тут вообще нечего обсуждать.
разве что способы реализации )

set expandtab
set tabstop=4
vitus_wagner: My photo 2005 (Default)

[personal profile] vitus_wagner 2006-01-10 03:23 am (UTC)(link)
Не согласен.
1. Я знаю чем пользуются довольно многие из людей, которые полезут в мой код - 90% - либо vim, либо emacs.

2. Я точно знаю у значительного числа из этих людей табуляция настроена так, как им удобно.
Мнение о моем коде (имеется в виду opensource) тех людей, у которых редактор не настроен, меня, как правило, не интересует. Поскольку они не обладают первой из трех добродетелей программиста по Ларри Уоллу.

3. Утилитам, которые обрабатывают код, как правило пробелы/табуляции пофигу. whitespace оно и есть whitespace. (to [livejournal.com profile] dottedmag - а результаты diff-а надо тоже в любимом редакторе смотреть).

4. Те кто пишет код такой вложенности что при разумном размере табуляции (2-4 символа) оно не влазит на терминал 80x25 независимо от длины идентификаторов - неправы.

vitus_wagner: My photo 2005 (Default)

Re: Ну вот, holy war...

[personal profile] vitus_wagner 2006-01-10 04:57 am (UTC)(link)
Я работаю и над проприетарными, и над открытыми проектами. Причем, что характерно, множество людей читающих мой код и в том, и в другом случае - сильно пересекается.

В корпоративной среде - все сильно проще. Берем и устанавливаем корпоративный стандарт. Проконсультировавшись, естественно, у наиболее опытных и уважаемых сотрудников. А всех остальных просто силой заставляем этот стандарт использовать.

В итоге мы с коллегами посовещались и решили что у нас в конторе стандарт - табуляция.

Разговор о том, как правильнее писать имеет смысл только в контексте неопределенной аудитории, то есть в случае OpenSource.

Ограничение набора инструментов - в первую очередь самоограничение. В мире OpenSource тоже есть куча всяких IDE-образных поделок и code-browser-ов. Посмотрели, попробовали, выругались и выбросили. Понятно, что проприетарную софтину, за которую деньги плачены - выкидывать жальче. Но ведь обычно есть trial-версии.

Что такое "клиент email" я не совсем понимаю. Бывает e-mail внутри Emacs, бывают E-Mail клиенты, которые в качестве редактора вызывают vim, всё остальное просто неудобно в использовании.

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

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

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

Re: Ну вот, holy war...

[identity profile] sanyok-ua.livejournal.com 2006-01-22 08:51 am (UTC)(link)
Что такое "клиент email" я не совсем понимаю.

Есть такой термин - MUA. Гугль расскажет.

Бывает e-mail внутри Emacs, бывают E-Mail клиенты, которые в качестве редактора вызывают vim, всё остальное просто неудобно в использовании.

Я вот как-то плохо представляю, как люди, не связанные с программированием (к примеру, product specialists) могут использовать mutt/pine/gnus etc.
Потому что для удобной работы их нужно очень долго настраивать под себя. Причём это итеративный процесс, в духе "попользовал пару дней - показалось странным нечто - перенастроил", то есть спихнуть эту работу на специального человека не получится.

Добавив сюда тот факт, что ни один из вышеназванных не поддерживает out-of-box генерацию HTML, в котором обычно идёт 90% корпоративной переписки (спорить по поводу того, что HTML в письмах нужен, совсем не хочется - это и так очевидно), а также отсутствие мало-мальского юзабилити - и оказывается, что пользовать их неэффективно не только в плане своего времени, но и в плане времени корреспондентов (меня вот просто бесит, когда очередной отвечающий отвечает на HTML-письмо в plain text, теряя все выделения цветом фрагментов кода, выделения жирным ключевых фраз etc. - ему плевать не только на своё, но и на моё время)

[identity profile] dottedmag.livejournal.com 2006-01-10 04:23 am (UTC)(link)
Давно у нас появился переносимый между разными редакторами стандарт на перекрёстные ссылки в коде? Plain text хорош для редактирования, а не для навигации.
vitus_wagner: My photo 2005 (Default)

[personal profile] vitus_wagner 2006-01-10 04:57 am (UTC)(link)
Давно. Doxygen называется.

Re: Reply to your comment...

[identity profile] dottedmag.livejournal.com 2006-01-10 04:59 am (UTC)(link)
А ты его в w3m смотришь? А если не в w3m, то расскажи, где в твоём
браузере настраивается размер таба.
vitus_wagner: My photo 2005 (Default)

Re: Reply to your comment...

[personal profile] vitus_wagner 2006-01-10 05:16 am (UTC)(link)
Так и быть, открою тебе эту страшную тайну

Re: Reply to your comment...

[identity profile] dottedmag.livejournal.com 2006-01-10 05:27 am (UTC)(link)
Попался! Ты-таки настраиваешь другие инструменты, помимо редактора. И,
мало того, каждый, кто использует свой размер таба, тоже настраивает.

А теперь вопрос - зачем? ;)
vitus_wagner: My photo 2005 (Default)

Re: Reply to your comment...

[personal profile] vitus_wagner 2006-01-10 05:31 am (UTC)(link)
Я настраиваю все программы, с которыми работаю (если они вообще умеют настраиваться).
Зачем? А чтобы работать было удобнее. Как правило, с помощью небольшого числа хорошо знакомых и настроенных инструментов можно добиться куда большей эффективности, чем с помощью большого числа инструментов, которыми сам не помнишь как пользоваться.

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

Re: Reply to your comment...

[identity profile] dottedmag.livejournal.com 2006-01-10 05:41 am (UTC)(link)
Только не надо Unix-пропаганды, я её сам веду часто :)

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

ps: кстати, браузеры уже научились показывать в виде N+1
пробельного символа, а не N? А то те же diff'ы в них ужасно смотрятся.
(deleted comment)

[identity profile] bogdanv.livejournal.com 2006-01-10 02:37 pm (UTC)(link)
Я поддерживаю одного из предыдущих ораторов :) — спорить тут не о чем.
Символ табуляции — это всего лишь способ сэкономить на пробелах, а сейчас эта экономия уже не нужна. Слава богу, мы уже не ограничены цифрами 640, 80x25, 8.3, 33600 и т.п.

[identity profile] bogdanv.livejournal.com 2006-01-11 12:30 am (UTC)(link)
"Символ табуляции — это всего лишь способ сэкономить на пробелах"

Следует читать как

"Использование символа табуляции для отступов в коде — это всего лишь способ сэкономить на пробелах"