Indeed, it's a good idea to use consistent terminology; thankfully, GP is an unambiguous, well-defined term (significantly predating the appearance of "C#" -- it's not clear what its importance or relevance is here):QuoteThe term generic programming was originally coined by David Musser and Alexander Stepanov[2] in a more specific sense than the above, to describe a programming paradigm whereby fundamental requirements on types are abstracted from across concrete examples of algorithms and data structures and formalised as concepts, with generic functions implemented in terms of these concepts, typically using language genericity mechanisms as described above.// from the posted link:
http://en.wikipedia.org/wiki/Generic_programming// referring to Musser, D. R.; Stepanov, A. A. (1989). "Generic programming".It seems that there's some possible misunderstanding / conflation between the necessary conditions and sufficient conditions going on here.GP is a programming style, parametric polymorphism is a tool that may be used in this context; consider: Quotegeneric functions and generic datatypes respectively [...] form the basis of generic programming.Fortunately, it's not a mater of a personal "opinion" about what the best(?) term is, both are well-defined, well-known, and have their own specific uses.It seems that Eiffel only supported generic datatypes ("generic classes"):
http://en.wikipedia.org/wiki/Eiffel_%28 ... n_Eiffel// On a side note, if one wanted to point out some kind of historical precedence, even just in the context of support for parametric polymorphism, ML (1973) would've been more appropriate than Eiffel (1986). Credit where credit's due, and all that.// Similarly, Cardelli & Wegner (1985) is indeed a good read, although it's worth noting that "parametric polymorphism" was already introduced by Strachey (1967), in "Fundamental Concepts in Programming Languages".Now, to the necessary vs. sufficient conditions; take an example:QuoteGenerics are a facility of generic programmingNote that a "facility of X" is not equal to X.In other words, "generics" are not equal "generic programming" -- just as languages that happen support "functions" (sometimes even "procedures" or "subroutines") aren't all equally supporting "functional programming".A necessary condition is not a sufficient condition: It would be a bit silly to argue that C is a functional programming language, wouldn't it?These are all well-defined and well-known terms in the PLT community -- and it's a good idea to stick to the established terminology, especially when communicating with other people (assuming being understood is considered a desirable feature).If some conflate support for "generics" with support for "generic programming" -- or support for "functions" with support for "functional programming" -- then, indeed, seems they may suffer from the "changing the meaning of words" problem. No reason to blame CS "abandon", really