blog.yoshuawuyts.com Topics: Async Rust, effects, WASI, keyword generics, error handling Why RustGrep includes it: Rust lang team. async-std co-creator. Categories: core, async, wasm
§ 1IntroductionIn my post on Hoisting Expressions I discussed the move($expr) feature and how it works much like an inverse of the defer feature many languages have. Instead of creating expressions which run after the scope ends, move($expr...
§ 1IntroductionThere is an RFC open on Rust which proposes what I’m calling hoisting expressions into the language. These are expressions which can be introduced inside of closures-only (for now), and are hoisted by the compiler to run befo...
what are effects? keywords simple effects effects with generic params effect polymorphism effect algebra effect operators assuming totality conclusion A bad habit of mine is that I’ll write 10.000 or 20.000 words on a topic, and then never...
Why WebAssembly components— 2026-03-12 Yesterday Making WebAssembly a First-Class Language on the Web was making the rounds on social media, and I saw some people express confusion about this Wasm Component business. Why would the folks wor...
defining the problem space fallible functions fallible blocks and closures operating on fallibility notes on effect naming motivating reification into an abstract type closing words I believe it must have been about three or four years ago...
Placing Arguments— 2025-08-13 introduction placing functions closures edition-dependent path resolution Introduction In my last post I introduced placing functions, which are functions that can “return” values without copying them. This is...
placing functions— 2025-07-08 what are placing functions? a basic desugaring thinking in placing functions prior art in rust q&a what about placing arguments? what about borrows / local lifetime extensions? what about pinning? are annotatio...
structured concurrency the background task problem the actor pattern how are actors different from globals? conclusion appendix a: actor pattern template Structured concurrency (Tree-)Structured Concurrency is neat because it greatly simpli...
introduction naively backing afits with manual future impls directly backing afits with manual future impls simple inline poll state machines conclusion acknowledgements Introduction There’s a fun little tidbit that most people don’t seem t...
introduction the problem the solution further reading Introduction When working with low-level concurrency (atomics), programming languages are generally quite eager for compilers to reorder operations if it leads to better performance. Inf...
introduction logical and logical or if let-evaluation ordering closing words Introduction One of the things that stands out to me is how similar match and if..else are semantically, while being diverging a fair bit syntactically. The reason...
introduction base iterator bounded iterator fused iterator thread-safe iterator dyn-compatible iterator double-ended iterator seeking iterator compile-time iterator lending iterator iterator with a return value iterator with a next argument...
verbs, nouns, and traits a verb for iteration collecting items async conclusion At the end of my last post I mentioned that one of the main issues with the IntoIterator trait is that it’s kind of a pain to write. I wasn’t around when it was...
The gen auto-trait problem— 2025-01-13 leaking auto-traits from gen bodies preventing the leakage what about other effects and auto-traits? conclusion One of the open questions surrounding the unstable gen {} feature is whether it should re...
The lovely folks working on security over at Google have recently been writing about "temporal (memory) safety" and "spatial (memory) safety". When I first saw these terms it took me a minute to figure out what they meant, as searching for...
why pin is part of method signatures implications conclusion I've been wondering for a little while why the Future::poll methods takes self: Pin<&mut Self> in its signature. I assumed there must have been a good reason, but when I asked my...
not all self-referential types are !move the 'self lifetime is insufficient automatic referential stability raw pointer operations and automatic referential stability relocate should probably take &own self motivating example, reworked agai...
motivating example self-referential lifetimes constructing types in-place converting into immovable types immovable types motivating example, reworked phased initialization migrating from pin to move making immovable types movable further r...
introduction in-place construction indirect in-place construction future possibilities the connection to super let conclusion introduction I've been thinking a little bit about self-referential types recently, and one of its requirements is...