NSDictionary's cloning behavior is a good idea for
NSDictionary because of Foundation's use of mutable reference types for basic values. Swift discourages that, and that seems to have been pretty effective, so I'm not sure there's a real problem here. We can't really stop programmers from defining nonsensical conformances to
Hashable, and cloning as a solution to object mutation causes its own problems.
If you're doing any work with a mutable object, you already need to have an intuition of what you're allowed to touch and what might be changing out from under you; that's just the inherent complexity of reference types. If you know that nothing's going to be modifying the object, there's no reason you shouldn't be able to put it in a
Dictionary without a clone; if you don't know that, it's not clear that you can even clone it safely, because it's not like cloning is an atomic operation.
If we want to provide Midori-like language tools to help programmers manage that inherent complexity of reference types, that's great, but it's not a short-term solution, and short-term solutions like eagerly cloning aren't actually moving us incrementally towards that goal.