Porting Java's ConcurrentHashMap to Rust (part 1)
In this stream we begin the work of porting Java's ConcurrentHashMap to Rust. It will be a journey to get all the way there, but we got through most of the get, insert, and resize operations. Of particular note is the work required to go from the Java code's reliance on the garbage collector to Rust's runtime-free model. See also the commit for the stream at https://github.com/jonhoo/flurry/commit/50fc36cb4056e68ea96fbf8f214886faf4657a4e.
You can see our progress at https://github.com/jonhoo/flurry. The Java code we were working from is included in that repository, or you can view it at https://hg.openjdk.java.net/jdk/jdk13/file/0368f3a073a9/src/java.base/share/classes/java/util/concurrent/ConcurrentHashMap.java.
You can watch the live version with comments at https://youtu.be/hUi6HyVOAKM
0:00:00 Introduction
0:10:57 Reading Java's ConcurrentHashMap documentation
0:51:17 Copying documentation and constants
1:01:09 Starting node
1:11:07 Writing BinEntry::find
1:31:47 Creating the library outline
1:45:17 Writing get
2:11:47 Writing put and insert
3:13:43 Transfer and resize
4:46:35 Porting Java triple bit-shift
4:52:16 More resizizing
5:26:14 Questions and conclusion
Other Videos By Jon Gjengset
2020-08-05 | Crust of Rust: Channels |
2020-07-25 | Thesis Talk: The Evaluation Chapter |
2020-06-17 | Crust of Rust: Smart Pointers and Interior Mutability |
2020-05-27 | Crust of Rust: Iterators |
2020-04-29 | Crust of Rust: Declarative Macros |
2020-04-01 | (Partially) fixing a bug in a Rust research database |
2020-03-06 | Considering Rust |
2020-01-19 | Porting Java's ConcurrentHashMap to Rust (part 3) |
2019-12-14 | Porting Java's ConcurrentHashMap to Rust (part 2) |
2019-11-17 | Why are my videos so damn long‽ |
2019-11-17 | Porting Java's ConcurrentHashMap to Rust (part 1) |
2019-10-19 | Rust open-source contributions stream: Rust tools and std::future |
2019-09-14 | The Why, What, and How of Pinning in Rust |
2019-06-16 | Procedural Macros in Rust (part 2) |
2019-06-02 | Procedural Macros in Rust (part 1) |
2019-05-11 | Implementing TCP in Rust (part 3) |
2019-03-16 | Implementing TCP in Rust (part 2) |
2019-02-23 | Implementing TCP in Rust (part 1) |
2019-02-09 | About the channel |
2019-02-02 | Porting flamegraph to Rust — part 2 |
2019-01-26 | Porting flamegraph to Rust — part 1 |