Steve Klabnik was not talking about Box&lt;TraitObject&gt; vs TraitObject, but about f(x:TraitObject) vs f&lt;T:TraitObject&gt;(x:T). In the former the vtable is attached to the value, in the latter the vtable travels separately. These do have different semantics, compare f&lt;T:TraitObject&gt;(x:Vec&lt;T&gt;) with f(x:Vec&lt;TraitObject&gt;). In the x:Vec&lt;T&gt; case there is a single vtable that gets passed to the function, and all elements of the vector share that same vtable. With x:Vec&lt;TraitObject&gt; each element of the vector has its own vtable.<p>In terms of pseudo Haskell types these two types would be:<p><pre><code>    TraitObject t =&gt; List t -&gt; Result
    List (exists t. TraitObject t) -&gt; Result
</code></pre>
Rust cleverly sweeps the existential under the rug.