|
|
A macro-generated FFI binding layer
|
Hard
|
End-to-End
|
|
|
|
Bounds checks: when they cost, and five safe ways to remove them
|
Hard
|
End-to-End
|
|
|
|
Build a spinlock from AtomicBool and UnsafeCell
|
Hard
|
End-to-End
|
|
|
|
Build `Cell<T>` and `RefCell<T>` from scratch
|
Hard
|
Research
|
|
|
|
Build Rc<T> and RefCell<T> from scratch
|
Hard
|
End-to-End
|
|
|
|
Calling C from Rust: libc is already linked
|
Medium
|
Framework
|
|
|
|
Capstone: audit and repair an unsound abstraction
|
Hard
|
End-to-End
|
|
|
|
C strings, ownership across the boundary, and FFI-safe types
|
Medium
|
Framework
|
|
|
|
Designing safe wrappers around unsafe FFI
|
Hard
|
End-to-End
|
|
|
|
Edition 2024: unsafe extern blocks and safe declarations
|
Medium
|
Framework
|
|
|
|
Edition 2024: #[unsafe(no_mangle)] and calling Rust from C in one file
|
Hard
|
Framework
|
|
|
|
Implementing a reference-counted pointer
|
Hard
|
Framework
|
|
|
|
Implementing `Vec`: layout, allocation, push, pop
|
Hard
|
Framework
|
|
|
|
Implementing `Vec` part 2: `insert`, `remove`, `Deref`, `IntoIter`
|
Hard
|
Framework
|
|
|
|
Leaking is safe, and exception safety
|
Hard
|
Framework
|
|
|
|
`NonNull<T>`, null, and dangling-but-aligned
|
Medium
|
Primitives
|
|
|
|
Nullable pointer optimization, callbacks and qsort
|
Hard
|
Framework
|
|
|
|
Opaque pointers, variadics, and the FFI hazard catalogue
|
Hard
|
Framework
|
|
|
|
Partial initialisation and leak-free unwinding: a `MaybeUninit` ring buffer
|
Hard
|
Framework
|
|
|
|
`PhantomData`, variance and drop-check
|
Hard
|
Framework
|
|
|
|
Pointer arithmetic: `offset`, `add`, `sub`, `wrapping_*`
|
Medium
|
Primitives
|
|
|
|
Provenance: a pointer is not an integer
|
Hard
|
Primitives
|
|
|
|
`ptr::read`, `write`, `copy`, `copy_nonoverlapping`, `drop_in_place`
|
Medium
|
Primitives
|
|
|
|
`&raw const` / `&raw mut`: a pointer without a reference
|
Medium
|
Primitives
|
|
|
|
Raw pointers: `*const T` and `*mut T`
|
Easy
|
Primitives
|
|
|
|
`RawWaker` and `RawWakerVTable`: building a `Waker` with unsafe
|
Hard
|
Framework
|
|
|
|
Safety comments as a discipline: `// SAFETY:` and `# Safety`
|
Easy
|
Primitives
|
|
|
|
Splitting borrows: implement `split_at_mut`
|
Medium
|
Primitives
|
|
|
|
`static mut` is dead: what edition 2024 changed
|
Medium
|
Primitives
|
|
|
|
Structural pinning and safe pin projection by hand
|
Hard
|
Research
|
|
|
|
The five superpowers — and the four myths
|
Easy
|
Primitives
|
|
|
|
`union`, `transmute` and `MaybeUninit`
|
Hard
|
Primitives
|
|
|
|
`UnsafeCell`: the only legal path to interior mutability
|
Medium
|
Primitives
|
|
|
|
unsafe impl Send, and the disjoint-capture trap
|
Hard
|
Framework
|
|
|
|
`unsafe {}` vs `unsafe fn`: edition 2024 splits the two meanings
|
Easy
|
Primitives
|
|
|
|
Unsound API smells: the patterns that are always wrong
|
Medium
|
Primitives
|
|
|
|
Validity invariants vs safety invariants
|
Medium
|
Primitives
|
|