Я думаю, что правильный ответ на подобные вопросы - это почти всегда "исторические причины, в основном". Дженерики с таким же успехом можно было бы назвать «схемами» или «классами» или «семействами типов», или «родами», или «функциями типов», или «статиками», или «греческими типами», или любыми другими миллионами вещей. Давным-давно кто-то решил использовать слово «универсальный», и оно застряло.
«Дженерик» в смысле Java относится, по крайней мере, к середине 1970-х годов. Министерство обороны США готовило документ с требованиями для своего нового языка программирования (который станет ADA). Ранний проект ( «Деревянник» , август 1975 г.) гласит:
Параметры времени компиляции необходимы в расширяемых языках, чтобы разрешить спецификацию общих процедур и структур данных, таких как стеки и очереди, без повторения определения для каждого типа элемента.
Это единственное использование «универсального» в документе. Мне не ясно, как это было задумано. Но к июлю 1977 года ( «Жестянщик» ) был целый параграф о дженериках, и термин явно стал означать нечто конкретное:
12D. ОБЩИЕ ОПРЕДЕЛЕНИЯ
Должна быть возможность определять функции, процедуры и типы с параметрами, которые создаются во время трансляции при каждом вызове. Такими параметрами могут быть любые определенные идентификаторы (в том числе для переменных, функций или типов), выражение или оператор. Эти параметры, как и все остальные параметры, должны оцениваться в контексте вызова.
К июню 1978 г. ( «Сталман» ) был создан жаргон; в других разделах документа использовались другие термины «родовой», которые явно ссылались на эту функцию. На готовом языке generic
было зарезервированным словом.
Авторы этих документов перечислены на сайте, и, вероятно, большинство из них все еще существуют. Было бы здорово позвонить им и спросить, что они помнят.
Самое раннее правдоподобно связанное использование «родового», которое я нашел в научных кругах, было в книге Робина Милнера «1029 *« Теория полиморфизма типов в программировании » (1978) (и он чувствует необходимость объяснить, что он имеет в виду под« » «универсальный», так что в то время он не мог использоваться в академических кругах):
Так что это универсальный тип map , то есть любому экземпляру map в рамках этого объявления должен быть назначен некоторый экземпляр замещения этого типа.
«Переменная общего типа» стала жаргоном CS.