Rust uses traits to define units of shared behavior. Trait constraints build
up an implicit set of first-order hereditary Harrop clauses which is executed
by a powerful logic programming engine in the trait system. But that power
comes at a cost: the number of traits in Rust libraries is increasing, which
puts a growing burden on the trait system to help programmers diagnose errors.
Beyond a certain size of trait constraints, compiler diagnostics fall off the
edge of a complexity cliff, leading to useless error messages. Crate
maintainers have created ad-hoc solutions to diagnose common domain-specific
errors, but the problem of diagnosing trait errors in general is still open. We
propose a trait debugger as a means of getting developers the information
necessary to diagnose trait errors in any domain and at any scale. Our proposed
tool will extract proof trees from the trait solver, and it will interactively
visualize these proof trees to facilitate debugging of trait errors.Comment: 9 pages, 2 figure