3 ms·
You can’t decide language superiority by the number of features. While C# indeed has many cool features, I do think it has already went into C++ territory where
by kaba0 3y ago
You can’t decide language superiority by the number of features. While C# indeed has many cool features, I do think it has already went into C++ territory where all the different, independently cool features have very non-trivial interactions that make it very hard to reason about.
Also, async-await is not a good thing — virtual threads are superior in every way in case of a managed language.
- neonsunset 3y agoWhy async/await is not a good thing? What makes green threads better? Do you know the difference, the issues async/await addresses that green threads simply do not?
- pjmlp 3y agoRead David Fowler's guidelines.
- winter_blue 3y agoDo you have link to any specific article of his (on virtual threads vs async)?
- pjmlp 3y agoHere, https://github.com/davidfowl/AspNetCoreDiagnosticScenarios/blob/master/AsyncGuidance.md https://github.com/davidfowl/AspNetCoreDiagnosticScenarios/b... https://github.com/dotnet/runtimelab/issues/2398 https://github.com/dotnet/runtimelab/issues/2398
- kamma4434 3y agoBecause they were created to manually run multiple threads on one physical thread, which is the kind of decoupling that a VM/OS is supposed to do for you.
- tomp 3y agoThis is code with async/await: async fn read_file(filename): f = await os.open(filename) let data = f.read() await f.close() return data this is equivalent code with green threads: fn read_file(filename): f = os.open(filename) let data = f.read() f.close() return data As you can see, async/await is pure syntactic noise, it doesn't convey any important meaning.
- neonsunset 3y agoAsync enables clear contract for a type that represents a delayed result. Better implementations offer eager execution and allow to easily interleave multiple concurrent futures/tasks, like C#. Green threads on the other hand are a workaround to deal with blocking for the most trivial case of cooperative multi-tasking, offering little beyond that.
- kaba0 3y ago> Async enables clear contract for a type that represents a delayed result. It's not really a type, otherwise it would be something like Future<T> in Java and plenty other languages. It is usually implemented as a transformation to a state machine. Also, Loom is M:N and calling them green threads doesn't give you the whole picture at all. Not exactly sure what you mean by easily interleave -- functionality wise the two is more or less equivalent. You just get to keep your simpler mental model (and tooling) with virtual threads.
- tomp 3y agowith green threads, every result is "delayed" and available exactly when you want it (i.e. as indicated by naive reading of the control flow in code) > eager execution, interleave multiple concurrent tasks green threads give you that for free > deal with blocking blocking is an implementation detail; both async/await and green threads can be implemented on top of either traditional blocking IO, or callback/non-blocking IO I'd be even happier to discuss concrete code blocks / examples, that's where the superiority of green threads truly shines
- ncruces 3y agoObligatorily reference: https://journal.stuffwithstuff.com/2015/02/01/what-color-is-your-function/ https://journal.stuffwithstuff.com/2015/02/01/what-color-is-...