| ▲ | nottorp 4 days ago |
| > It’s unintuitive and hard to learn. Funny, because it was supposed to be more intuitive than handling concurrency manually. |
|
| ▲ | palata 4 days ago | parent | next [-] |
| It is a tool. Some tools make you more productive after you have learned how to use them. I find it interesting how in software, I repeatedly hear people saying "I should not have to learn, it should all be intuitive". In every other field, it is a given that experts are experts because they learned first. |
| |
| ▲ | brazzy 4 days ago | parent | next [-] | | > I find it interesting how in software, I repeatedly hear people saying "I should not have to learn, it should all be intuitive". In every other field, it is a given that experts are experts because they learned first. Other fields don't have the same ability to produce unlimited incidental complexity, and therefore not the same need to rein it in. But I don't think there's any field which (as a whole) doesn't value simplicity. | | |
| ▲ | palata 3 days ago | parent [-] | | I feel like it's missing my point. Using a chainsaw is harder than using a manual saw, but if you need to cut many trees it's a lot more efficient to first learn how to use the chainsaw. Now if you take the chainsaw without spending a second thinking about learning to use it, and start using it like a manual saw... no doubt you will find it worse, but that's the wrong way to approach a chainsaw. And I am not saying that async is "strictly better" than all the alternatives (in many situations the chainsaw is inferior to alternatives). I am saying that it is a tool. In some situations, I find it easier to express what I want with async. In others, I find alternatives better. At the end of the day, I am the professional choosing which tool I use for the job. |
| |
| ▲ | nottorp 4 days ago | parent | prev [-] | | Except you're hearing it from someone who doesn't have a problem handling state machines and epoll and manual thread management. | | |
| ▲ | dullcrisp 7 hours ago | parent | next [-] | | Right but how do you expose your state machine and epoll logic to callers? As a blocking function? As a function that accepts continuations and runs on its own thread? Or with no interface such that anyone who wants to interoperate with you has to modify your state machine? | |
| ▲ | palata 3 days ago | parent | prev [-] | | And that was intuitive and easy to learn? | | |
| ▲ | nottorp 3 days ago | parent [-] | | I find state machines plus some form of message passing more intuitive than callbacks or any abstraction that is based on callbacks. Maybe I'm just weird. | | |
| ▲ | palata 3 days ago | parent [-] | | When I did not know how to program, neither async nor message passing were intuitive. I had to learn, and now those are tools I can use when they make sense. I never thought "programming languages are a failure, because they are not intuitive to people who don't know how to program". My point being that I don't judge a tool by how intuitive it is to use when I don't know how to use it. I judge a tool by how useful it is when I know how to use it. Obviously factoring in the time it took to learn it (if it takes 10 years to master a hammer, probably it's not a good hammer), but if you're fine with programming, state machines and message passing, I doubt that it will take you weeks to understand how async works. Took me less than a few hours to start using them productively. |
|
|
|
|
|
| ▲ | littlestymaar 4 days ago | parent | prev | next [-] |
| It is. A lot. But concurrency is hard and there's so much you syntax can do about it. |
|
| ▲ | afiori 4 days ago | parent | prev | next [-] |
| Some come to async from callbacks and others from (green)threads. If you come from callbacks it is (almost) purely an upgrade, from threads is it more mixed. |
| |
| ▲ | nottorp 3 days ago | parent [-] | | Yeah, that's what annoys me, async comes from people who only knew about callbacks and not other forms of inter thread communication. | | |
| ▲ | josephg 5 hours ago | parent [-] | | Not true. I’ve used both, and I often prefer the explicitness of async await. It’s easier to reason about. The language guarantees that functions which aren’t async can’t be preempted - and that makes a lot of code much easier to write because you don’t need mutexes, atonics and semaphores everywhere. And that in turn often dramatically improves performance. At least in JS. I don’t find async in rust anywhere near as nice to use. But that’s a separate conversation. |
|
|
|
| ▲ | shakow 4 days ago | parent | prev | next [-] |
| Frankly, async being non-intuitive does not imply that manual concurrency handling is less so; both are a PITA to do correctly. |
|
| ▲ | andrewstuart 4 days ago | parent | prev [-] |
| It IS intuitive. After you’ve learned the paradigm and bedded it down with practice. |