Abstraction without overhead: traits in Rust
Great article.  The main bit of new information for me was that while Rust supports dynamic dispatch, its implementation has a noticeable difference from C++.  In C++, the vtable pointer is in the object itself.  In Rust, it's stored inside what is essentially a "fat pointer."  Pointers to traits ("trait objects") are actually two pointers: the pointer to the vtable and the pointer to the actual object.<p>This seems to have one major downside (pointers are twice as big), but lots of upsides:<p><pre><code>    - allows traits to be implemented for existing types, as opposed
      to C++ where the type's declaration has to list all base classes.

    - allows a type to be used through dynamic dispatch while allowing users
      who don't need this to avoid the vtable overhead.

    - one less indirection in the call sequence for dynamic dispatch.
</code></pre>
I like it a lot overall, though the idea of 16-byte pointers on 64-bit architectures does make me slightly queasy.