On Thu, May 22, 2025, at 8:53 PM, Anton Smirnov wrote: > Hi Dmitriy > > On 22/05/2025 12:24, Dmitry Derepko wrote: > > I'm aware that Larry Garfield previously proposed a similar feature > > several years ago, though it unfortunately didn't pass the voting stage. > > I would like to respectfully suggest that using "=" instead of "=>" to > > separate declaration and implementation might be a better approach.
> That looks like the weakest part of the proposition because we already > have two places where inline bodies are used: the mentioned arrow > functions and property hooks > > public string $foo { get => 'dynamic value'; } > > No sense in introducing a new syntax for basically just another case of > inline function body. > > > // oneline > > function handle(string $input): string = func1($input) |> func2(...) > |> func3(...) |> func4(...); > > That looks like a callable assignment like you know > > $f = fn ($bar) => $this->bar + $bar; > > class Foo { > private $bar; > > public function bar() = $f; > } > > that may confuse users, another argument for => > > -- > Anton Like Anton, I believe the arguments for using => and not = are strong, as detailed in the original RFC. Other than that, I am unsurprisingly in favor of short-function syntax. If memory serves, the main argument against last time was "it doesn't actually do anything." It's purely sugar. Which is true, but IMO also not a fully compelling argument. Constructor promotion is purely sugar, but it absolutely makes life better. The short-hooks syntax is purely sugar, but makes life better. The question is whether the QoL improvement of the sugar justifies the engine complexity + conceptual complexity (for readers) that every feature comes with. In this case, the engine complexity is not zero, but pretty close to it. The conceptual complexity is also low, especially if using =>. It is already established to mean "evaluates to", which is exactly what is described here. So the overall cost of this change would be quite low. While the QoL benefit is not as large as it was for constructor promotion (which was huge), I do believe it is large enough to justify the fairly low cost. Especially as we integrate more and more expression-oriented features over time (pipes, null-safe methods, match(), throwable expressions, etc), which increases the surface area where the benefits will be felt. --Larry Garfield