Skip to content

Commit f5467ac

Browse files
authored
Update no-std.md
* There is no high level OS this means there are no primitives <-- this is wrong because there can be primitives without high level OS otherwise it wouldn't be a "primitive" * Using jargon "bare metal" without explaining it * By marking our code with `no_std` we indicate that our code is capable of running in such an environment. <-- this wording makes it so that using `no_std` is the only requirement of having runnable code. * Dynamic memory allocation can not be used --> not true, use crate (like described lower in the text)
1 parent 700d073 commit f5467ac

File tree

1 file changed

+8
-6
lines changed

1 file changed

+8
-6
lines changed

src/intro/no-std.md

+8-6
Original file line numberDiff line numberDiff line change
@@ -18,12 +18,14 @@ You may also have some sort of sysroot and restrictions on RAM/ROM-usage, and pe
1818
special HW or I/Os. Overall it feels like coding on a special-purpose PC environment.
1919

2020
## Bare Metal Environments
21-
In a bare metal environment there will be no high-level OS running and hosting our code.
22-
This means there will be no primitives, which means there's also no standard library by default.
23-
By marking our code with `no_std` we indicate that our code is capable of running in such an environment.
24-
This means the rust [libstd](https://doc.rust-lang.org/std/) and dynamic memory allocation can't be used by such code.
25-
However, such code can use [libcore](https://doc.rust-lang.org/core/), which can easily be made available
26-
in any kind of environment by providing just a few symbols (for details see [libcore](https://doc.rust-lang.org/core/)).
21+
In a bare metal environment no code has been loaded before your program.
22+
Without the software provided by an OS we can not load the standard library.
23+
Instead the program, along with the crates it uses, can only use the hardware (bare metal) to run.
24+
To prevent rust from loading the standard library use `no_std`.
25+
The platform-agnostic parts of the standard library are available through [libcore](https://doc.rust-lang.org/core/).
26+
libcore also excludes things which are not always desirable in an embedded environment.
27+
One of these things is a memory allocator for dynamic memory allocation.
28+
If you require this or any other functionalities there are often crates which provide these.
2729

2830
### The libstd Runtime
2931
As mentioned before using [libstd](https://doc.rust-lang.org/std/) requires some sort of system integration, but this is not only because

0 commit comments

Comments
 (0)