There were one extremely hard topic and one poorly explained topic.

The hard one was the module system. Many students were completely stumped by it. It’s difficult to point out the specific hard aspect of the current (Rust 2018) module system: each student struggled in their own way.

Here’s a selection of points of confusion:

you don’t need to wrap contents of foo.rs in mod foo { …​ }

you don’t need to add mod lib; to main.rs

child module lives in the parent/child.rs file, unless the parent is lib.rs or main.rs

I feel like my explanation of modules was an OK one, it contained all the relevant details and talked about how things work under the hood. However, it seems like just explaining the modules is not enough: one really needs to arrange a series of exercises about modules, and make sure that all students successfully pass them.

I don’t think that modules are the hardest feature of the language: advanced lifetimes and unsafe subtleties are more difficult. However, you don’t really write mem::transmute or HRTB every day, while you face modules pretty early.