News for hackers. Stuff that matters.
Re:Eclipse launches new language to cut down Java boilerplat... by rayiner on Friday November 04, 2011 @07:46PM (#3198243)
There is nothing wrong with optional semi-colons. In most cases, the parser doesn't need them, and the programmer doesn't want to type them. But they're useful in some cases for disambiguation, especially in a language like Xtend that doesn't use an explicit return. E.g.

    foo("bar") ;
    (a + b)
The semicolon is necessary for disambiguation in a case like this, but there is no reason to require the programmer to put in semicolons everywhere. I think the operator precedence hierarchy and optional parens to override it is way more complicated, but people seem to deal with it fine.
Re:Eclipse launches new language to cut down Java boilerplat... by politician on Friday November 04, 2011 @08:23PM (#3198345)
"The semicolon is necessary for disambiguation in a case like this..."

This is why semicolons should be mandatory or illegal. The whole "optional semicolon" thing is a mis-feature designed by language committees that can't make a decision. One's codebase becomes a mismash of lines with and lines without semicolons, sprinkled in as magic to make the compiler happy.

There are plenty of interesting language features which are useful -- support for "optional semicolons" isn't one of them. The feature needs to die, and people should just choose to use a language that suits their need to type -- or not type -- a ';'.

Re:Eclipse launches new language to cut down Java boilerplat... by rayiner on Friday November 04, 2011 @08:55PM (#3198430)
We should also use a fully-parenthesized prefix syntax so we don't get a mishmash of lines with and without parentheses used to override operator precedence!

I agree Javascript's "automatic semicolon insertion" is a terrible feature, but largely because the description is so hard to understand that programmers don't know when the semicolon is required.

In an expression-oriented language, like Xtend seems to be, the rule for when you need a semicolon is simple. The parser makes the longest legal expression it can, if that's not what you mean, then add a semicolon. It's no harder to understand than the lexer equivalent (the lexer makes the longest token you can, if you want to resolve the ambiguity insert a space), or the operator precedence rule (the parser will interpret infix operations using this precedence table, if that isn't what you mean use parentheses).

Matlab, for example, doesn't require commas to separate list elements, and doesn't require but allows semicolons at the end of lines, and nobody complains.

Re:Eclipse launches new language to cut down Java boilerplat... by MichaelGG on Friday November 04, 2011 @09:10PM (#3198468)
Sorry for not understanding, but can you explain what the ambiguity is here?
Re:Eclipse launches new language to cut down Java boilerplat... by rayiner on Friday November 04, 2011 @09:32PM (#3198529)
A C-like parser will keep parsing an expression as long as it's legal. Take:

    foo("bar") * a
It will parse the call to 'foo', then see the '*' which is an infix operator and parse the whole thing as a multiplication expression. In most C-like languages, '(' is both a prefix operator (for grouping) and an infix operator (for function calls). So:

    foo("bar") (a + b)
Is ambiguous if you don't require semicolons to separate expressions. The parser will parse the call to foo, then see the '(' and parse that as a call to the value returned by 'foo'. To stop that, you use the semicolon to stop parsing one expression, so the next '(' is treated as a prefix operator.
Re:Eclipse launches new language to cut down Java boilerplat... by MichaelGG on Monday November 07, 2011 @11:25AM (#3206864)
Wow, yes of course. For some reason I thought Xtend was whitespace sensitive, so just having a newline was enough.