In traditional low level languages such as C iteration is implemented manually, with users writing out for (int idx = 0; idx < items_len; ++idx) { do_thing(items[idx] }
, every time they want to iterate over a list. Newer languages like Rust provide abstractions - iterators - that separate the machinery of recursion from the logic: for item in items.iter() { do_thing(item) }
.
The recursion crate does the same thing for recursive data structures. This post is an introduction to the new version of the recursion
crate, but you don’t have to read my earlier posts to understand it.