Comments (6)
When implementing async, please examine trio (https://trio.readthedocs.io/en/stable/reference-core.html)
asyncio is clumsy and ugly in many ways. It evolved as Python async paradigm evolved, and is full of legacy gotchas.
trio is clean as a whistle, and has an active gitter community (with the creator active). There's no active community for asyncio.
from kuroko.
This ticket is about implementing required syntax support in the compiler. Did you mean to post your shill on #6?
from kuroko.
Probably. My intent was to make sure kuroko core-devs are aware of the merits of Trio.
I have no dog in this race. I get no reward from my keystrokes beyond the hope that maybe the intel is useful.
So if I am "shill"ing, it is from my experience as a pure mathematician turned s/w dev and experience of using both async libs.
from kuroko.
Sorry, that was harsh of me, I've grown a bit paranoid about issue comments and seeing someone whose profile lists them as a C-level posting about an external product trips some alarms for me.
This would be better discussed on #6 as previously stated, but to provide a more reasonable response: I'm in a tough position here. Even if asyncio
is maligned in the Python world, if compatibility is my aim then providing the interface is something that may need to happen even if there are "better" options to emulate. Either way, from the examples I saw in Trio, support the async
syntax constructs describe in this ticket is still necessary.
I should also note that Kuroko is still mostly a personal project; while I'm happy to accept external contributions, I haven't quite garnered a team yet, core or otherwise, and that's likely to be the biggest blocker in closing the gap on Python 3.x compatibility.
from kuroko.
huh, so GitHub examines my repos and estimates my language skillset.
It didn't occur to me that this creates a certain public image. 90%+ of of my code is not on my personal GitHub.
Yes, I see it is an awkward situation to be in... I once wrote a Python / C++ interop (https://github.com/p-i-/picxx) and got so carried away with making it "fully featured" that I completely forgot my original task
There's a problem: Trio await
returns an object incompatible with asyncio await
.
https://github.com/python-trio/trio-asyncio is required to "shim" one to t'other.
So an async function containing asyncio await
s is "asyncio-flavour", similarly for "trio-flavour".
And you can't mix different flavour await
s inside a given async function.
If you want to await
a trio-flavour function inside an asyncio-flavour one, you'd need something like:
from trio_asyncio import trio_as_aio
def my_aio_flavour(...):
await some_aio(...)
await trio_as_aio(my_trio_flavour, *args)
await some_other_aio(...)
As I remember, you can also:
@trio_as_aio
def my_aio_flavour(...):
await my_trio_flavour_1(...)
await my_trio_flavour_2(...)
This might look like an unwanted extra layer of headfuck, but my thinking in the original post was that the internal architecture of Trio might serve as a better foundation / core-mechanic for implementing async, and that an asyncio compat layer could simply shim on top of this.
The key intel I wanted to provide was that the primary Trio architect (Nathaniel J Smith) looked at the whole Python asyncio machinery, and built Trio from the ground up with 20/20 hindsight.
It may be possible to "lift" trio
and trio_asyncio
directly into kuroko, and shim an asyncio
compat layer on top of this, and save reinventing a tricky wheel. It is likely that Nathaniel J Smith (and Trio community) would be happy to assist exploring the possibility on the Trio gitter. He's (/they've) been extremely helpful in helping me solve problems that are much less worthy than your own work.
I haven't explored the internals of either Trio or asyncio, but my experience from using both was that Trio required only a small fraction of the cognitive effort of asyncio to achieve any particular task.
I'll sign off at this point, as I don't think I have anything valuable to contribute beyond this observation.
from kuroko.
huh, so GitHub examines my repos and estimates my language skillset.
It didn't occur to me that this creates a certain public image. 90%+ of of my code is not on my personal GitHub.
What? No, you say in your bio you're a CEO.
There's a problem: Trio
await
returns an object incompatible with asyncioawait
.
await
is syntax supported by the compiler, not something a library controls - it's really just a fancy yield from
that works in the context of an async
function.
And none of this has much to do with async for
and async with
...
CPython bytecode for a simple async
function with an await
:
async def foo():
await bar()
Disassembly of <code object foo at 0x7f57ffaff5b0, file "<dis>", line 2>:
3 0 LOAD_GLOBAL 0 (bar)
2 CALL_FUNCTION 0
4 GET_AWAITABLE
6 LOAD_CONST 0 (None)
8 YIELD_FROM
10 POP_TOP
12 LOAD_CONST 0 (None)
14 RETURN_VALUE
Kuroko's bytecode of the same:
<foo() from <stdin>>
2 0 GET_GLOBAL 0 'bar'
2 CALL 0
4 INVOKE_AWAIT
5 NONE
>> 6 YIELD_FROM 4 (to 13)
9 YIELD
10 LOOP 7 (to 6)
>> 13 POP
14 NONE
15 RETURN
from kuroko.
Related Issues (20)
- Kuroko does not read files with Windows \r\n newlines HOT 2
- Type annotations have no effect HOT 2
- math functions log1p and expm1 HOT 1
- Found a possible security concern HOT 3
- Can colourisation be disabled? HOT 2
- print won't print without an argument HOT 5
- `dict` argument compatibility with Python HOT 2
- keyword arguments can't default to themselves HOT 4
- Compile to native code? HOT 2
- Globals should be bound to `function`s, not `codeobject`s HOT 1
- Kuroko 1.3
- missing gamma function when built against musl HOT 4
- dangling pointers to VM stack HOT 4
- [Question] Class field declaration? HOT 2
- [Termux] TypeError: __init__() expects list, not 'list' HOT 14
- [scope] `for` iteration scope HOT 3
- [KEP] Allow using `let` to define local variable in "legacy `for` loop" like Javascript HOT 2
- Externalize core modules HOT 1
- Kuroko 1.6 Roadmap
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from kuroko.