On D in competitive programming

Cym13 cpicard at openmailbox.org
Sun Jul 29 09:00:07 UTC 2018


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.


More information about the Digitalmars-d-announce mailing list