I came across this a while back, and have been meaning to bring this up here. In short, members which are explicitly typed incur the same protocol call-site caching overhead as members which are untyped. This is shown in more detail at
https://gist.github.com/ztellman/5603216.
This was discovered in the course of investigating memory usage of an object which had a small number of fields, but a lot of code. Since the protocols were for internal usage I switched to interfaces instead, and the memory usage of this object was reduced twenty-fold. Even though I understood the basics of call-site caching, this surprised me quite a bit, and I'm sure there are a number of other people who are affected by this.
I don't have a deep understanding of the compiler, but it seems like if we know the type of an object, the protocol dispatch can and should be sidestepped entirely. Is there a reason this isn't possible? If not, is it an easy fix?
Zach