Okay, after looking at the operator module a bit more I agree with Yury --
we should make these builtins. Note that there's nothing for __iter__ and
__next__ in operator, so adding things for __aiter__ and __anext__ would
still be inconsistent. But adding them as builtin is consistent with the
builtins for __iter__ and __next__.

However I'm still skeptical about the two-argument version of aiter() (see
my previous message about this). Do you have any indication that a use case
for that exists?

--Guido

On Sat, Mar 20, 2021 at 11:17 AM Yury Selivanov <yselivanov...@gmail.com>
wrote:

> Hi Joshua,
>
> First of all, thanks for working on this! I quickly looked over the PR and
> it looks ready to be merged, great work.
>
> I've been oscillating between wanting to have aiter/anext as builtins and
> putting them into the operators module for quite a while. On the one hand
> asynchronous iteration is a niche thing compared to regular iteration, on
> the other, 'async for' and asynchronous generators are language constructs.
> Overall, I'm leaning towards having them as builtins. That would make them
> more discoverable and slightly more convenient to use with things like
> 'aclosing', especially if the code is following the "import only modules"
> convention. And in my opinion there's almost no overhead with regards to
> how big is the list of builtins (especially with the globals opcode cache).
>
> So my personal vote would be to make them builtins and merge your PR as is.
>
> Yury
>
>
> On Fri, Mar 19, 2021 at 3:18 PM Joshua Bronson <jabron...@gmail.com>
> wrote:
>
>> Thanks for all the feedback so far (and for the kind words, Guido! 😊).
>>
>> Discussion here so far is converging on resurrecting my original PR from
>> 2018 adding these to operator. Anyone else we should hear from before
>> considering the more recent PR not worth pursuing for now? Would be good to
>> hear from Yury given his previous feedback, but seems like he’s been too
>> busy to respond. Should we wait (for some limited amount of time, in light
>> of the upcoming 3.10 feature freeze?) for more feedback?
>>
>> I’m ready to update whichever PR we’re going ahead with, once I know
>> which one that is.
>>
>> Thanks,
>> Josh
>>
>>
>> On Fri, Mar 19, 2021 at 17:23 Brett Cannon <br...@python.org> wrote:
>>
>>> I personally would be okay with aiter() (with the modern API 😉) and
>>> next() in the `operator` module. There's already precedent in having things
>>> there that are rarely used directly but still implement the use of a
>>> special method, e.g. operator.index() (
>>> https://docs.python.org/3/library/operator.html#operator.index).
>>>
>>> On Fri, Mar 19, 2021 at 10:29 AM Guido van Rossum <gu...@python.org>
>>> wrote:
>>>
>>>> I assume that one of the concerns is that these functions are trivial.
>>>> aiter(x) is just x.__aiter__(), and anext(it) is just it.__next__(). I’m
>>>> not convinced that we need aiter(x, sentinel) at all — for iter() it’s
>>>> mostly a legacy compatibility API.
>>>>
>>>> If you use these a lot it’s simple enough to add one-liners to the top
>>>> of your module or to your project’s utilities.
>>>>
>>>> I also feel (but I may be alone in this) that maybe we went overboard
>>>> with the design of async for (and async with).
>>>>
>>>> That said the work itself is impeccable. While you’re waiting for a
>>>> resolution you may want to try working on other contributions!
>>>>
>>>> —Guido
>>>>
>>>> On Fri, Mar 19, 2021 at 09:59 Luciano Ramalho <luci...@ramalho.org>
>>>> wrote:
>>>>
>>>>> OK, but it seems clear to me that if there are any lingering doubts it
>>>>> would be better to add the functions to a module than to the built-ins, 
>>>>> and
>>>>> later promote them to built-ins if people actually find them widely 
>>>>> useful.
>>>>>
>>>>> On the other hand, adding something to built-ins that turns out to be
>>>>> rarely useful adds unnecessary noise and is much harder to fix later
>>>>> without causing further problems.
>>>>>
>>>>> Best,
>>>>>
>>>>> Luciano
>>>>>
>>>>>
>>>>> On Fri, Mar 19, 2021 at 1:22 PM Joshua Bronson <jabron...@gmail.com>
>>>>> wrote:
>>>>>
>>>>>> Thanks for taking a look at this, Luciano.
>>>>>>
>>>>>> Yury immediately replied
>>>>>> <https://bugs.python.org/issue31861#msg319520> to the comment from
>>>>>> Jelle that you quoted with the following:
>>>>>>
>>>>>> > Do these really need to be builtins?
>>>>>>>
>>>>>>> We're only beginning to see async iterators being used in the wild,
>>>>>>> so we can't have a definitive answer at this point.
>>>>>>>
>>>>>>> > They seem too specialized to be widely useful; I've personally
>>>>>>> never needed them in any async code I've written. It would make more 
>>>>>>> sense
>>>>>>> to me to put them in a module like operators.
>>>>>>>
>>>>>>> I think putting them to the operators module makes sense, at least
>>>>>>> for 3.8.  Do you want to work on a pull request?
>>>>>>
>>>>>>
>>>>>>
>>>>>> That was on 2018-06-14. On 2018-08-24, I submitted
>>>>>> https://github.com/python/cpython/pull/8895, "Add operator.aiter and
>>>>>> operator.anext". On 2018-09-07, Yury left the following comment
>>>>>> <https://github.com/python/cpython/pull/8895#pullrequestreview-153441599>
>>>>>> on that PR:
>>>>>>
>>>>>> Please don't merge this yet. I'm not convinced that aiter and anext
>>>>>>> shouldn't be builtins.
>>>>>>
>>>>>>
>>>>>>
>>>>>> So there has been some back-and-forth on this, and some more years
>>>>>> have passed, but all the latest signals we've gotten up to now have
>>>>>> indicated a preference for adding these to builtins.
>>>>>>
>>>>>> In any case, as of my latest PR
>>>>>> <https://github.com/python/cpython/pull/23847>, the Python core
>>>>>> developers now have both options to choose from.
>>>>>>
>>>>>> As community contributors, is there anything further we can do to
>>>>>> help drive timely resolution on this one way or another?
>>>>>>
>>>>>> Thanks,
>>>>>> Josh
>>>>>>
>>>>>>
>>>>>> On Fri, Mar 19, 2021 at 11:29 AM Luciano Ramalho <luci...@ramalho.org>
>>>>>> wrote:
>>>>>>
>>>>>>> Thanks for working on this, Joshua. I agree 100% with Jelle
>>>>>>> Zijlstra in the issue tracker:
>>>>>>>
>>>>>>> Do these really need to be builtins?
>>>>>>>
>>>>>>> They seem too specialized to be widely useful; I've personally never 
>>>>>>> needed them in any async code I've written. It would make more sense to 
>>>>>>> me to put them in a module like operators.
>>>>>>>
>>>>>>>
>>>>>>> (sorry for the weird formatting, posting from an iPad)
>>>>>>>
>>>>>>> On Wed, Mar 17, 2021 at 21:01 Joshua Bronson <jabron...@gmail.com>
>>>>>>> wrote:
>>>>>>>
>>>>>>>> Dear python-dev,
>>>>>>>>
>>>>>>>> New here (but not to Python). 👋 Brett Cannon recommended I start a
>>>>>>>> thread here (thanks, Brett!).
>>>>>>>>
>>>>>>>> In December, two colleagues and I submitted
>>>>>>>> https://github.com/python/cpython/pull/23847, "Add aiter and anext
>>>>>>>> to builtins", which would fix https://bugs.python.org/issue31861.
>>>>>>>>
>>>>>>>> Would any core developers who may be reading this be willing and
>>>>>>>> able to provide a code review?
>>>>>>>>
>>>>>>>> We would love to try to address any review feedback before having
>>>>>>>> to fix (another round of) merge conflicts. (And ideally maybe even get 
>>>>>>>> this
>>>>>>>> landed in time for the 3.10 feature freeze in early May?)
>>>>>>>>
>>>>>>>> Thanks and hope this finds you well.
>>>>>>>> _______________________________________________
>>>>>>>> Python-Dev mailing list -- python-dev@python.org
>>>>>>>> To unsubscribe send an email to python-dev-le...@python.org
>>>>>>>> https://mail.python.org/mailman3/lists/python-dev.python.org/
>>>>>>>> Message archived at
>>>>>>>> https://mail.python.org/archives/list/python-dev@python.org/message/5XUVPB5H4PFUGTC5F7KAN4STKAEOFBQM/
>>>>>>>> Code of Conduct: http://python.org/psf/codeofconduct/
>>>>>>>>
>>>>>>> --
>>>>>>> Luciano Ramalho
>>>>>>> |  Author of Fluent Python (O'Reilly, 2015)
>>>>>>> |     http://shop.oreilly.com/product/0636920032519.do
>>>>>>> |  Technical Principal at ThoughtWorks
>>>>>>> |  Twitter: @ramalhoorg
>>>>>>>
>>>>>>
>>>>>
>>>>> --
>>>>> Luciano Ramalho
>>>>> |  Author of Fluent Python (O'Reilly, 2015)
>>>>> |     http://shop.oreilly.com/product/0636920032519.do
>>>>> |  Technical Principal at ThoughtWorks
>>>>> |  Twitter: @ramalhoorg
>>>>> _______________________________________________
>>>>> Python-Dev mailing list -- python-dev@python.org
>>>>> To unsubscribe send an email to python-dev-le...@python.org
>>>>> https://mail.python.org/mailman3/lists/python-dev.python.org/
>>>>> Message archived at
>>>>> https://mail.python.org/archives/list/python-dev@python.org/message/R3I7WIXNZNVA534XFABDQJRHHKRB6X2S/
>>>>> Code of Conduct: http://python.org/psf/codeofconduct/
>>>>>
>>>> --
>>>> --Guido (mobile)
>>>> _______________________________________________
>>>> Python-Dev mailing list -- python-dev@python.org
>>>> To unsubscribe send an email to python-dev-le...@python.org
>>>> https://mail.python.org/mailman3/lists/python-dev.python.org/
>>>>
>>> Message archived at
>>>> https://mail.python.org/archives/list/python-dev@python.org/message/4JLY7U6DGTHUR2JF7QZZSBZMEXTD6GPL/
>>>
>>>
>>>> Code of Conduct: http://python.org/psf/codeofconduct/
>>>>
>>> _______________________________________________
>> Python-Dev mailing list -- python-dev@python.org
>> To unsubscribe send an email to python-dev-le...@python.org
>> https://mail.python.org/mailman3/lists/python-dev.python.org/
>> Message archived at
>> https://mail.python.org/archives/list/python-dev@python.org/message/MOE5OKHMHS6BU2PSTOLHC73LW2A3JHKF/
>> Code of Conduct: http://python.org/psf/codeofconduct/
>>
>
>
> --
>          Yury
> _______________________________________________
> Python-Dev mailing list -- python-dev@python.org
> To unsubscribe send an email to python-dev-le...@python.org
> https://mail.python.org/mailman3/lists/python-dev.python.org/
> Message archived at
> https://mail.python.org/archives/list/python-dev@python.org/message/ZINKDAHIRB5GWJPUPREZFZ2VBM6AJP7F/
> Code of Conduct: http://python.org/psf/codeofconduct/
>


-- 
--Guido van Rossum (python.org/~guido)
*Pronouns: he/him **(why is my pronoun here?)*
<http://feministing.com/2015/02/03/how-using-they-as-a-singular-pronoun-can-change-the-world/>
_______________________________________________
Python-Dev mailing list -- python-dev@python.org
To unsubscribe send an email to python-dev-le...@python.org
https://mail.python.org/mailman3/lists/python-dev.python.org/
Message archived at 
https://mail.python.org/archives/list/python-dev@python.org/message/RVVMZ4EGRILLWZOSXSKXKVCHJR34CVVY/
Code of Conduct: http://python.org/psf/codeofconduct/

Reply via email to