Who decided indenting with spaces was a good idea?
blog.amwmedia.com
blog.amwmedia.com
A lot of mysteries about why people don't use clearly-superior technological solutions are solved by understanding that ubiquity is a feature, in many cases the most important feature. I don't use vim because it's the best text editor; I use it because I can be reasonably sure every single UNIX-like system I ever log into will have it, and once it's in my fingers from having to learn it on a remote server, I might as well use it for daily programming. I don't use HTTP because it's an efficient protocol; I use it because every single device, library, and language speaks it. I didn't write Gumbo [1] in C because I like the language; I did it because every modern language can bind to C libraries, and so this lets a maximum number of people use it.
I'd be interested to know a real-world, recent example where tabs could have been a problem for someone.
1. http://www.emacswiki.org/emacs/SmartTabs
2. http://vim.wikia.com/wiki/Indent_with_tabs,_align_with_space...
People use spaces because they're a fixed width, not in spite of that fact. They allow you to know that your code will look exactly the same with any monospace font, which is especially important if you do things like lining up operators.
I personally use a hybrid: the entire line is indented with tabs. This tells you which block you're in.
Then, for alignment or anything else that isn't related to the entire block, I use spaces.
Many IDEs support this hybrid mode, including the IntelliJ family. It gives you the best of both worlds.
Let's say I have the following code:
if (test1) {
if (test2) {
executeSomething({
"first" : "1st",
"second" : "2nd"
});
}
}
Here's the same code with spaces replaced by "S" and tabs replaced by "T": TifS(test1)S{
TTifS(test2)S{
TTTexecuteSomething({
TTTT"first"SS:S"1st",
TTTT"second"S:S"2nd"
TTT});
TT}
T}
You could set your IDE to use tabs, and then for fine-grained indentation (where I've lined up the property definitions in the object), you'd use spaces.Many IDEs and text editors will automatically detect indentation settings, and some of the popular ones (WebStorm, Netbeans, I think vim) also support hybrid indentation.
So it's only really a problem when someone uses a plain-text, Notepad-like text editor, but I haven't met a professional developer who does that in a long time.
TTifS(test2S&&
TTSSSStest3)S{
// ...
Show me an editor which can tell indentation from alignment at the beginning of the line. And moreover, which can tell it for a dozen of unrelated languages, like Perl, C, make, Erlang, XML and YAML.I don't have it installed and can't find documentation for it, but I believe NetBeans does this by default.
Again, this is something that usually happens naturally when you're indenting with tabs. Very few humans or programs are going to do alignment with tabs, even if they're indenting with them.
1. https://www.jetbrains.com/idea/help/code-style-java.html#d53...
2. http://vim.wikia.com/wiki/Indent_with_tabs,_align_with_space...
It seems as though you have an idea in your head that you're unwilling to research, and when I present you with information, you're unwilling to accept that you could be wrong.
Or do they? Either they are language agnostic or they are not. If they are language-independent, they can't work properly, since indentation and alignment are syntax-specific (that is, need some information extracted from syntax). If they are language-specific, they can't work with all the languages I happen to need, which may include some DSLs rarely used by programmers and some languages defined by myself. I see no other option.
I have checked plugin for Vim; it doesn't work as you advertise. It either puts only spaces or only tabs at the beginning of the line, depending on expandtab setting. I assume from your comment that others work as well as this one.
If I didn't have the ability to store 1,000,000,000,000 of them, I'd care greatly. To be honest source code size isn't even in the ballpark of concerns I have. Intermediate bin files (e.g. obj files) are far larger and problematic for source control and sending source to someone (e.g. several meg a piece rather than a couple of hundred KB).
As for an answer to your question: Spaces are an exact width. Tabs change widths. Therefore for precision and reproducibility spaces are a better choice across all platforms.
Many IDEs support inserting a preset number of spaces when you tab anyway, so the problem is invisible to you.
That said, if you've gotten to a point where you have high traffic, you've had lots of time to implement something that optimizes your assets anyway.
Surely the suggestion in that case is not to carefully insert tab characters to the same indentation of the previous line, and then spaces for the rest, so that you have some tabs and some spaces on the continued line? Anything else fails if the tabs are set as "developer preference" on display, but that tabs + spaces on one line is incredibly fiddly.
http://computers.mcbx.netne.net/media/pcards/k_cobol_cyf.jpg