|
|
|
# The Rustonomicon
|
|
|
|
|
|
|
|
#### The Dark Arts of Advanced and Unsafe Rust Programming
|
|
|
|
|
|
|
|
# NOTE: This is a draft document that discusses several unstable aspects of Rust, and may contain serious errors or outdated information.
|
|
|
|
|
|
|
|
> Instead of the programs I had hoped for, there came only a shuddering blackness
|
|
|
|
and ineffable loneliness; and I saw at last a fearful truth which no one had
|
|
|
|
ever dared to breathe before — the unwhisperable secret of secrets — The fact
|
|
|
|
that this language of stone and stridor is not a sentient perpetuation of Rust
|
|
|
|
as London is of Old London and Paris of Old Paris, but that it is in fact
|
|
|
|
quite unsafe, its sprawling body imperfectly embalmed and infested with queer
|
|
|
|
animate things which have nothing to do with it as it was in compilation.
|
|
|
|
|
|
|
|
This book digs into all the awful details that are necessary to understand in
|
|
|
|
order to write correct Unsafe Rust programs. Due to the nature of this problem,
|
|
|
|
it may lead to unleashing untold horrors that shatter your psyche into a billion
|
|
|
|
infinitesimal fragments of despair.
|
|
|
|
|
|
|
|
Should you wish a long and happy career of writing Rust programs, you should
|
|
|
|
turn back now and forget you ever saw this book. It is not necessary. However
|
|
|
|
if you intend to write unsafe code — or just want to dig into the guts of the
|
|
|
|
language — this book contains lots of useful information.
|
|
|
|
|
|
|
|
Unlike *[The Rust Programming Language][trpl]*, we will be assuming considerable
|
|
|
|
prior knowledge. In particular, you should be comfortable with basic systems
|
|
|
|
programming and Rust. If you don't feel comfortable with these topics, you
|
|
|
|
should consider [reading The Book][trpl] first. That said, we won't assume you
|
|
|
|
have read it, and we will take care to occasionally give a refresher on the
|
|
|
|
basics where appropriate. You can skip straight to this book if you want;
|
|
|
|
just know that we won't be explaining everything from the ground up.
|
|
|
|
|
|
|
|
We're going to dig into exception-safety, pointer aliasing, memory models,
|
|
|
|
compiler and hardware implementation details, and even some type-theory.
|
|
|
|
Much text will be devoted to exotic corner cases that no one *should* ever have
|
|
|
|
to care about, but suddenly become important because we wrote `unsafe`.
|
|
|
|
|
|
|
|
We will also be spending a lot of time talking about the different kinds of
|
|
|
|
safety and guarantees that programs could care about.
|
|
|
|
|
|
|
|
[trpl]: ../book/index.html
|