I understand the syntactic application of generics as a language feature, but Ole Begemann’s post on protocols convinced me there’s still a lot of gold to be mined in their conceptual underpinnings.
Towards that, I’ve found these two papers particularly enlightening:
An example chunk of wisdom from Fundamentals (lightly edited for conformance with Swift syntax):
The critical insight which produced generic programming is that highly reusable components must be programmed assuming a minimal collection of [protocols], and that the [protocols] used must match as wide a variety of concrete program structures as possible.
Thus, successful production of a generic component is not simply a matter of identifying the minimal requirements of an arbitrary type or algorithm – it requires identifying the common requirements of a broad collection of similar components.
1: Presented at the “First International Joint Conference of the International Symposium on Symbolic and Algebraic Computations and Applied Algebra, Algebraic Algorithms, and Error Correcting Codes”. Ladies and gentlemen, that is how you name a goddamned conference! ↩︎