You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
nomicon/src
Colin Rofls 7095c3d7eb
Remove duplicate 'the' in aliasing.md
6 years ago
..
img Add @aldeka's safe and unsafe Ferris 8 years ago
README.md cleanups for Rust 2018 6 years ago
SUMMARY.md panic_implementation -> panic_handler; remove unstable features 6 years ago
aliasing.md Remove duplicate 'the' in aliasing.md 6 years ago
arc-and-mutex.md Port Nomicon to mdbook 8 years ago
atomics.md fix typo 8 years ago
beneath-std.md document #[panic_implementation] 7 years ago
borrow-splitting.md Change compiler error message format to new format 6 years ago
casts.md Update description of float casts 7 years ago
chapter_1.md Re-implement rustbook in terms of mdbook 8 years ago
checked-uninit.md Change compiler error message format to new format 6 years ago
coercions.md Change compiler error message format to new format 6 years ago
concurrency.md Port Nomicon to mdbook 8 years ago
constructors.md Port Nomicon to mdbook 8 years ago
conversions.md Port Nomicon to mdbook 8 years ago
data.md cleanups for Rust 2018 6 years ago
destructors.md Remove `unique` feature which doesn't exist anymore 6 years ago
dot-operator.md Port Nomicon to mdbook 8 years ago
drop-flags.md Add missing source code language hints in drop-flags and phantom-data. 6 years ago
dropck.md Change compiler error message format to new format 6 years ago
exception-safety.md Update exception-safety.md 8 years ago
exotic-sizes.md fixup 6 years ago
ffi.md explain the empty type better, and explain to NOT use enums 6 years ago
hrtb.md Port Nomicon to mdbook 8 years ago
leaking.md Discuss thread::scoped API in past tense 6 years ago
lifetime-elision.md Replace occurrences of `uint` with `usize` 8 years ago
lifetime-mismatch.md Change compiler error message format to new format 6 years ago
lifetimes.md Port Nomicon to mdbook 8 years ago
meet-safe-and-unsafe.md Cleanup the first chapter 7 years ago
obrm.md Port Nomicon to mdbook 8 years ago
other-reprs.md fixup 6 years ago
ownership.md Port Nomicon to mdbook 8 years ago
panic-handler.md ignore tests 6 years ago
phantom-data.md Add missing source code language hints in drop-flags and phantom-data. 6 years ago
poisoning.md Port Nomicon to mdbook 8 years ago
races.md Fix capitalization of Rust in races.md 6 years ago
references.md rewrite references.md, splitting it out into aliasing.md 8 years ago
repr-rust.md fixup 6 years ago
safe-unsafe-meaning.md There are now 3 unsafe traits in rust 6 years ago
send-and-sync.md fix typo, put quotes around Rc 7 years ago
subtyping.md fixup 6 years ago
transmutes.md Port Nomicon to mdbook 8 years ago
unbounded-lifetimes.md Port Nomicon to mdbook 8 years ago
unchecked-uninit.md Port Nomicon to mdbook 8 years ago
uninitialized.md Port Nomicon to mdbook 8 years ago
unwinding.md Port Nomicon to mdbook 8 years ago
vec-alloc.md Global.oom -> heap::alloc::oom and explanation fixup 7 years ago
vec-dealloc.md use new Unique/heap APIs 8 years ago
vec-deref.md use new Unique/heap APIs 8 years ago
vec-drain.md Update vec-drain.md 7 years ago
vec-final.md Use the alloc_layout_extra feature for Layout::array::<T> 6 years ago
vec-insert-remove.md Port Nomicon to mdbook 8 years ago
vec-into-iter.md use new Unique/heap APIs 8 years ago
vec-layout.md Remove `unique` feature which doesn't exist anymore 6 years ago
vec-push-pop.md Port Nomicon to mdbook 8 years ago
vec-raw.md use new Unique/heap APIs 8 years ago
vec-zsts.md use new Unique/heap APIs 8 years ago
vec.md Port Nomicon to mdbook 8 years ago
what-unsafe-does.md Updates to the data layout chapter 6 years ago
working-with-unsafe.md Clarify "unsafe pollutes the module" 7 years ago

README.md

The Rustonomicon

The Dark Arts of Advanced and Unsafe Rust Programming

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 you need to understand when writing Unsafe Rust programs.

THE KNOWLEDGE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF UNLEASHING INDESCRIBABLE HORRORS THAT SHATTER YOUR PSYCHE AND SET YOUR MIND ADRIFT IN THE UNKNOWABLY INFINITE COSMOS.

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, 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 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.