This release continues excising monomorphization sprawl from the progress subsystem: PortConnectivity's map becomes a sorted Vec, removing the last BTreeMap and HashMap from progress tracking (9.1% fewer LLVM lines on the bfs example), alongside clone and allocation trimming on hot paths.
Breaking changes
PortConnectivitysplits into a builder and a frozen reader, andOperate::initializenow returns the frozen form. This type is largely internal; the surface change is below. (#802, #804)
| 0.30 | 0.31 |
|---|---|
PortConnectivity::insert(i, e) -> bool |
PortConnectivityBuilder::insert(i, e) (no return) |
PortConnectivity::insert_ref(i, &e) -> bool |
removed; build an Antichain and use add_port |
PortConnectivity::add_port (panics on duplicate port) |
PortConnectivityBuilder::add_port (merges duplicate) |
tree: BTreeMap<usize, Antichain> field |
gone; construct via PortConnectivityBuilder::freeze() |
impl FromIterator for PortConnectivity |
impl FromIterator for PortConnectivityBuilder |
get, iter_ports |
unchanged, on the frozen PortConnectivity |
| — | impl IntoIterator for PortConnectivity (new, consuming) |
Other
- Removed all
BTreeMapandHashMapfrom the progress subsystem:is_acyclicuses dense per-location in-degree counts, andsummarize_outputsiterates semi-naively over binary-sized sorted runs.bfsexample: 254,560 → 231,310 LLVM lines. (#802) - Move rather than clone summaries in
Tracker::allocate_fromandSubgraph::initialize. (#804) - Removed several clones on progress hot paths:
Capability::drop,FrontierNotificatordelivery, capture,Progcaster::recv,builder_raw. (#805) builder_rctrims the frontier/consumed/internal/produced bookkeeping vector capacities at build. (#806)