The type erasure pattern
As we've seen in the previous section, protocols cannot be used as types when they are associated with another type, in the form of Self
or associated type requirements. Indeed, they can only be used as generic constraints.
In this section, we'll discuss the different opportunities that we have in order to overcome this limitation. A common technique is called type erasure.
Note
You may wonder why we want to "erase" a type and what it means to "erase" a type. Let's turn to Wikipedia to answer this question: type erasure refers to the load-time (https://en.wikipedia.org/wiki/Loader_(computing)) process by which explicit type annotations (https://en.wikipedia.org/wiki/Type_signature) are removed from a program [...] In the context of generic programming (https://en.wikipedia.org/wiki/Generic_programming), the opposite of type erasure is called reification (https://en.wikipedia.org/wiki/Reification_(computer_science)).
The goal of type erasure is clear: it's to remove type...