-
Notifications
You must be signed in to change notification settings - Fork 5
Description
As I described here, I would like to register dislike to the idea of this explicit PTC syntax being call-site oriented. I would like the syntax opt-in to be an annotation on the function itself.
I won't repeat myself from that thread of messages, but the TLDR is that I expect there will be more, potentially many more, PTC call-sites than PTC-containing functions, so requiring call-site syntax means more places to have to do it (cluttering the code) and thus more places to forget. Depending on your coding patterns, you may not be able to directly tell that you forgot to opt-in one of your PTC call sites.
Conversely, opting-out of PTC inside a function annotated for such is quite easy: just don't format it as a PTC. There's a variety of grammar/syntactic tricks you could use to accomplish that.
Function-level annotation still keeps PTC fairly explicit for developers and readers of code, still gives engines the ability to limit the scope of PTC changes that they expect to impact existing code (still entirely opt-in), but minimizes the developer burden of both the opt-in and opt-out paths.
Here were the ideas I started out with:
#function foo() { .. }
#function *bar() { .. }
let x = #function *baz() { .. }
x = {
#bam() { .. },
#["qux"]() { .. }
};Or
rec function foo() { .. }
tail function foo() { .. }
function rec foo() { .. }
function tail foo() { .. }