In my experience, about 50% of people who have ever tried Python can’t seem to get over the “weirdness” of semantic whitespace.
Those “many modern programming languages” that don’t require statement terminators or separators are mostly small, and the few big ones are still getting on their feet. Really, of the major general-purpose languages, it’s just Python. Go and Swift are coming along, and may eventually supplant the likes of Java and C++, but we’re just not there yet, in terms of market share, or industry penetration, or what gets taught in Computer Science 101. For a large number of programmers, probably a majority, curly braces + semicolons are “normal” and semantic whitespace is “weird”.
I think Rust took a good direction. There are plenty of arguments in favor of statement separators or terminators, as other people in this thread have already mentioned, but they’re also familiar. A language only has so much strangeness budget. Speaking for myself, one reason I’ve never gotten into Haskell is that the syntax is so unusual that I find it hard to really care about the big ideas behind it. I first came to Rust because it was a “safer C”; the fact that Rust code reads, on the whole, quite similarly to C code helped draw me in, because I could easily understand how the compiler was checking and translating it.
I probably still would have come around to Rust if it had optional semicolons à la Go. But other people might have been turned off and confused by it, just like my coworkers who are turned off and confused by Python’s semantic indentation. There’s no value in picking an unusual syntax just because that’s the new and hip thing to do (and, after all, in ~2010 it probably wasn’t).
Another fun fact about Python: the
: in a
with, etc. is never necessary, grammatically; the language would be fine without it. The designers of ABC, a strong influence on Python, discovered through user testing that people who had not programmed before found it easier to understand code when the colon was present. So if your argument is “it’s unnecessary and therefore should be removed,” perhaps think again: even unnecessary things can serve a purpose. (reference 1, reference 2)