Il est communément admis que les génériques Java ont échoué de plusieurs manières importantes. La combinaison de caractères génériques et de limites a conduit à un code très illisible.
Cependant, quand je regarde d'autres langages, je n'arrive vraiment pas à trouver un système de type générique qui plaise aux programmeurs.
Si nous prenons les éléments suivants comme objectifs de conception d'un tel système de types:
- Produit toujours des déclarations de type faciles à lire
- Facile à apprendre (pas besoin de réviser la covariance, la contravariance, etc.)
- maximise le nombre d'erreurs de compilation
Y a-t-il une langue qui a bien fait les choses? Si je google, la seule chose que je vois est des plaintes sur la façon dont le système de type aspire dans la langue X. Ce type de complexité est-il inhérent à la frappe générique? Faut-il simplement renoncer à essayer de vérifier la sécurité du type à 100% au moment de la compilation?
Ma principale question est de savoir quel est le langage qui a "bien fait les choses" en ce qui concerne ces trois objectifs. Je me rends compte que c'est subjectif, mais jusqu'à présent, je ne peux même pas trouver une langue où tous les programmeurs ne conviennent pas que le système de type générique est un gâchis.
Addendum: comme indiqué, la combinaison de sous-typage / héritage et génériques est ce qui crée la complexité, donc je suis vraiment à la recherche d'un langage qui combine les deux et évite l'explosion de la complexité.
Foo<T> where SiameseCat:T
) et qu'il n'y a aucune possibilité d'avoir un type générique qui ne soit pas convertible en Object
. À mon humble avis, .NET bénéficierait de types d'agrégats similaires aux structures, mais encore plus désossés. S'il KeyValuePair<TKey,TValue>
s'agissait d'un tel type, alors un IEnumerable<KeyValuePair<SiameseCat,FordFocus>>
pourrait être converti en IEnumerable<KeyValuePair<Animal,Vehicle>>
, mais uniquement si le type ne pouvait pas être encadré.
easy-to-read type declarations
? Le troisième critère est également ambigu: par exemple, je peux transformer les exceptions d'index de tableau hors limites en erreurs de temps de compilation en ne vous laissant pas indexer les tableaux sauf si je peux calculer l'index au moment de la compilation. De plus, le deuxième critère exclut le sous-typage. Ce n'est pas nécessairement une mauvaise chose, mais vous devez être conscient de ce que vous demandez.