David Tolnay
90d · built 2026-09-08
Performance
What David Tolnay shipped in the selected window, measured in ETV, and how it compares with the 90 days before it.
Effective capacity
−0.3engineers
delivers like 0.7 (0.7x pre-AI)
Output (ETV)
3.4ETV
+64.1% vs 2.1 prior
Features share
2.9%
−8.1 pp vs prior window
Fixes share
67.6%
+66.6 pp vs prior window
Work mix
2.9% Features26.5% Maintenance2.6% Tests0.3% Docs67.6% Fixes
151 commits over 90 days, ending 2026-09-08.
Daily performance
Daily ETV, stacked by Features, Maintenance, Tests, Docs and Fixes.
Repository spread
Where this developer's commits land. Concentrated work (top1 > 80%) vs polymath spread (top1 < 30%).
Most impactful commits
Top 10 by ETV in the last 90 days.
- 0.6ETVChange lock_free_hashtable AtomicValue::Raw to Pod types Summary: Since version 0.6.0, the `atomic` crate requires `T: bytemuck::NoUninit` for most operations on `Atomic<T>`. https://github.com/Amanieu/atomic-rs/commit/f5333f18bf88eb1cb0c514ffcf01eef9e758d29a In `lock_free_hashtable` this translates to requiring `<_ as AtomicValue>::Raw: bytemuck::NoUninit` due to the following points: ```lang=log,counterexample error[E0599]: the method `load` exists for reference `&atomic::Atomic<<T as AtomicValue>::Raw>`, but its trait bounds were not satisfied --> fbcode/buck2/shed/lock_free_hashtable/src/fixed_cap.rs:49:37 | 49 | let ptr = entry.load(Ordering::Acquire); | ^^^^ method cannot be called on `&atomic::Atomic<<T as AtomicValue>::Raw>` due to unsatisfied trait bounds | = note: the following trait bounds were not satisfied: `<T as AtomicValue>::Raw: bytemuck::pod::Pod` which is required by `<T as AtomicValue>::Raw: bytemuck::no_uninit::NoUninit` error[E0599]: the method `get_mut` exists for struct `atomic::Atomic<<T as AtomicValue>::Raw>`, but its trait bounds were not satisfied --> fbcode/buck2/shed/lock_free_hashtable/src/fixed_cap.rs:146:49 | 146 | let raw = *self.entries[self.index].get_mut(); | ^^^^^^^ method cannot be called on `atomic::Atomic<<T as AtomicValue>::Raw>` due to unsatisfied trait bounds | = note: the following trait bounds were not satisfied: `<T as AtomicValue>::Raw: bytemuck::pod::Pod` which is required by `<T as AtomicValue>::Raw: bytemuck::no_uninit::NoUninit` error[E0599]: the method `get_mut` exists for struct `atomic::Atomic<<T as AtomicValue>::Raw>`, but its trait bounds were not satisfied --> fbcode/buck2/shed/lock_free_hashtable/src/fixed_cap.rs:160:49 | 160 | let raw = *self.entries[self.index].get_mut(); | ^^^^^^^ method cannot be called on `atomic::Atomic<<T as AtomicValue>::Raw>` due to unsatisfied trait bounds | = note: the following trait bounds were not satisfied: `<T as AtomicValue>::Raw: bytemuck::pod::Pod` which is required by `<T as AtomicValue>::Raw: bytemuck::no_uninit::NoUninit` error[E0599]: the method `load` exists for struct `atomic::Atomic<<T as AtomicValue>::Raw>`, but its trait bounds were not satisfied --> fbcode/buck2/shed/lock_free_hashtable/src/fixed_cap.rs:196:45 | 196 | let entry = self.entries[index].load(Ordering::Acquire); | ^^^^ method cannot be called on `atomic::Atomic<<T as AtomicValue>::Raw>` due to unsatisfied trait bounds | = note: the following trait bounds were not satisfied: `<T as AtomicValue>::Raw: bytemuck::pod::Pod` which is required by `<T as AtomicValue>::Raw: bytemuck::no_uninit::NoUninit` error[E0599]: the method `get_mut` exists for struct `atomic::Atomic<<T as AtomicValue>::Raw>`, but its trait bounds were not satisfied --> fbcode/buck2/shed/lock_free_hashtable/src/fixed_cap.rs:212:45 | 212 | let entry = self.entries[index].get_mut(); | ^^^^^^^ method cannot be called on `atomic::Atomic<<T as AtomicValue>::Raw>` due to unsatisfied trait bounds | = note: the following trait bounds were not satisfied: `<T as AtomicValue>::Raw: bytemuck::pod::Pod` which is required by `<T as AtomicValue>::Raw: bytemuck::no_uninit::NoUninit` error[E0599]: the method `get_mut` exists for struct `atomic::Atomic<<T as AtomicValue>::Raw>`, but its trait bounds were not satisfied --> fbcode/buck2/shed/lock_free_hashtable/src/fixed_cap.rs:214:38 | 214 | *self.entries[index].get_mut() = value; | ^^^^^^^ method cannot be called on `atomic::Atomic<<T as AtomicValue>::Raw>` due to unsatisfied trait bounds | = note: the following trait bounds were not satisfied: `<T as AtomicValue>::Raw: bytemuck::pod::Pod` which is required by `<T as AtomicValue>::Raw: bytemuck::no_uninit::NoUninit` error[E0599]: the method `load` exists for struct `atomic::Atomic<<T as AtomicValue>::Raw>`, but its trait bounds were not satisfied --> fbcode/buck2/shed/lock_free_hashtable/src/fixed_cap.rs:242:45 | 242 | let entry = self.entries[index].load(Ordering::Acquire); | ^^^^ method cannot be called on `atomic::Atomic<<T as AtomicValue>::Raw>` due to unsatisfied trait bounds | = note: the following trait bounds were not satisfied: `<T as AtomicValue>::Raw: bytemuck::pod::Pod` which is required by `<T as AtomicValue>::Raw: bytemuck::no_uninit::NoUninit` error[E0599]: the method `compare_exchange` exists for struct `atomic::Atomic<<T as AtomicValue>::Raw>`, but its trait bounds were not satisfied --> fbcode/buck2/shed/lock_free_hashtable/src/fixed_cap.rs:244:43 | 244 | match self.entries[index].compare_exchange( | --------------------^^^^^^^^^^^^^^^^ method cannot be called on `atomic::Atomic<<T as AtomicValue>::Raw>` due to unsatisfied trait bounds | = note: the following trait bounds were not satisfied: `<T as AtomicValue>::Raw: bytemuck::pod::Pod` which is required by `<T as AtomicValue>::Raw: bytemuck::no_uninit::NoUninit` ``` Reviewed By: capickett Differential Revision: D116162993 fbshipit-source-id: 9e779d33d074f0baf151d8f94b94406d28a589a1github.com-facebook-buck2 · 2ca48a67 · 2026-08-17
- 0.4ETVUpdate to syn 3 Summary: Release notes: https://github.com/dtolnay/syn/releases/tag/3.0.0 Reviewed By: boujeepossum Differential Revision: D115079448 fbshipit-source-id: 98adeb378fe1ed96e7554b6b4f991d4a2d98ff87github.com-facebook-buck2 · 1f25a35d · 2026-08-06
- 0.3ETVImplement stronger rust-type comparison Summary: This is required for supporting newtypes inside `rust.Type`, such as in this code: ```lang=thrift rust.NewType typedef string Id struct Repro { rust.Type{name = "rustc_hash::FxHashSet"} 1: set<Id> ids; rust.Type{name = "rustc_hash::FxHashSet"} 2: set<string> strings; } ``` Previously the Rust Thrift implementation would produce `LocalImpl` impls based on comparing only 2 things: 1. the field-level or type-level Rust type string (`get_type_annotation`) 2. the Thrift type name ignoring typedefs and annotations (`get_resolved_name`) If both of those things matched, as they do in the above snippet, only a single `LocalImpl` would be generated, resulting in a compile error for the other field. ```lang=log,counterexample error[E0308]: mismatched types --> fbcode/scripts/dtolnay/thrift/lib.rs:114:40 | 114 | crate::r#impl::rs_thrift_write(&self.strings, p); | ------------------------------ ^^^^^^^^^^^^^ expected `&HashSet<Id, FxBuildHasher>`, found `&HashSet<String, FxBuildHasher>` | | | arguments to this function are incorrect | = note: expected reference `&HashSet<Id, _>` found reference `&HashSet<std::string::String, _>` note: function defined here --> fbcode/scripts/dtolnay/thrift/lib.rs:241:19 | 241 | pub(crate) fn rs_thrift_write<T, P>(value: &T, p: &mut P) | ^^^^^^^^^^^^^^^ --------- error[E0308]: `?` operator has incompatible types --> fbcode/scripts/dtolnay/thrift/lib.rs:146:34 | 146 | ... = ::anyhow::Context::context(crate::r#impl::rs_thrift_read(p), ::fbthrift::errors::DeserializingFieldError { field: "strings", strct: "Repro"})?; | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ expected `HashSet<String, FxBuildHasher>`, found `HashSet<Id, FxBuildHasher>` | = note: `?` operator cannot convert from `HashSet<Id, _>` to `HashSet<std::string::String, _>` = note: expected struct `HashSet<std::string::String, _>` found struct `HashSet<Id, _>` error[E0308]: `?` operator has incompatible types --> fbcode/scripts/dtolnay/thrift/lib.rs:161:69 | 161 | ... = ::anyhow::Context::context(crate::r#impl::rs_thrift_read(p), ::fbthrift::errors::DeserializingFieldError { field: "strings", strct: "Repro"})?, | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ expected `HashSet<String, FxBuildHasher>`, found `HashSet<Id, FxBuildHasher>` | = note: `?` operator cannot convert from `HashSet<Id, _>` to `HashSet<std::string::String, _>` = note: expected struct `HashSet<std::string::String, _>` found struct `HashSet<Id, _>` ``` This diff reimplements the `rust_type_less` comparator to more extensively distinguish types that are not equal, taking into account `rust.NewType` annotations, `rust.Adapter` annotations, and `rust.Type` annotations while stepping through unannotated typedefs. For the `rust.Adapter` case more work is needed elsewhere in the Rust whisker templates to fully support this, but this diff is enough to make many cases work with just the existing templates. Reviewed By: hchokshi Differential Revision: D117412164 fbshipit-source-id: 7e04fad7b3f57f8f7b3675d64c5c8d1c0959cd79github.com-facebook-fbthrift · 995fe067 · 2026-08-26
- 0.3ETVSupport `actual = None` in aliases Summary: Since {D109214752} `rust-project develop` is failing on projects that depend on `cxx`. ```lang=log,counterexample 2026-06-21T06:09:37.357348Z INFO rust_project::cli::develop: resolving aliased libraries kind="progress" 2026-06-21T06:09:37.357398Z INFO rust_project::buck: resolving aliased dependencies 2026-06-21T06:09:37.764930Z ERROR rust_project: error=failed to deserialize command output error.sources=[command `cd "/data/users/dtolnay/fbsource" && env -u RUST_BACKTRACE -u RUST_LIB_BACKTRACE "buck2" "--isolation-dir" ".rust-analyzer" "--client-metadata=id=rust-project" "cquery" "--oncall" "rust_devx" "-c=rust.rust_project_build=true" "-c=project.package_boundary_exceptions=." "--output-attribute" "actual" "kind('^alias$', deps(%Ss))" "fbcode//buck2/integrations/rust-project:rust-project" "fbcode//buck2/integrations/rust-project:rust-project-unittest" "--target-universe" "fbcode//buck2/integrations/rust-project:rust-project,fbcode//buck2/integrations/rust-project:rust-project-unittest"` (exit code: exit status: 0) source.sources=[JSON parse error in object 'fbsource//third-party/rust/fixups/cxx:cxx-core-toolchain (cfg:core_build_mode-linux-x86_64-fbcode-platform010-clang21-no-san-opt-by-default#f64fcafa79f2a2cf).actual': invalid type: null, expected a string at line 1269 column 18] kind="error" ``` The error ***invalid type: null, expected a string at line 1269 column 18*** is from this part of the cquery output: ```lang=json { ... "fbsource//third-party/toolchains/jdk:java (cfg:core_build_mode-linux-x86_64-fbcode-platform010-clang19-no-san-opt-by-default#dba890a13cfe4d88)": { "actual": "fbsource//third-party/toolchains/jdk/21:java (cfg:core_build_mode-linux-x86_64-fbcode-platform010-clang19-no-san-opt-by-default#dba890a13cfe4d88)" }, "fbsource//third-party/rust/fixups/cxx:cxx-core-toolchain (cfg:core_build_mode-linux-x86_64-fbcode-platform010-clang21-no-san-opt-by-default#591b18a9ce45c958)": { "actual": null }, "fbsource//third-party/rust:cxx (cfg:core_build_mode-linux-x86_64-fbcode-platform010-clang21-no-san-opt-by-default#591b18a9ce45c958)": { "actual": "fbsource//third-party/rust/vendor/cxx:1 (cfg:core_build_mode-linux-x86_64-fbcode-platform010-clang21-no-san-opt-by-default#591b18a9ce45c958)" }, ... } ``` Reviewed By: JakobDegen Differential Revision: D109233496 fbshipit-source-id: c4326b51fb6f14995521d7e00a7ef4c277b8db6egithub.com-facebook-buck2 · cb0e3c51 · 2026-06-21
- 0.2ETVSync buck2 fixups from fbsource Reviewed By: cjlongoria Differential Revision: D114409708 fbshipit-source-id: e2fa358d94001711fb55196dbc41c44ee9ab55fegithub.com-facebook-buck2 · f6056e24 · 2026-07-31
- 0.2ETVDeduplicate LocalImpl among field-level @rust.Type Summary: This code previously performed deduplication for type-level `rust.Type` annotations: ```lang=thrift rust.Type{name = "rustc_hash::FxHashMap"} typedef map<string, StackTrace> HashToStackTraceMap struct StackTraceHashResolver { 1: HashToStackTraceMap hashToStackTraceMap; } rust.Type{name = "rustc_hash::FxHashMap"} typedef map<string, StackTrace> StackTraces struct Properties { 6: StackTraces stacktraces; } ``` But not field-level `rust.Type` annotations, or between type-level and field-level annotations, resulting in colliding `LocalImpl` impls. ```lang=thrift struct StackTraceHashResolver { rust.Type{name = "rustc_hash::FxHashMap"} 1: map<string, StackTrace> hashToStackTraceMap; } struct Properties { rust.Type{name = "rustc_hash::FxHashMap"} 6: map<string, StackTrace> stacktraces; } ``` ```lang=thrift rust.Type{name = "rustc_hash::FxHashMap"} typedef map<string, StackTrace> HashToStackTraceMap struct StackTraceHashResolver { 1: HashToStackTraceMap hashToStackTraceMap; } struct Properties { rust.Type{name = "rustc_hash::FxHashMap"} 6: map<string, StackTrace> stacktraces; } ``` ```lang=log,counterexample error[E0119]: conflicting implementations of trait `Serialize<_>` for type `LocalImpl<HashMap<std::string::String, StackTrace, FxBuildHasher>>` --> fbcode/artillery/thrift/lib.rs:3511:5 | 3449 | / impl<P> ::fbthrift::Serialize<P> for LocalImpl<::rustc_hash::FxHashMap<::std::string::String, crate::types::StackTrace>> 3450 | | where 3451 | | P: ::fbthrift::ProtocolWriter, | |______________________________________- first implementation here ... 3511 | / impl<P> ::fbthrift::Serialize<P> for LocalImpl<::rustc_hash::FxHashMap<::std::string::String, crate::types::StackTrace>> 3512 | | where 3513 | | P: ::fbthrift::ProtocolWriter, | |______________________________________^ conflicting implementation for `LocalImpl<HashMap<std::string::String, StackTrace, FxBuildHasher>>` ``` Reviewed By: hchokshi Differential Revision: D117318441 fbshipit-source-id: 765204bc86f41cb0f7bb57e9d1db813289f0b637github.com-facebook-fbthrift · d6e48236 · 2026-08-26
- 0.1ETVUpdate ruff crates from 0.0.6 to 0.0.7 Reviewed By: diliop, samwgoldman Differential Revision: D117541787 fbshipit-source-id: fe9044d93cc95eef276f00397f98118c60b6f674github.com-facebook-pyrefly · 278beb7e · 2026-08-27
- 0.1ETVUpdate derive_more from 1.0.0 to 2.1.1 Summary: Release notes: https://github.com/JelteF/derive_more/blob/master/CHANGELOG.md Reviewed By: cjlongoria Differential Revision: D117462213 fbshipit-source-id: f2df54b8a9db70708b6b33afe923d87b694f7903github.com-facebook-buck2 · fce613a7 · 2026-08-26
- 0.1ETVUpdate quick-xml from 0.37.5 to 0.38.4 Summary: Release notes: https://github.com/tafia/quick-xml/blob/master/Changelog.md Reviewed By: JakobDegen Differential Revision: D116165084 fbshipit-source-id: 694dbac49ccdec768a4191527049903d6e8f8290github.com-facebook-buck2 · 6f64cf71 · 2026-08-17
- 0.1ETVonce_cell -> std::sync in fbcode/buck2 Summary: Most of `once_cell` is now in `std`: `OnceCell`/`OnceLock` (Rust 1.70) and `LazyCell`/`LazyLock` (Rust 1.80). The `race` module and fallible `get_or_try_init` have no stable std equivalent yet. Reviewed By: diliop Differential Revision: D109642549 fbshipit-source-id: 7554e52c246d9f3e59708270bd333945efb7eb90github.com-facebook-buck2 · 90403972 · 2026-06-25