4 ms·
Maybe I'm misunderstanding what you mean by "It began in C#", but F# introduced async about five years before C# 5 was released.
by S04dKHzrKT 3y ago
Maybe I'm misunderstanding what you mean by "It began in C#", but F# introduced async about five years before C# 5 was released.
- q8840 3y agocould be wrong about c#, but c# and f# are comes from same parent
- AndrewDucker 3y agoI know it influenced the async await design, but I didn't think it was quite the same. Will go do some reading!
- louthy 3y agoasync in F# is not a language feature, it’s a library that leverages F# computation expressions (monads). It’s also possible to do async-like behaviour - without the async/await language feature - in C# using LINQ; so you could argue C# has had the capability (like F#) since LINQ was released. But, I believe C# was the first mainstream language to implement the async/await method-splitting coroutines state-machine (as a language feature)
- gpderetta 3y agoAsync is a special case of continuations. If you have fist class continuations (and monads do notation in practice gives you that), you hardly need async as a language feature.
- louthy 3y agoThat's exactly my point. It's not a language feature, it's a library. Haskell, F#, and any other language that supports monads (or as you say, first class continuations), have the ability to do async/await - in a way that appears first-class - but actually is just regular code. C#, and other languages that have taken the C# approach [to async/await], don't have first class continuations (well, C# does with LINQ, but that compromises most ways the average OO dev works). They implement async/await with first-class keywords that indicate where to slice a method in two. In my language-ext [1] project I have added the LINQ operators to `Task<T>` which allows C# tasks to be used in the same way that Async is done in F#. [1] https://github.com/louthy/language-ext/blob/main/LanguageExt.Tests/TaskTests.cs#L73 https://github.com/louthy/language-ext/blob/main/LanguageExt...
- gpderetta 3y agoDo-notation is a language feature though, and that's a superset of async/await. Incidentally there are papers that are trying to improve on async in C++ by trying to sneak in generalized do-notation.