News for hackers. Stuff that matters.
Re:Rust Cookbook by paavohtl on Thursday February 11, 2021 @09:55AM (#26102044)
As far as I know, a (C-like) language must either have:

- A statement separator (semicolons)

- Significant whitespace

Otherwise parsing the language is very likely ambiguous, e.g JavaScript [1] [2].

[1] https://flaviocopes.com/javascript-automatic-semicolon-inser...

[2] https://medium.com/better-programming/you-might-need-those-s...

Re:Rust Cookbook by jolux on Thursday February 11, 2021 @10:22AM (#26102375)
Swift and Go don't have either. Neither does Kotlin. The difference is that Rust is an expression language (much like ML), and the semicolon determines whether the resulting expression is returned or thrown away. OCaml needs semicolons when you're doing imperative programming too.
Re:Rust Cookbook by johncolanduoni on Thursday February 11, 2021 @10:47AM (#26102811)
Swift, Go, and Kotlin all take newlines into account. I guess one could have a definition of “significant whitespace” that excludes that but in any case I strongly suspect that’s what they were referring to.
Re:Rust Cookbook by jolux on Thursday February 11, 2021 @04:35PM (#26107625)
yes, but I believe they support semicolons as a statement separator on the same line
Re:Rust Cookbook by duckerude on Thursday February 11, 2021 @10:13AM (#26102262)
JavaScript messed it up, but Python did it well. A newline is a statement separator, unless it's e.g. between parentheses where a statement separator wouldn't make sense. Unlike JavaScript, that means you don't have to look at the next line to figure out whether the statement continues.

JavaScript assumes a newline doesn't end a statement, until proven otherwise. Python assumes it does end a statement unless it very clearly can't.

It's independent from Python's other significant whitespace, so you could use it in a more "C-like" syntax.

But it wouldn't be a good fit for Rust. In Rust, leaving the semicolon off the final statement in a block already changes its meaning, so that would become ambiguous. It also uses method chaining syntax a great deal more than Python, which is a bit awkward because you have to wrap the expression in parentheses (though autoformatting helps). And of course it would break most existing code.

Re:Rust Cookbook by hu3 on Thursday February 11, 2021 @10:04AM (#26102155)
Go doesn't have either: https://play.golang.org/
Re:Rust Cookbook by paavohtl on Thursday February 11, 2021 @11:11AM (#26103187)
Ah, but it does. Statements are separated by newlines. That is the same as significant whitespace (or a statement separator; you can interpret it either way).
Re:Rust Cookbook by hu3 on Thursday February 11, 2021 @11:15AM (#26103257)
Technically correct.

But the point is about ergonomy. Go doesn't require semicolons neither indentation. That coupled with gofmt auto-formatter makes coding more pleasant.