My stance is that
- U+0009 characters serves to declare nesting level — the actual indentation only happens later as a part of the rendering/typesetting process
- U+0020 are for padding/aligning tokens that are on the same nesting level
Not assigning a double meaning to the space character means that text processing utilities generally will have an easier time processing text in {some user-defined way}, because they need not apply some heuristic to decode a meaning-overloaded set of space characters again, as in
foob += bar +
baz;
while (foob) {
blah += bruh +
pal;
}
When U+0009/U+0020 are applied as described,
- the user can have nesting levels rendered with an arbitrary personally favorite tab width (from 1 to Infinity)
- and it would not look ugly at any chosen render width (i.e. the hanging argument to the + operator would still line up)
U+0020 is actually still a bit overloaded (hanging indent as well as inter-word space), but off the top of my head, I can't think of a thought-complete use case for giving hanging indent a separate control character (since hanging indent is not always present when a text processing utility might need it).