Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Other Lineages to Compare

The best comparisons follow an idea as it crosses abstraction layers or evolves for a different consumer.

Research roadmapComparative API design

These are not promised chapters. They are structured research questions that prevent the gallery from becoming a bag of unrelated popular crates.

Data formats: Serde and its ecosystem

consumer domain type
    ↓ derive or manual Serialize / Deserialize
Serde data model and traits
    ↓
serde_json, postcard, TOML, CSV, MessagePack, custom formats

Question: how does a small stable trait boundary let format crates and domain types evolve independently?

Sequential to parallel iteration

IntoIterator / Iterator
    ↓ familiar adaptor vocabulary
Itertools
    ↓ additional combinators
Rayon ParallelIterator
    ↓ familiar vocabulary, new execution constraints

Question: when should an ecosystem extend an existing trait’s vocabulary, and when does a changed execution model require a new trait family?

Error contracts across architectural layers

std::error::Error
    ├─ Thiserror → concrete reusable-library contracts
    └─ Anyhow    → contextual application diagnostics

Question: where should an error remain recoverable structured data, and where should it become a flexible report?

Bytes through streaming bodies

&[u8] / Vec<u8>
    ↓
Bytes / BytesMut
    ↓
http-body frames
    ↓
Hyper streaming
    ↓
Reqwest collection and decoding

Question: where does ownership move, where is storage shared, and at which layer is buffering a policy choice?

Parsing libraries

FromStr for one complete domain value
    ↓
Regex for a compiled pattern language
    ↓
Nom / Winnow for parsers composed as Rust values

Question: how do input ownership, error recovery, streaming, and discoverability change as parsing becomes more programmable?

Guards, snapshots, and state

std::sync::MutexGuard
    ↓ alternate lock policy
Parking Lot guards
    ↓ read-mostly snapshots
ArcSwap guards and owned snapshots

Question: how can possession of a value serve as proof of access, cleanup responsibility, or snapshot validity?

Configuration that becomes valid in stages

fallible builder
    ↔ runtime validation at build()

typestate builder
    ↔ different types expose only valid next steps

Rustls is a promising case because security configuration benefits from making unsafe combinations difficult, but the public type progression must remain usable and evolvable.