News for hackers. Stuff that matters.
Re:Async and Await in Rust: a full proposal by runT1ME on Monday July 16, 2018 @04:08PM (#17544638)
You don't need HKTs to implement 'do' notation. A good example is LINQ query syntax from C#! You actually have full blown monadic comprehension that you can use to easily write 'flattened' (ie, no async pyramid of doom) Future/Promise code with.
Re:Async and Await in Rust: a full proposal by snuxoll on Monday July 16, 2018 @07:53PM (#17546171)
A better example would be computation expressions in F#, the async {} and query {} builders are super easy to work with and don't rely on HKT's to work (since there's no such thing in .Net). I think such a design would work pretty well in rust, and doesn't require adding a bunch of single-purpose keywords - something I wish the C#/.Net team did considering F# had async first.
Re:Async and Await in Rust: a full proposal by steveklabnik on Monday July 16, 2018 @10:20PM (#17546822)
async blocks require keyword in rust because it conflicts with a struct constructor.
Re:Async and Await in Rust: a full proposal by snuxoll on Monday July 16, 2018 @11:35PM (#17547101)
F# works around this by having expression builders be normal types, `async` is just an alias for Control.AsyncBuilder (actually, it's an instance of it if I want to be technical), it's not even a reserved word in the language specification. This is why I feel such an implementation would be a great fit for Rust, the parser already has to figure out different contexts curly braces could be used (struct initializers, lexical scoping constructs, closures, the list goes on) - you can avoid adding an extra reserved keywords and get support for more than just async expressions.
Re:Async and Await in Rust: a full proposal by runT1ME on Tuesday July 17, 2018 @02:38PM (#17551986)
Async is strictly more limited than the more generic LINQ comprehension syntax.
Re:Async and Await in Rust: a full proposal by Horusiath on Tuesday July 24, 2018 @12:58PM (#17602878)
Actually in F# computation expressions are way more powerful, as they can define their own "keywords" within given semantics. This is for example, how `query{}` computation expression works - and unlike linq it can support things like left joins natively just because entire sql-like syntax is defined by library, not hardcoded into language. Same for async, yield generators etc.