Modules and crates
Until now, we only looked at a situation where our code fitted in one file. But when a project evolves, we will want to split the code into several files, for example, by putting all data structures and methods that describe certain functionality in the same file. How will the main code file be able to call these functions in other files?
Also, when we start getting multiple functions in various files, it sometimes happens that we want to use the same name for two different functions. How can we properly differentiate between such functions, and how can we make it so that some functions are callable everywhere, and others are not? For this, we need what other languages call namespaces and access modifiers; in Rust this is done through the module system.
Building crates
At the highest level, there is the crate. The Rust distribution contains a number of crates, such as the std
crate of the standard library, which we have already used often. Other built-in crates include the...