std, primitives and preludes
Last updated
Last updated
⭐️ In Rust, language elements are implemented by not only std
library crate but also compiler as well. Examples,
: Defined by the compiler and methods are implemented by std
library directly on primitives.
: Defined by both compiler and std
std
library has been has divided into , according to the main areas each covered.
⭐️ While primitives are implemented by the compiler, the standard library implements most useful methods directly on the primitive types. But some rarely useful language elements of some primitives are stored on relevant std
modules. This is why you can see char
, str
and integer types on both and .
Few important std
modules are,
std::io
- Core I/O functionality
std::fs
- Filesystem specific functionality
std::path
- Cross platform path specific functionality
std::env
- Process’s environment related functionality
std::mem
- Memory related functionality
std::net
- TCP/UDP communication
std::os
- OS specific functionality
std::thread
- Native threads specific functionality
std::collections
- Core Collection types
⭐️ So technically, Rust inserts,
extern crate std;
: into the crate root of every crate
use std::prelude::v1::*;
: into every module
So you don’t need to import these each time.
⭐️ But preludes are used to create a single place to import all important components which are required while using the library. They do not load automatically unless you imported them manually. Only std::prelude
imports automatically in every Rust programs.
🔎 When examine , you can see that is a workspace. Even though its having many library crates, by examine file you can easily identify that main crates are (compiler) and (std). In libstd/lib.rs std modules have been re-exported via pub use
and the original location of most of std modules is .
💯 Refer for more details.
Even though Rust std
contains many modules, by default it doesn’t load each and every thing of std library on every rust program. Instead, it loads only the smallest list of things which require for almost every single Rust program. These are called . They import only,
Preludes have been imported explicitly on and the whole list can be seen on .
The concept of preludes is quite common on Rust libraries. Even some modules inside std
crate (ex.libstd/io) and many libraries (ex. ) are having their own prelude
modules.