[rust-dev] statement-expressions and block-terminators
graydon at mozilla.com
Wed Nov 24 09:59:45 PST 2010
On 10-11-24 09:06 AM, Patrick Walton wrote:
> An alternate way of thinking about proposal #3 is that, as a rule of
> thumb, ";" always means "ignore the result of the previous statement".
> Formulating it this way might ease the cognitive load on users.
While I always appreciate having new ways of explaining a language
feature, I should relate a certain pithy phrase often related by Lessig
about politics, which applies equally to languages: "if you're
explaining, you're losing".
Our business here is, in a large measure, to anticipate what users will
*already* be thinking, and to figure out something that fits well enough
to be unsurprising, palatable.
(While, of course, having superior precision and safety properties than
the sum of their vague and contradictory expectations :)
The problem is that our target market is largely people from statement
languages, who simply don't have this issue. So modeling their
assumptions directly means "various other techniques" to solve the same
design pressures -- ternary expressions, use of subordinate functions
with inlining and constexpr modifiers ... -- and we're sort of taking a
sober second look at that whole path and wondering if the
expression-language people live in a substantially better world. And if
so, how to get there without losing the statement-language audience.
Hard/subtle/tradeoffy design issue.
More information about the Rust-dev