Go vs Rust - Concurrency and Race Conditions
It's hard to put into words what I like about Rust. Easier to show with a quick example about concurrency and borrowing.
Capturing the "Magic of Rust" is not easy. Luckily, I found a simpler way: show how Rust prevents race-conditions and guides us towards a safe, idiomatic solution. We will port a little Go CLI tool to Rust and compare both solutions in terms of safety, error handling, and concurrency patterns.
race-conditions, ownership, mutex, concurrency, rayon, golang, rustlang
Things I mentioned during the show
- Go in Practice book by Matt Butcher and Matt Farina (Manning Publications, 2016)
- Go in Practice example source code
- Golang provides tooling to help detect race conditions. E.g. try
go run --race(see 'Go in Practice, p.70')
- Explanation of the Rustlang race-condition prevention
- Amazing article about Rustlang iterator patterns by Karol Kuczmarski
- Rust's [for_each method](https://doc.rust-lang.org/std/iter/trait.Iterator.html#method.for_each]
- Golang sync.Waitgroup
- rayon crate for easy parallelism
- partition method
Errata and improvements
It might come as a surprise to you, but every once in a while even I make a mistake.
This section covers all improvements made to the code since the epsiode went live.
For an exhaustive list of all changes to the original code, go here. Thanks to all contributors!
- killercup added an alternative approach that creates one hashmap per file and uses Rayon's reduce to unify them.
- euantorano provided an alternative Go approach to counting words.
- Color scheme: JetJet Alternate for VSCode
Resources and licenses
- Comedic Boing, A.wav by InspectorJ of Freesound.org
- Using 188709__setuniman__thoughts-1a37 by Setuniman
- Yay sound by jbeetle
- piano-improv-prog-clumsy-raucous.wav by newagesoup
- Crayon designed by Terdpongvector
Preparing, recording, and editing an episode takes a substantial amount of time (around 30 hours total). I do all of this next to my fulltime dayjob. If you want to show your appreciation and help me keep the content free for everybody to enjoy, please consider supporting me on Patreon - no matter the amount. ❤️