This is essentially trying to explain the emerging design techniques
being used in LLVM these days somewhere more accessible than the
comments on a particular piece of infrastructure. It covers the
"concepts-based polymorphism" that caused some confusion during initial
reviews of the new pass manager as well as the tagged-dispatch mechanism
used pervasively in LLVM and Clang.
Perhaps most notably, I've tried to provide some criteria to help
developers choose between these options when designing new pieces of
infrastructure.
I'm going to send an email to llvm-dev and cfe-dev with the content of this
change to collect more general feedback as well, but sending this as a diff for
folks to review in Phabricator if that is more convenient.
Thanks, this makes the "closed type hierarchies" and "manual tagged dispatch" clear to me now.
I don't have any further remarks on the text - looks good to me.