Non, je parlais du fait général de compiler les génériques/templates (et de comprendre/expliquer leur comportement) en remplaçant l'instantiation d'une template par son code
Oui, les generics sont effectivement assez compliqués à mettre en oeuvre. Un exemple "rigolo", c'est l'instanciation successive de trois génériques pour obtenir une matrice de complexes donc les composantes sont des réels (cf ARM). Ca donne un truc comme ça :
package Complex_type is new Ada.Numerics.Generic_Complex_Types(Short_Float);
use Complex_type;
package Real_Arrays is new Ada.Numerics.Generic_Real_Arrays(Short_Float);
use Real_Arrays;
package Complex_Arrays is new Ada.Numerics.Generic_Complex_Arrays(Real_Arrays, Complex_type);
au lieu de pouvoir raisonner de façon plus légère sur des fonctions polymorphes
C'est la grande bataille entre faire du pur objet en utilisant héritage, surdéfinition et faire du template. Quand utiliser quoi ? D'ailleurs, je trouve les templates plus complexes à manipuler, quelque soit le langage, qu'un graphe d'héritage
comment définir des génériques ou leurs instances localement, en profondeur dans la définition d'une fonction ?
Je vois pas la difficulté là, hormis syntaxique. Un bloc declare suffit normalement. Je dois pas avoir compris ce que tu voulais dire :)
Ada ne permet pas la spécialisation conditionnelle dont tu parles. Peut-être tant mieux, car ça rend la fonctionnalité drôlement compliquée, ce qui n'est pas terrible pour un langage orienté sûreté;
Tout à fait d'accord. Personnellement, je trouve la méta-programmation assez compliquée à manipuler et j'ai déjà assez de problèmes comme ça à coder sans :D
[^] # Re: Mes idéaux
Posté par Blackknight (site web personnel, Mastodon) . En réponse au journal Votre langage idéal ?. Évalué à 1.
Oui, les generics sont effectivement assez compliqués à mettre en oeuvre. Un exemple "rigolo", c'est l'instanciation successive de trois génériques pour obtenir une matrice de complexes donc les composantes sont des réels (cf ARM). Ca donne un truc comme ça :
C'est la grande bataille entre faire du pur objet en utilisant héritage, surdéfinition et faire du template. Quand utiliser quoi ? D'ailleurs, je trouve les templates plus complexes à manipuler, quelque soit le langage, qu'un graphe d'héritage
Je vois pas la difficulté là, hormis syntaxique. Un bloc declare suffit normalement. Je dois pas avoir compris ce que tu voulais dire :)
Tout à fait d'accord. Personnellement, je trouve la méta-programmation assez compliquée à manipuler et j'ai déjà assez de problèmes comme ça à coder sans :D