Rust is very aggressive towards beginners

From Why are Option variants lang items?, we see this list of lang items.

Note that a topic of debate is whether these should be split into two categories:

  • Semantics-altering lang items (Things which cannot be expressed using pure rust, such as Box, or Fn traits)
  • Compiler-knowledge items, where the compiler "needs to know" where they are when doing desugaring, such as for loops, ? operations, etc.

Filtering for lines that have Target::Trait, we see:

Sized,                   sized_trait,                Target::Trait;
Unsize,                  unsize_trait,               Target::Trait;
StructuralPeq,           structural_peq_trait,       Target::Trait;
StructuralTeq,           structural_teq_trait,       Target::Trait;
Copy,                    copy_trait,                 Target::Trait;
Clone,                   clone_trait,                Target::Trait;
Sync,                    sync_trait,                 Target::Trait;
DiscriminantKind,        discriminant_kind_trait,    Target::Trait;
PointeeTrait,            pointee_trait,              Target::Trait;
Freeze,                  freeze_trait,               Target::Trait;
Drop,                    drop_trait,                 Target::Trait;
CoerceUnsized,           coerce_unsized_trait,       Target::Trait;
DispatchFromDyn,         dispatch_from_dyn_trait,    Target::Trait;
Add(Op),                 add_trait,                  Target::Trait;
Sub(Op),                 sub_trait,                  Target::Trait;
Mul(Op),                 mul_trait,                  Target::Trait;
Div(Op),                 div_trait,                  Target::Trait;
Rem(Op),                 rem_trait,                  Target::Trait;
Neg(Op),                 neg_trait,                  Target::Trait;
Not(Op),                 not_trait,                  Target::Trait;
BitXor(Op),              bitxor_trait,               Target::Trait;
BitAnd(Op),              bitand_trait,               Target::Trait;
BitOr(Op),               bitor_trait,                Target::Trait;
Shl(Op),                 shl_trait,                  Target::Trait;
Shr(Op),                 shr_trait,                  Target::Trait;
AddAssign(Op),           add_assign_trait,           Target::Trait;
SubAssign(Op),           sub_assign_trait,           Target::Trait;
MulAssign(Op),           mul_assign_trait,           Target::Trait;
DivAssign(Op),           div_assign_trait,           Target::Trait;
RemAssign(Op),           rem_assign_trait,           Target::Trait;
BitXorAssign(Op),        bitxor_assign_trait,        Target::Trait;
BitAndAssign(Op),        bitand_assign_trait,        Target::Trait;
BitOrAssign(Op),         bitor_assign_trait,         Target::Trait;
ShlAssign(Op),           shl_assign_trait,           Target::Trait;
ShrAssign(Op),           shr_assign_trait,           Target::Trait;
Index(Op),               index_trait,                Target::Trait;
IndexMut(Op),            index_mut_trait,            Target::Trait;
Deref,                   deref_trait,                Target::Trait;
DerefMut,                deref_mut_trait,            Target::Trait;
Receiver,                receiver_trait,             Target::Trait;
Fn,                      fn_trait,                   Target::Trait;
FnMut,                   fn_mut_trait,               Target::Trait;
FnOnce,                  fn_once_trait,              Target::Trait;
Future,                  future_trait,               Target::Trait;
Generator,               gen_trait,                  Target::Trait;
Unpin,                   unpin_trait,                Target::Trait;
PartialEq,               eq_trait,                   Target::Trait;
PartialOrd,              partial_ord_trait,          Target::Trait;
Termination,             termination,                Target::Trait;
Try,                     try_trait,                  Target::Trait;

TryFromError,            from_error_fn,              Target::Method(MethodKind::Trait { body: false });
TryFromOk,               from_ok_fn,                 Target::Method(MethodKind::Trait { body: false });
TryIntoResult,           into_result_fn,             Target::Method(MethodKind::Trait { body: false });
FuturePoll,              future_poll_fn,             Target::Method(MethodKind::Trait { body: false });
FromFrom,                from_fn,                    Target::Method(MethodKind::Trait { body: false });
IntoIterIntoIter,        into_iter_fn,               Target::Method(MethodKind::Trait { body: false });
IteratorNext,            next_fn,                    Target::Method(MethodKind::Trait { body: false});
1 Like