On Sunday, 29 July 2018 at 07:51:00 UTC, Jim Balter wrote:
On Saturday, 28 July 2018 at 21:33:04 UTC, Ivan Kazmenko wrote:
[snip]
2. When you briefly explain templates I think it's important
to mention that empty parentheses may be omitted to allow the
reader to make the link between function!(arg1)(arg2) and
map!something. Explaining UFCS isn't necessary there though I
think since it's obvious that there is some kind of chaining
at play (not that you did, just thinking out loud).
Yeah, good point, mentioned it now.
Actually, map!something does not drop empty parentheses, so
mentioning that does not help. Parentheses containing 0 or 1
arguments can be omitted ... and you omit them for 1 argument
in 3 places, and no instances of omitted empty parentheses. And
I think it would be less confusing to an unfamiliar reader to
mention UFCS, because the chained calls don't fit the function
!(args1) (args2) syntax that you mention.
[snip]
While it's certainly not exact I think it's fine, there's no need
to rewrite the language specification. Even for the parentheses,
once you know they may be dropped in unambiguous cases you are
bound to assume that the author didn't start talking of the !
sign for no reason and that you ought to consider that
parentheses may be dropped even not knowing all the reasons.
The same goes for UFCS, it's made very clear by the article that
the functions are chained. Whether they are actually functions,
or function templates or methods or something else entirely isn't
important. I think the reader can be expected to understand how
it works without understanding why. They even know what the
program does already so the chaining part isn't hard.
Maybe I was wrong that it needed any addition after all. Or maybe
the explaination of templates should be more streamlined toward
what is in the code like “map here is a template, the ! sign is
the equivalent of <> in C++" and no more.