Re: RFC Draft: Comprehensions
| From: | G. P. B. | Date: | Sun, 10 Mar 2019 23:47:04 +0000 |
| Subject: | Re: RFC Draft: Comprehensions | ||
| References: | 1 | Groups: | php.internals |
| Request: | Send a blank email to internals+get-104642@lists.php.net to get a copy of this message | ||
On Sun, 10 Mar 2019 at 22:45, Larry Garfield <larry@garfieldtech.com> wrote:
> Hello, peoples. I know it's been discussed once or twice before on the
> list, many years ago, but not recently. I therefore feel OK putting forth
> the following draft proposal for Comprehensions, aka "compact generators",
> in PHP:
>
> https://wiki.php.net/rfc/comprehensions
>
> Sara Golemon has written a preliminary patch that is partially complete
> (see the RFC link for details, it's impressively simple), but unfortunately
> doesn't have the bandwidth to complete it at this time. I am therefore
> looking for collaborators with more knowledge of internals than I (which is
> almost everyone) to help finish it up.
>
> The syntax proposed is also subject to revision if a terser but still
> lexer-friendly alternative can be proposed.
>
> At the moment I'm not calling this Proposed yet, as I don't feel
> comfortable doing so until someone else is on board to finish coding it.
> That said, if someone wants to weigh in on the concept for now (hopefully
> supportively) that's also fine.
>
> Anyone excited enough to help finish the job?
>
> (This is my first RFC collaboration, so if you're going to smack me for
> goofing something please be gentle about it.)
>
> --
> Larry Garfield
> larry@garfieldtech.com
>
> --
> PHP Internals - PHP Runtime Development Mailing List
> To unsubscribe, visit: http://www.php.net/unsub.php
>
Hello Larry,
I do like the proposal of adding comprehensions to PHP, and I do agree with
you
that short closures do not replace a short closure synstax (as even with
them it
is still not ideal). However I have a couple of complaints, JS
comprehensions have
not become a standard and have been removed from my understanding [1][2].
Secondly I don't really understand the argument for using
for instead of `
foreach`
Sure it saves 4 chars but the PHP version compared to the Python uses `yield
`
which already lengthen it, I do understand why it is there because it is a
generator.
But Python using for makes more sense, imho, because its syntax is
expression for item in iterator (if condition).
Now maybe what I am going to say is total BS because I don't know *how* the
engine
works, but wouldn't also use foreach make it easier for the lexer as it
already know the
as keyword?
Maybe if we want to mimic the Python syntax why not use a syntax like:
(yield expression) foreach iterator as item (if condition)
I also suppose that comprehension chaining is possible because it returns a
generator.
Small nitpick but shouldn't the current method link to the
Generator->current instead of
the function current which only works with arrays?
Also would it be possible to use a string as an iterable expression?
Because currently it's not possible to foreach a string (but that's maybe
more the scope
of another RFC).
Best regards
George P. Banyard
[1]
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Array_comprehensions
[2]
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Generator_comprehensions