Почему дженерики называют дженериками?

21
задан nawfal 16 October 2012 в 20:33
поделиться

9 ответов

"Универсальный" говорит о реализации. Вы пишете единственную "Универсальную" реализацию списка, которая работает с любым типом, вместо того, чтобы иметь необходимость записать определенные реализации для каждого типа, который Вы хотите использовать.

21
ответ дан 29 November 2019 в 20:39
поделиться

Я не хочу входить в семантику языка (английский, не Java), и рискуя тем, чтобы ответить Вам с тавтологией; общий метод называют универсальным, потому что, поскольку Вы сказали, может использоваться общий смысл, он не имеет определенного типа, он может обычно использоваться

1
ответ дан 29 November 2019 в 20:39
поделиться

Хорошо, возьмите это с мелкой частицей соли, потому что я полностью предположение, но интересно, могло ли это быть bastardization "Порождающих Типов".

Концептуально, когда Вы специализируете Список в List< Строка>, это генерирует новый тип. По крайней мере, это - способ, которым это работает в шаблонах C++ и в дженериках C#.

В Java, так как параметризация отбрасывается компилятором с помощью стирания типа, это на самом деле не делает , генерируют новый специализированный тип, поэтому кто знает?

я предполагаю, что Вы могли сказать, что Java реализует genericized версию порождающих типов:)

<час>

НА РЕДАКТИРОВАНИИ:

Вот другая точка зрения...

тип List< Строка> не то, что они говорят о том, когда они обращаются к "универсальному" типу. Я думаю, что терминология на самом деле относится к List< T> введите, который является, как тип существует в своей универсальной форме. List< Строка> является специализацией универсального List< T>.

1
ответ дан 29 November 2019 в 20:39
поделиться

Если бы они звонили, то это "люди" параметра (параметров) типа перепутало бы его с параметрами Типа типа.

кроме того, ArrayList не "универсален". Это ТОЛЬКО работает с типами объекта. Если Вы попросите у него чего-то, это даст Вам ссылку на объект. Это - очень определенное поведение.

0
ответ дан 29 November 2019 в 20:39
поделиться

Класс, который берет объекты, не универсален, он очень конкретно берет тип , который является самостоятельно универсальным типом. Универсальный класс, с другой стороны, может использоваться с любым определенным типом.

0
ответ дан 29 November 2019 в 20:39
поделиться

Поскольку Вы создаете "Универсальный" код, который будет способен к работе на любом типе (в рамках ограничений, которые Вы определяете), таким же образом...

хорошим примером, с которым Вы знакомы, является оператор Add, примерно любой язык..., это может "Добавить", что целые числа, плавания, удваиваются, десятичные числа, двоичные файлы, hexadecimals, независимо от того, подписываются ли они, unsogned, сколько битов они, и т.д.

0
ответ дан 29 November 2019 в 20:39
поделиться

Я не "собственный" англоговорящий, таким образом, я мог быть неправым, но точка "Дженериков" то, что Определить типы Дженериков, не так ли?

-1
ответ дан 29 November 2019 в 20:39
поделиться
bool Equals(int x, int y)

Вышеупомянутый метод может сравнивать только целые числа, поэтому мы можем сказать, что он специализирован для сравнения целых чисел.

bool Equals<T>(T x, T y);

Вышеупомянутый метод может сравнивать значения любого типа, поэтому можно сказать, что он не специализирован для какого-либо конкретного типа - он общий .

4
ответ дан 29 November 2019 в 20:39
поделиться

I think the right answer to questions like this is almost always "historical reasons, mostly". Generics could just as well have been called "schemes" or "classes" or "type families" or "genera" or "type functions" or "statics" or "Greek types" or any of a million other things. Long ago someone decided to use the word "generic", and it stuck.

"Generic" in the Java sense dates back at least to the mid-1970s. The U.S. Department of Defense was honing a requirements document for its new programming language (what would become ADA). An early draft ("Woodenman", August 1975) says:

Compile time parameters are needed in extensible languages to permit specification of generic procedures and data structures such as stacks, and queues without repeating the definition for each element type.

This is the only use of "generic" in the document. It's not clear to me how it was intended. But by July 1977 ("Tinman") there was a whole paragraph on generics, and the term had clearly come to mean something specific:

12D. GENERIC DEFINITIONS

It shall be possible to define functions, procedures, and types with parameters that are instantiated during translation at each call. Such parameters may be any defined identifier (including those for variables, functions, or types), an expression, or a statement. These parameters, like all other parameters, shall be evaluated in the context of the call.

By June 1978 ("Steelman") it was established jargon; there were other uses of the term "generic" in other sections of the document, clearly referring to this feature. In the finished language, generic was a reserved word.

The authors of these documents are listed on the site, and presumably most are still around. It would be neat to call them up and ask what they remember.


The earliest plausibly related use of "generic" I found in academia was in Robin Milner's "A theory of type polymorphism in programming" (1978) (and he feels compelled to explain what he means by "generic", so it can't have been in common use in academia at that time):

So this is the generic type of map, that is, to any occurrence of map within the scope of this declaration must be assigned some substitution instance of this type.

"Generic type variable" became CS jargon.

14
ответ дан 29 November 2019 в 20:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: