Open
Description
Diesel is currently really slow, @petervdonovan provided the following (likely related) minimization on zulip.
pub trait MapsTmf<E> {
type Tmf;
}
pub struct BoundedNat;
pub struct Pair<L, R>(std::marker::PhantomData<(L, R)>);
pub trait Heap: Sized
+ MapsTmf<BoundedNat>
+ MapsTmf<<Self as MapsTmf<BoundedNat>>::Tmf>
+ MapsTmf<Pair<Self::LeftOperand, <Self as MapsTmf<<Self as MapsTmf<BoundedNat>>::Tmf>>::Tmf>>
+ MapsTmf<Pair<Self::RightOperand, <Self as MapsTmf<<Self as MapsTmf<BoundedNat>>::Tmf>>::Tmf>>
+ MapsTmf<Pair<Self::Nat, <Self as MapsTmf<<Self as MapsTmf<BoundedNat>>::Tmf>>::Tmf>>
+ MapsTmf<Pair<Self::F, <Self as MapsTmf<<Self as MapsTmf<BoundedNat>>::Tmf>>::Tmf>>
+ MapsTmf<Pair<Self::Plus, <Self as MapsTmf<<Self as MapsTmf<BoundedNat>>::Tmf>>::Tmf>>
+ MapsTmf<Pair<Self::Sum, <Self as MapsTmf<<Self as MapsTmf<BoundedNat>>::Tmf>>::Tmf>>
+ MapsTmf<Pair<<Self as MapsTmf<BoundedNat>>::Tmf, <Self as MapsTmf<<Self as MapsTmf<BoundedNat>>::Tmf>>::Tmf>>
+ MapsTmf<Pair<<Self as MapsTmf<Pair<Self::LeftOperand, <Self as MapsTmf<<Self as MapsTmf<BoundedNat>>::Tmf>>::Tmf>>>::Tmf, <Self as MapsTmf<BoundedNat>>::Tmf>>
+ MapsTmf<Pair<<Self as MapsTmf<Pair<Self::RightOperand, <Self as MapsTmf<<Self as MapsTmf<BoundedNat>>::Tmf>>::Tmf>>>::Tmf, <Self as MapsTmf<BoundedNat>>::Tmf>>
+ MapsTmf<Pair<<Self as MapsTmf<Pair<Self::Nat, <Self as MapsTmf<<Self as MapsTmf<BoundedNat>>::Tmf>>::Tmf>>>::Tmf, <Self as MapsTmf<BoundedNat>>::Tmf>>
+ MapsTmf<Pair<<Self as MapsTmf<Pair<Self::F, <Self as MapsTmf<<Self as MapsTmf<BoundedNat>>::Tmf>>::Tmf>>>::Tmf, <Self as MapsTmf<BoundedNat>>::Tmf>>
+ MapsTmf<Pair<<Self as MapsTmf<Pair<Self::Plus, <Self as MapsTmf<<Self as MapsTmf<BoundedNat>>::Tmf>>::Tmf>>>::Tmf, <Self as MapsTmf<BoundedNat>>::Tmf>>
+ MapsTmf<Pair<<Self as MapsTmf<Pair<Self::Sum, <Self as MapsTmf<<Self as MapsTmf<BoundedNat>>::Tmf>>::Tmf>>>::Tmf, <Self as MapsTmf<BoundedNat>>::Tmf>>
+ MapsTmf<Pair<<Self as MapsTmf<Pair<<Self as MapsTmf<BoundedNat>>::Tmf, <Self as MapsTmf<<Self as MapsTmf<BoundedNat>>::Tmf>>::Tmf>>>::Tmf, <Self as MapsTmf<BoundedNat>>::Tmf>>
+ MapsTmf<<Self as MapsTmf<Pair<<Self as MapsTmf<Pair<Self::Nat, <Self as MapsTmf<<Self as MapsTmf<BoundedNat>>::Tmf>>::Tmf>>>::Tmf, <Self as MapsTmf<BoundedNat>>::Tmf>>>::Tmf>
+ MapsTmf<<Self as MapsTmf<Pair<<Self as MapsTmf<Pair<Self::F, <Self as MapsTmf<<Self as MapsTmf<BoundedNat>>::Tmf>>::Tmf>>>::Tmf, <Self as MapsTmf<BoundedNat>>::Tmf>>>::Tmf>
+ MapsTmf<<Self as MapsTmf<Pair<<Self as MapsTmf<Pair<Self::Plus, <Self as MapsTmf<<Self as MapsTmf<BoundedNat>>::Tmf>>::Tmf>>>::Tmf, <Self as MapsTmf<BoundedNat>>::Tmf>>>::Tmf>
+ MapsTmf<Pair<<Self as MapsTmf<<Self as MapsTmf<Pair<<Self as MapsTmf<Pair<Self::Nat, <Self as MapsTmf<<Self as MapsTmf<BoundedNat>>::Tmf>>::Tmf>>>::Tmf, <Self as MapsTmf<BoundedNat>>::Tmf>>>::Tmf>>::Tmf, <Self as MapsTmf<<Self as MapsTmf<BoundedNat>>::Tmf>>::Tmf>>
+ MapsTmf<Pair<<Self as MapsTmf<<Self as MapsTmf<Pair<<Self as MapsTmf<Pair<Self::F, <Self as MapsTmf<<Self as MapsTmf<BoundedNat>>::Tmf>>::Tmf>>>::Tmf, <Self as MapsTmf<BoundedNat>>::Tmf>>>::Tmf>>::Tmf, <Self as MapsTmf<<Self as MapsTmf<BoundedNat>>::Tmf>>::Tmf>>
{
// to trigger the perf issue, we do need multiple associated types involved
// i.e., replacing all of them with Nat makes the issue go away
type Plus;
type LeftOperand;
type RightOperand;
type F;
type Sum;
type Nat;
}
Metadata
Metadata
Assignees
Labels
No labels
Type
Projects
Status
potentially irrelevant