Есть ли какие-либо языки, которые реализуют дженерики _well _?

Я успешно открыл браузер с Java, используя SWT . Вы можете найти примеры кода о том, как использовать SWT для открытия окна браузера. Это очень легко сделать.

7
задан 4 revs, 2 users 65% 23 May 2017 в 12:19
поделиться

6 ответов

Haskell реализует параметризацию конструктора типа (дженерики или параметрический полиморфизм) вполне хорошо. Также - Scala (хотя иногда требуется немного содержания руки).

Оба из этих языков имеют более-высокие-kinded типы (иначе конструкторы абстрактного типа, или полиморфизм конструктора типа или полиморфизм высшего порядка).

Посмотрите здесь: Дженерики Более высокого Вида

14
ответ дан 6 December 2019 в 05:49
поделиться

Я использую .NET (VB.Net) и не имел никаких проблем с помощью дженериков. Это является главным образом безболезненным.

Dim Cars as List(Of Car)
Dim Car as Car

For Each Car in Cars
...
Next

Никогда не имел проблем с помощью универсальных наборов, хотя я не пошел, насколько разработать любые объекты то использование дженерики самостоятельно.

1
ответ дан 6 December 2019 в 05:49
поделиться

Я добавлю OCaml к списку, который имеет действительно универсальные дженерики. Я соглашаюсь, что классы типа Haskell действительно хорошо сделаны, но это несколько отличается в том, что у Haskell нет семантики OO, но OCaml действительно поддерживает OO.

3
ответ дан 6 December 2019 в 05:49
поделиться

Heck, английский даже не реализует дженериков хорошо.:)

Моя предвзятость для C#. Главным образом, потому что, именно это я в настоящее время использую и я использовал их успешно.

7
ответ дан 6 December 2019 в 05:49
поделиться

Я думаю, что дженерики в Java на самом деле довольно хороши. Причина, почему List<Foo> отличается, чем List<? extends Foo> это когда Foo подтип Bar, List<Foo> не подтип List<Bar>. Если Вы могли бы рассматривать a List<Foo> возразите как a List<Bar>, затем Вы могли добавить Bar объекты к нему, которые могли повредить вещи. Любая разумная система типов потребует этого. Java позволяет Вам сойти с рук обработка Foo[] как подтип Bar[], но это вызывает проверки на этапе выполнения, уменьшая производительность. При возврате такого массива это мешает компилятору знать, сделать ли проверку на этапе выполнения.

Я никогда не должен был использовать нижние границы (List<? super Foo>), но я предположил бы, что они могли бы быть полезны для возвращения универсальных значений. Посмотрите ковариантность и контравариантность.

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

7
ответ дан 6 December 2019 в 05:49
поделиться

Я думаю, что C# и VB.NET делают хорошее задание с дженериками.

0
ответ дан 6 December 2019 в 05:49
поделиться
Другие вопросы по тегам:

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