>
> But even though we're talking in circles about why,
> your latest examples do avoid the particular problem I was trying to
describe.
>
I thought the problem was that the syntax wouldn't work. Is there any other
issue?
>
> Yes, that would probably be a bad choice as well. Which is why I've
repeatedly suggested a different keyword, and AFAIK you still haven't
actually voiced an opinion on that.
>
Does this concern the syntax of spawn block {}
or did I miss something?
I will describe the reasons why I rejected the concise syntax in favor of a
more verbose one below.
>
> But you kept referring to that token as "expression", which confused me,
because that's a different thing in the grammar.
>
By the word "expression," I mean a language construct along with keywords.
If spawn function_call
returns a value, then it can be considered an
expression, right? Or am I mistaken in the terminology?
>
> I think I asked this before: why would anyone want to specify a return
type there?
>
A simple answer (though not necessarily the correct one): because it’s a
closure. And in PHP, a closure has a return type.
I understand what you're asking: what is the practical significance of
this? Perhaps none, but it provides consistency in syntax.
The syntax spawn {};
is the most elegant in terms of brevity. There's no
doubt that it's shorter by the number of characters in "function".
- spawn block {};
also looks decent. However, the keyword block
does not accurately reflect what is happening, because what follows is not
a block but a closure.
- spawn closure {};
is a possibility, but it raises the question: why
introduce the keyword closure
when we already have function
? The
difference in characters is minimal.
- spawn fn {};
is the shortest option, but fn
is already used for
the shorthand function syntax fn() => ...
.
But we can forget about ReturnType
, right? Okay, but there's another
point.
In PHP, code blocks are not all the same.
- if
/ then
/ else
/ try
/ switch
**do not create a new scope**.
- function
**does create a new scope**.
When a programmer writes:
```php
$x = 5;
spawn {$x++};
```
Will they easily understand that $x++ is not modifying the same $x as
before?
No, they won’t. They will have to remember that spawn {} creates a closure,
just like function creates a closure with a separate scope.
This means the programmer has to remember one extra rule. The question is:
is it worth the additional "function" characters?
Though, I don’t mind spawn fn {};
—this option takes the best of
everything. But if we implement it, I would also introduce the fn() {}
syntax.
```
spawn fn use($x) {
...
};
```
Apart from violating the language's style, I don't see any drawbacks for
this.