An Alternative Operator Precedence Rule (2013)
wall.org
wall.org
a = b & 0xFF << 8; // Compilation error
a = (b & 0xFF) << 8; // Compiles account.Balance -= order.Amount*order.Item.Price - order.Rebate;
is not readable at all, which is why many coding standards require whitespace around binary operators.And I thought significant indentation was horrific enough...
Perhaps the author would appreciate the language Whitespace:
https://en.wikipedia.org/wiki/Whitespace_(programming_langua...
Generalizing Overloading for C++2000
Bjarne Stroustrup
AT&T Labs, Florham Park, NJ, USA
http://www.stroustrup.com/whitespace98.pdf a+b * c
^ Warning: precedence/whitespace mismatch. (a + b) / ((c + d) * e)
would be (with pure whitespace) a+b / c+d * e
you'd probably end up mix-and-matching a+b / (c+d * e)There's bound to be some resistance and an "awkward feeling" at first, but this does seem like a nice suggestion.
Unfortunately, it's not a change that you can just apply to an existing programming language, but perhaps it would be reasonable to start by warning and eventually erroring where whitespace does not fit the existing precedence rules.
Then restrict it to a single nesting level, which aligns with the idea of making easy things easy (i.e. single-level precedence), and harder things possible (i.e. parens for more than two levels).
As time goes on, I imagine more and more text editors will format your code in a fixed way, making this sort of thing impractical anyway. Not just automatic indentation, I mean, but adding spaces in around operators and ensuring brackets are in the desired place and removing blank lines and so on.
GFA BASIC did this sort of thing on the Atari ST in the early 1990s, as did Visual BASIC, I think, in a few years later. Visual Studio has done this for C# since VS2008, more recent versions of Visual Studio will do this for C/C++ too, and there's a long tradition of command line-driven formatters for C-like languages that you could also use. Go's large - but not comprehensive - collection of features beginning with `g' includes gofmt, and I've no doubt Java IDEs will do this sort of thing for you too. And this autoformatting trend is bound to continue, because... well, why wouldn't it? But it does mean - if it's to be done properly, and in some way that won't mean you have to reach for regular expressions to search for even the simplest snippet - that you can't leave spacing decisions up to the programmer.
This functionality is actually a benefit, because you can type in something like this:
public Fred(int[]x):base(x){
UpdateStuff();}
and the editor sorts it out, something like this: public Fred(int[] x)
:base(x)
{
UpdateStuff();
}
No need to wear out your space bar and/or Return key putting the formatting in. Visual Studio has got a fair idea of what sort of stuff might have been formatted thet way deliberately, too, so single-statement controlled statements won't get their own line by default, and when opening and closing braces are on the same line the code is left that way. It pretty much always just works. (C/C++ isn't quite as good - maybe 85% of the way there.)I don't really have a problem with automatically making everybody's code look pretty much the same.
My point exactly. It's an incredibly hard problem.
> You have the standard formatting, and that's it.
Which is why I don't use any of those editors, and won't ever do so.
> This functionality is actually a benefit, because you can type in something like this:
Every editor I've used in the last 20-30 years or so has been able to do that, but none of them have forced me into a specific formatting that I can't override. That's the difference.
> I don't really have a problem with automatically making everybody's code look pretty much the same.
Well, I do, and enough people I've worked with do (EDIT: The issue is not making everybody's code the same; the issue is that I'm not willing to have a specific format dictated to me and so unless everyone will format their code like me I won't use tools that attempt to force a single style), and so any attempt to standardise tooling like that just ensures that environment/language has one more barrier against adoption. There's plenty of people like me that avoid Python "just" over significant indenting for example.
A primary reason programming languages using infix ops and f(x) call notation are still more popular than lisp style syntax is because people learn these math notations at school. So doing anything to the syntax that requires people to learn something unusual short of turning it into s-expressions isn't a good idea.
Deleted comment
Seriously, making white space syntactically significant is a horrible idea.