git@vger.kernel.org mailing list mirror (one of many)
 help / color / mirror / code / Atom feed
From: Luke Lu <git@vicaya.com>
To: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Christer Weinigel <christer@weinigel.se>,
	Tom Tobin <korpios@korpios.com>,
	git@vger.kernel.org
Subject: Re: On Tabs and Spaces
Date: Wed, 17 Oct 2007 00:17:08 -0700	[thread overview]
Message-ID: <3A9408D5-2667-43A6-A0CE-C0720B3A3987@vicaya.com> (raw)
In-Reply-To: <alpine.LFD.0.999.0710161722320.26902@woody.linux-foundation.org>

I'm late in this game. But it's too classic a debate to miss the fun.

On Oct 16, 2007, at 5:45 PM, Linus Torvalds wrote:
> One issue may well be that Windows programmers also probably don't  
> work
> very much with patches, do they?
>
> One reason for *really* wanting to use hard-tabs is that it makes  
> patches
> look better, exactly because diffs contain that one extra (or two,  
> in the
> case of old-style context diffs) character at the beginning of the  
> line.
>
> Which means that while all-space indents look fine, *mixing* styles
> definitely does not. In particular, a two-character indent (which
> hopefully nobody uses, but people are crazy) will be totally  
> unreadable as
> a patch if you have the (fairly common, at least in UNIX projects)  
> style
> of using spaces for less-than-eight-character-indents and tabs for the
> full 8 characters.

Yes, all-space would look fine in patches. It'll look better than all  
tabs for tables and ascii formula and diagrams in comments, as one  
prepended character could screw up the tabs (depending on the  
content), rendering them totally unreadable. In all-space case,  
things just shift to the right by one character column.

I believe the indentation convention for ruby is 2 spaces. It looks  
tight to me :)

> (In particular, a 3-level and 4-level indent will look *identical*  
> in such
> a project, when using context diffs).
>
> And sure, you can use all-spaces-everywhere, but that just isn't  
> what any
> normal UNIX editors are set up for by default. In contrast, under  
> UNIX, I
> can pretty much guarantee that hard-tab indents look at least  
> reasonable
> in any editor.

But all-space would look perfect in any editor as the authors  
intended, including the tables and ascii arts, as long as it's using  
monospace font. It's easy to setup all space editing on all platforms  
(Windows, Mac, *nix) It's also much easier to enforce. I've used pre- 
commit hook to check for tabs in the source and reject them if a tab  
is found :)

> And if you have an editor that shows hard-tabs as 4-character indents,
> generally you can work with it. You may have odd indentation, and  
> people
> may complain about your patches not lining up, and yes, it would be  
> up to
> *you* to understand that 8-wide tabs are the normal and default.  
> But you
> can certainly work with a source base that uses a single hard-tab for
> indentation.

> In contrast, if you use spaces (or worse - mixing), things really look
> ugly as sin, to the point of actually being unworkable.
>

Well, we just established that all-space is perfect, look-wise.

> In short:
>
>  - if the project has the rule that an indentation is "one hard- 
> tab", then
>    at least everybody can *work* with that project. Different  
> people may
>    see things laid out slightly differently, but it's generally not a
>    horrible disaster, especially if you aim to use block comments  
> indented
>    with the code (like we *mostly* do both in the kernel and in git)
>
>  - all-space and all-tabs just leads to problems. Yes, I know about
>    python, but lets face it, python is different, since the spacing  
> has
>    semantic rules there. Most non-python programmers will not use  
> editors
>    where you can obviously see the difference between spaces and  
> tabs, and
>    as a result an all-space model will *turn* into a mixed-space/tab
>    model, and you get horrible end results.

As I mentioned, an all-space policy is trivial to enforce.

