In one line: Rust's proposed variadic generics would let you implement a trait for tuples of any length with a single impl. On October 27, Inside Rust published the results of a micro survey with over 3,300 responses, and the arguments that will shape the coming RFC are now out in the open.
Why this, why now
- On 2026-10-27, the Inside Rust blog published "Variadic Generics Micro Survey results" by Olivier Faure (PoignardAzur). The survey ran in September 2025 and drew over 3,300 submissions; the free-text answers were categorized by hand (the post says AI processing was considered and rejected over privacy and quality concerns).
- The numbers: 1,702 people said yes to "Are there cases where variadic generics would have made your project easier?" (1,025 of them gave details), 1,287 said yes for variadic mappings, and 696 said yes for non-linear mappings. 572 people answered the final open-comments question.
- A lang-team design meeting proposal (lang-team#348) has been open since August 2025. Its framing: the main blockers, such as the next trait solver, are lifted or in sight, so the lang team may now have capacity to consider a design seriously, and PoignardAzur will write the RFC. The
-Znext-solver stabilization this report covered a few days ago is one of those prerequisites.
- The skeptics are a minority but not a small one. Their main worry is "death by a thousand cuts": an accumulation of small arcane features making Rust impenetrable to newcomers. The survey post itself concludes that future proposals should offer a syntax that is easy to read and show strong upsides over today's macro workarounds.
So this week the tug-of-war between "we needed this yesterday" and "don't make the language heavier" became visible, with data.
The problem
Rust has no general way to talk about "a tuple of any length" at the type level. To implement Hash or Clone for tuples you need one impl per arity, (A,), (A, B), (A, B, C), and so on, and in practice people generate a "tuple pyramid" with declarative macros. The standard library's Hash for tuples is done this way.
Real examples:
- Bevy uses
all_tuples! (from the variadics_please crate) to generate impls for, say, 0 to 15 elements. System parameters and queries are expressed as tuples.
- Diesel uses
__diesel_for_each_tuple!, covering up to 32 elements by default and up to 128 behind feature flags. Maintainer weiznich reports that enabling 128 once made building diesel itself take about 10 minutes, and users still ask for bigger tuples, because tuple size maps directly to how many columns a table can have.
- Child lists in UI frameworks (Leptos, Xilem), reactive dependency lists in Dioxus, argument lists of WebAssembly functions (from conversations at RustNL and RustWeek).
The pain of the macro workaround (combining the survey, weiznich, and Alice Cecile):
- Terrible error messages: they come out as "none of these 16 impls matched".
- Compile time: every arity is generated up front whether it is used or not. A user who needs 1, 3, and 128 elements still pays for 1 through 128.
- Docs and discoverability: rustdoc shows a wall of impls. The internal
#[doc(fake_variadic)] attribute collapses them into one, but it needs nightly rustdoc_internals and does not show the maximum size.
- The ceiling: "I implemented up to 12, then a user needed 13" happens again and again.
- Lost opportunity: the most striking survey answers are from people who gave up up front, falling back to
Vec<Box<dyn Trait>> when they really wanted a tuple of different types, or never writing a tuple impl because the macro was too much hassle.
How it would work