#asynciterators
🙌 Community pick

streamix — Reactive runtime built on async iterators

#indiedev #opensource #typescript #asynciterators #javascript

📮 Submit yours →
streamix · SilentStars
Reactive runtime built on async iterators
silentstars.dev
November 7, 2026 at 2:03 PM
AsyncContextManagers seems like a bit of a weird spot in python, I guess I need to read more about them but it's not clear why they seem to need to always be AsyncIterators to me unless I'm missing something
December 13, 2024 at 11:49 AM
Coming from a primarily .NET background, I had preconceptions about Stream but didn't take long to understand the difference. Still, when explaining to a couple devs about streams in Rust, as soon as I mentioned they were just AsyncIterators, you could see the lights come on.
June 3, 2025 at 8:37 PM
Rust JSONLogic Expression Evaluation Slower Than JS – Looking for Code Review & Optimization Tips
From a quick look, I believe the main source of performance of the JS version is this line: github.com/json-logic/json-logic-engine #### compiler.js `master` 313. 314. processing.forEach((item, x) => { 315. str = str.replace(`__%%%${x}%%%__`, item) 316. }) 317. 318. const final = `(values, methods, notTraversed, asyncIterators, engine, above, coerceArray, precoerceNumber, assertSize, compareCheck) => ${buildState.asyncDetected ? 'async' : ''} (context ${buildState.extraArguments ? ',' + buildState.extraArguments : ''}) => { ${str.includes('prev') ? 'let prev;' : ''} const result = ${str}; return result }` 319. // console.log(str) 320. // console.log(final) 321. // eslint-disable-next-line no-eval 322. return Object.assign( 323. (typeof globalThis !== 'undefined' ? globalThis : global).eval(final)(values, methods, notTraversed, asyncIterators, engine, above, coerceArray, precoerceNumber, assertSize, compareCheck), { 324. [Sync]: !buildState.asyncDetected, 325. aboveDetected: typeof str === 'string' && str.includes(', above') 326. }) 327. } 328. 329. export { build } 330. export { buildAsync } 331. export { buildString } 332. 333. export default { The implementation builds a JavaScript function string from the input that implements the defined logic then evaluates that so the JS runtime gets to JIT the implementation to native code where it matters. To beat JS here from a cold start is a _very_ tall order, it's essentially the best case for what they're optimized for; on the fly JIT what needs to be exactly as much as it needs to be and no more. You can probably win for either sufficiently small or known ahead of time inputs by building native instructions yourself, even some very naive instructions can give orders of magnitude improvements, but of course this is not for the faint of heart.
users.rust-lang.org
February 27, 2025 at 6:24 AM
Not for any practical reasons, mostly out of interest. The different ways you can manage state and the different paradigms those enable are fascinating to me. I spend a lot of spare time tinkering with such things. My latest playground is using AsyncIterators to manage state.
November 22, 2024 at 5:09 PM
Agreed! I will probably do this as a followup, but have to get regular async helpers first.

github.com/tc39/proposa...
AsyncIterator.race/merge · Issue #15 · tc39/proposal-async-iterator-helpers
Wanted to write this down so I don't forget, though it won't be in the first version of this proposal. We should have a helper for merging or racing multiple AsyncIterators. When next is first call...
github.com
November 19, 2025 at 2:28 AM