Write a mini-Redis in Rust: learn async programming with Tokio
tokio.rs
tokio.rs
If you disagree, take a look at compile error in https://tokio.rs/tokio/tutorial/streams and think again. That is in fact NOT atypical. (Amusing paradox: you get less errors once you learned, but you get the most terrible errors when you are the least equipped to deal with them.)
To slightly exaggerate, I spend about half my time in Rust support chat channel in my locality to discourage people from trying Rust async programming without getting the basics of Rust. Their logic go: I am interested in Rust only for async network programming, I am not interested in Rust sync network programming, I also learn best by try using something in a project straight away, so I will just learn Rust by writing a Rust async programming project! This literally 100% fails, but people who do this really really want to do it that way, and discouragement doesn't really work, and they get really frustrated, and... I am not sure how to solve this.
What's funny is that while `async` is great tool to have 99% of programs will not see a difference.
(It pains me to write that because otherwise I am very much against Joel's law of leaky abstractions, I believe in aiming for leak-proof abstractions, and I know they are possible. It's just that it probably is not always possible, and it is especially hard to abstract learnability, and it is a lot of work even when it is possible.)
While I also think most people do not need async and will not see differences, I focus on learning aspect and refrain from saying "you probably don't need it", because I found people are not stupid and people who insist on async usually have actual need for async. This may be due to what kind of people congregate on my local community and may not hold elsewhere though.
if I didn’t know Rust decently already those problems would have broken me
For the rest of us, is parallel and batch that is more useful imho, with at most, the ability to do something in the "background".
This is actually the reason why those stacks don't offer sync APIs.
I did it for asyncio, Go, Clojure and a few other things.