HI Martin,

> Am 2016-02-25 um 09:44 schrieb Martin Teichmann <[email protected]>:
> 
> Hi list,
> 
> first of all, I wanted to thank all the authors of asyncio. It's just
> great, and makes my life as a programmer so much easier!

Yep.  :)

> 
> There is just one thing I have problems with: the naming of
> the functions is, well, awkward. For long I thought that it's
> just my poor English, but recently I have been introducing
> asyncio to a coworker who is native english speaker, and
> when I told him: if you want to run two coroutines ham and 
> spam in parallel, just write
> 
>    await gather(ham(), spam())

“There are only two hard things in Computer Science: cache invalidation 
and naming things.”

-- Phil Karlton

I guess some of the confusion comes from replacing "yield from" with
"await".  To me, "yield from gather(...)" doesn’t sound as strange as
"await gather(...)".

> So, I arbitrarily propose to introduce new names. Maybe
> some native speaker comes up with even better names.
> 
>     gather -> parallel
>     wait -> first_completed, first_exception and all_completed
>     wait_for -> timed
>     ensure_future -> create_task

In SimPy, a descrete-event simulation lib with similar concepts as 
asyncio, we also had long discussions about naming stuff when we wrote
version 3.  

For stuff like "gather()" and "wait_for()", we introduced so called 
"Condition Events" and created "any_of()" and "all_of()" methods around 
it.  "await all_of(fut1, fut2)" or "await any_of(fut1, fut2)" reads a 
lot better then "gather()", imho.

Instead of a timeout parameter, we simply would do a "await any_of(fut1, 
sleep(x))" (actually, in SimPy, "sleep()" is called "timeout()").

And, even better, you could use the "&" and "|" operators to concatenate 
futures/events: "await fut | timeout" or "await fut1 & fut2".

Instead of "create_task()" or "async()" we use "process()" to indicate
that we start a new "sub process", but "create_task()" would be fine to
if it was in the "asyncio" namespace and not a method of loop.

That some methods (e.g., "gather()") are in the "asyncio" namespace and
require a loop argument and some methods are methods of a loop instance
itself also baffles me.

Unfortunately, the problem with asyncio is, that it is in the stdlib
and you cannot just start renaming stuff, or only with long deprecation
periods.

Cheers,
Stefan

Reply via email to