|
A macro-generated FFI binding layer
|
Hard
|
End-to-End
|
|
|
Bounds checks: five safe ways to express access
|
Hard
|
End-to-End
|
|
|
Build a ring buffer with MaybeUninit
|
Hard
|
Framework
|
|
|
Build a safe mutable-slice split
|
Medium
|
Primitives
|
|
|
Build a spinlock from AtomicBool and UnsafeCell
|
Hard
|
End-to-End
|
|
|
Build a vector with allocation, push and pop
|
Hard
|
Framework
|
|
Build Cell<T> and RefCell<T> from scratch
|
Hard
|
Research
|
|
|
Build Rc<T> and RefCell<T> from scratch
|
Hard
|
End-to-End
|
|
|
Calling C functions through safe Rust wrappers
|
Medium
|
Framework
|
|
|
Capstone: audit and repair an unsound abstraction
|
Hard
|
End-to-End
|
|
|
C strings and ownership across FFI
|
Medium
|
Framework
|
|
|
Designing safe wrappers around unsafe FFI
|
Hard
|
End-to-End
|
|
|
Edition 2024: unsafe extern blocks and safe declarations
|
Medium
|
Framework
|
|
|
Export Rust functions with C-compatible names and signatures
|
Hard
|
Framework
|
|
|
Extend a vector with insertion and consuming iteration
|
Hard
|
Framework
|
|
|
Implementing a reference-counted pointer
|
Hard
|
Framework
|
|
|
Keep a vector valid when its drain is forgotten
|
Hard
|
Framework
|
|
NonNull<T>, null, and dangling-but-aligned
|
Medium
|
Primitives
|
|
|
Nullable pointer optimization, callbacks and qsort
|
Hard
|
Framework
|
|
|
Opaque handles and bounded C formatting
|
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
|
|
static mut is dead: what edition 2024 changed
|
Medium
|
Primitives
|
|
|
Structural pinning and safe pin projection by hand
|
Hard
|
Research
|
|
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: two fixes and a review checklist
|
Medium
|
Primitives
|
|
|
Validity invariants vs safety invariants
|
Medium
|
Primitives
|
|
What unsafe allows, and what it does not change
|
Easy
|
Primitives
|
|