diff --git a/CHANGELOG.md b/CHANGELOG.md index 6d786a218..196b5d534 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,31 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +## [0.31.0](https://github.com/TimelyDataflow/timely-dataflow/compare/timely-v0.30.0...timely-v0.31.0) - 2026-07-14 + +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 + +- **`PortConnectivity` splits into a builder and a frozen reader**, and `Operate::initialize` now returns the frozen form. This type is largely internal; the surface change is below. ([#802](https://github.com/TimelyDataflow/timely-dataflow/pull/802), [#804](https://github.com/TimelyDataflow/timely-dataflow/pull/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` 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 `BTreeMap` and `HashMap` from the progress subsystem: `is_acyclic` uses dense per-location in-degree counts, and `summarize_outputs` iterates semi-naively over binary-sized sorted runs. `bfs` example: 254,560 → 231,310 LLVM lines. ([#802](https://github.com/TimelyDataflow/timely-dataflow/pull/802)) +- Move rather than clone summaries in `Tracker::allocate_from` and `Subgraph::initialize`. ([#804](https://github.com/TimelyDataflow/timely-dataflow/pull/804)) +- Removed several clones on progress hot paths: `Capability::drop`, `FrontierNotificator` delivery, capture, `Progcaster::recv`, `builder_raw`. ([#805](https://github.com/TimelyDataflow/timely-dataflow/pull/805)) +- `builder_rc` trims the frontier/consumed/internal/produced bookkeeping vector capacities at build. ([#806](https://github.com/TimelyDataflow/timely-dataflow/pull/806)) + ## [0.30.0](https://github.com/TimelyDataflow/timely-dataflow/compare/timely-v0.29.0...timely-v0.30.0) - 2026-05-28 This release adds opt-in spill-to-disk support for the zero-copy network allocator, makes `Bytes` `Sync` (a soundness fix), and continues trimming compile-time monomorphization sprawl. diff --git a/bytes/Cargo.toml b/bytes/Cargo.toml index e22004c7f..5d59dca64 100644 --- a/bytes/Cargo.toml +++ b/bytes/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "timely_bytes" -version = "0.30.0" +version = "0.31.0" authors = ["Frank McSherry "] edition.workspace = true rust-version.workspace = true diff --git a/communication/Cargo.toml b/communication/Cargo.toml index 8d803a46e..9ca729304 100644 --- a/communication/Cargo.toml +++ b/communication/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "timely_communication" -version = "0.30.0" +version = "0.31.0" authors = ["Frank McSherry "] description = "Communication layer for timely dataflow" edition.workspace = true @@ -25,9 +25,9 @@ columnar = { workspace = true } getopts = { version = "0.2.24", optional = true } byteorder = "1.5" serde = { version = "1.0", features = ["derive"] } -timely_bytes = { path = "../bytes", version = "0.30" } -timely_container = { path = "../container", version = "0.30.0" } -timely_logging = { path = "../logging", version = "0.30" } +timely_bytes = { path = "../bytes", version = "0.31" } +timely_container = { path = "../container", version = "0.31.0" } +timely_logging = { path = "../logging", version = "0.31" } [dev-dependencies] tempfile = "3" diff --git a/container/Cargo.toml b/container/Cargo.toml index c5bd12b75..feb8330f0 100644 --- a/container/Cargo.toml +++ b/container/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "timely_container" -version = "0.30.0" +version = "0.31.0" description = "Container abstractions for Timely" license = "MIT" edition.workspace = true diff --git a/logging/Cargo.toml b/logging/Cargo.toml index b10414e63..8e0e7ee4f 100644 --- a/logging/Cargo.toml +++ b/logging/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "timely_logging" -version = "0.30.0" +version = "0.31.0" authors = ["Frank McSherry "] description = "Common timely logging infrastructure" edition.workspace = true @@ -16,4 +16,4 @@ license = "MIT" workspace = true [dependencies] -timely_container = { version = "0.30.0", path = "../container" } +timely_container = { version = "0.31.0", path = "../container" } diff --git a/timely/Cargo.toml b/timely/Cargo.toml index 4f8cf81f8..d856f0ae9 100644 --- a/timely/Cargo.toml +++ b/timely/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "timely" -version = "0.30.0" +version = "0.31.0" authors = ["Frank McSherry "] readme = "../README.md" edition.workspace = true @@ -30,10 +30,10 @@ bincode = { version = "1.3" } byteorder = "1.5" itertools = "0.14.0" serde = { version = "1.0", features = ["derive"] } -timely_bytes = { path = "../bytes", version = "0.30" } -timely_logging = { path = "../logging", version = "0.30" } -timely_communication = { path = "../communication", version = "0.30", default-features = false } -timely_container = { path = "../container", version = "0.30" } +timely_bytes = { path = "../bytes", version = "0.31" } +timely_logging = { path = "../logging", version = "0.31" } +timely_communication = { path = "../communication", version = "0.31", default-features = false } +timely_container = { path = "../container", version = "0.31" } smallvec = { version = "1.15.1", features = ["serde", "const_generics"] } [dev-dependencies]