It's a good article, but it reminds me that sometimes I feel like with protocol-oriented programming we're just reinventing class hierarchies with a new kind of polymorphism and finding a way to do things with composition instead of inheritance, just because that's the new right way to do everything. Other than value types vs reference types, what would be the downside of FileImporter being a base class with a few subclasses for each file type? The base class could have a factory method that returns one of the subclasses.
And could we achieve much of what we want with protocol-oriented programming crossed with value types if structs could have inheritance? I know that sounds strange.
In short, I totally get the elegance of protocol-oriented programming, but I wonder if for most of its applications a traditional class hierarchy would be more than good enough. I'm not sure inheritance is as bad a word as people make it out to be.