>  - as per above, mixing spaces and tabs is a *horrid* idea.
>
>  - as a result, a "pure tab for indents" model tends to be workable in
>    most situations. It may not be ideal for you, but it's workable.
>
>  - and at least in the UNIX world, default for pure tabs really is 8
>    characters. Even if you have an editor that shows them as four,  
> you'll
>    see different results outside the editor (eg "grep -5 file.c"), so
>    people should just consider other tab sizes to be "secondary".
>
>    And as long as 99% of all git developers are under Linux, and  
> all the
>    core ones seem to have had no problem with the current tab rules, I
>    really don't see why that should change.
>
> See? Hard-tabs are good. Maybe Windows people don't ever see patches
> (perhaps they only see them as side-by-side graphical things), and  
> maybe
> windows projects are always done inside *one* environment where  
> there is
> no "grep" and "terminal TAB size" and "fifty different editors with
> different defaults".
>
> But even in DOS/Windows, hard-tabs seem to be quite common, judging by
> what little source code I've seen from Windows projects.
>
> And I just checked. The current git model seems to work fine if you  
> have
> an editor that thinks tabs are 4 spaces:
>
> 	sed 's/	/    /g' < revision.c  | less -S
>
> (that's a hard-tab in that first regex). No, things don't  
> necessarily line
> up just like they should, but you actually have to *look* for  
> problems to
> see them (ie stuff where people have added line-breaks).
>
> And is it really so unreasonable to just say "8-character tabs are the
> gold standard"?

But I still haven't seen any compelling arguments against the "all  
space" case, other than "people will screw it up into mixed spaces",  
which is really a straw man, as many multi-platform projects enforced  
the all-space policy easily by using a pre-commit hook in  
maintainers' repository.

The only downside of all-space is a moderate space bloat in source,  
which is insignificant, all things considered.

I agree that "8-character tabs are the gold standard", only for the  
tabstop==8 part but not the indent==tab part. For me the question is:  
is it really so unreasonable to just say "all-space is the holy grail"?

__Luke

  parent reply	other threads:[~2007-10-17  7:17 UTC|newest]

Thread overview: 100+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2007-10-16  6:45 On Tabs and Spaces Michael Witten
2007-10-16  7:04 ` Shawn O. Pearce
2007-10-16  7:27   ` Michael Witten
2007-10-16 17:20     ` Andreas Ericsson
2007-10-16 17:40       ` Sam Ravnborg
2007-10-16 23:09         ` Petr Baudis
2007-10-17  3:41           ` David
2007-10-17 11:32             ` Andy Parkins
2007-10-16  8:30 ` Adam Piatyszek
2007-10-16  9:04   ` Lars Hjemli
2007-10-16 10:16     ` Adam Piatyszek
2007-10-16 15:26       ` Jeffrey C. Ollie
2007-10-16 15:51         ` Michael Witten
2007-10-16 17:06           ` Jari Aalto
2007-10-16 19:20             ` Linus Torvalds
2007-10-16 19:36               ` Mike Hommey
2007-10-16 19:47                 ` Linus Torvalds
2007-10-16 19:51                   ` Linus Torvalds
2007-10-16 20:32                   ` Matthieu Moy
2007-10-16 20:18               ` Tom Tobin
2007-10-16 23:05                 ` Linus Torvalds
2007-10-16 23:51                   ` Christer Weinigel
2007-10-17  0:45                     ` Linus Torvalds
2007-10-17  3:08                       ` Michael Witten
2007-10-17  3:29                         ` Linus Torvalds
2007-10-17  7:17                       ` Luke Lu [this message]
2007-10-17  9:09                         ` Michael Witten
2007-10-17 10:03                           ` Luke Lu
2007-10-17 10:21                           ` Nikolai Weibull
2007-10-17 11:23                             ` Michael Witten
2007-10-17 22:02                           ` Jari Aalto
2007-10-17 22:36                             ` Andreas Ericsson
2007-10-17 23:38                               ` Jari Aalto
2007-10-18  4:31                                 ` Dmitry Torokhov
2007-10-18  8:19                                   ` Jari Aalto
2007-10-18 11:34                                     ` Petr Baudis
2007-10-18 11:39                                       ` Nikolai Weibull
2007-10-22  3:39                                         ` Miles Bader
2007-10-18  7:15                               ` David Kågedal
2007-10-18  5:42                             ` Mike Hommey
2007-10-18 10:36                               ` Jari Aalto
2007-10-17 15:53                         ` Linus Torvalds
2007-10-17 18:05                           ` Johannes Schindelin
2007-10-17 18:25                           ` Tom Tobin
2007-10-17 18:54                             ` Linus Torvalds
2007-10-17 19:33                               ` Tom Tobin
2007-10-17 19:44                                 ` Linus Torvalds
2007-10-17 19:48                                 ` Nicolas Pitre
2007-10-17 19:52                                 ` Josh England
2007-10-17 19:53                                 ` Linus Torvalds
2007-10-17 21:21                                   ` Christer Weinigel
2007-10-17 22:03                                     ` Linus Torvalds
2007-10-18  6:25                                       ` David Kastrup
2007-10-17 22:11                                     ` Johannes Schindelin
2007-10-17 23:17                                       ` Christer Weinigel
2007-10-17 23:44                                         ` Johannes Schindelin
2007-10-18  0:31                                           ` Christer Weinigel
2007-10-18  6:02                                             ` Andreas Ericsson
2007-10-18  7:12                                             ` David Kågedal
2007-10-17 23:53                                         ` Linus Torvalds
2007-10-17 20:31                                 ` David Kastrup
2007-10-17 21:08                                 ` Johannes Schindelin
2007-10-17 19:47                               ` Jan Wielemaker
2007-10-18  0:32                           ` Jeff King
2007-10-18  0:59                             ` Linus Torvalds
2007-10-18  2:45                               ` Jeff King
2007-10-18  3:03                                 ` david
2007-10-18  3:00                                   ` Jeff King
2007-10-18  3:32                                     ` Linus Torvalds
2007-10-18  4:17                                       ` Linus Torvalds
2007-10-18  3:13                                 ` Linus Torvalds
2007-10-18  3:23                                   ` Jeff King
2007-10-18  4:41                                     ` [PATCH] Add a message explaining that automatic GC is about to start koreth
2007-10-18  4:44                                       ` Steven Grimm
2007-10-18  5:01                                       ` Jeff King
2007-10-18  5:11                                         ` Shawn O. Pearce
2007-10-18 13:52                                       ` Brian Gernhardt
2007-10-18 14:16                                         ` Steven Grimm
2007-10-18 18:08                                           ` Jeff King
2007-10-19  0:16                                           ` Shawn O. Pearce
2007-10-19  1:12                                             ` [PATCH] git-gc: improve wording of --auto notification Jeff King
2007-10-19  1:24                                               ` Shawn O. Pearce
2007-10-19  1:26                                                 ` Jeff King
2007-10-18 14:21                                         ` [PATCH] Add a message explaining that automatic GC is about to start Nicolas Pitre
2007-10-18  4:52                                 ` On Tabs and Spaces Nicolas Pitre
2007-10-18  4:54                                   ` Jeff King
2007-10-18  4:55                                     ` Jeff King
2007-10-17 16:08                         ` David Kastrup
2007-10-17 17:44                           ` Nicolas Pitre
2007-10-17 19:52                             ` David Kastrup
2007-10-17 17:51                           ` Sean
2007-10-17  5:56                   ` David Kastrup
2007-10-16 20:56               ` Sam Ravnborg
2007-10-18  3:31               ` Paul Wankadia
2007-10-18  4:22                 ` Linus Torvalds
2007-10-18  4:36               ` Dmitry Potapov
2007-10-16 17:23         ` Andreas Ericsson
2007-10-16 18:34           ` Jan-Benedict Glaw
2007-10-16 18:51             ` Andreas Ericsson
2007-10-20 13:54 ` Robin Rosenberg

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: http://vger.kernel.org/majordomo-info.html

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=3A9408D5-2667-43A6-A0CE-C0720B3A3987@vicaya.com \
    --to=git@vicaya.com \
    --cc=christer@weinigel.se \
    --cc=git@vger.kernel.org \
    --cc=korpios@korpios.com \
    --cc=torvalds@linux-foundation.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://80x24.org/mirrors/git.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).