Est-ce que tu pourrais en dire un peu plus sur la signification de alias pred, et pourquoi tu utilises un compile-time test plutôt que de spécifier un type du style delegate bool(T)?
L'exemple est tiré de "The D Programming Language" d'A. Alexandrescu. Vous avez raison, delegate bool(T) est plus simple ici, mais c'est juste à titre d'exemple. Mais imaginons une fonction find42 qui cherche la string '42'.
T[]find42(aliaspred,T)(T[]input)if(is(typeof(pred(input[0]))==string){// on raccourcit le tableau d'un elem, ce qui revient à avancer le pointeur *inputfor(;input.length>0;input=input[1..$]){if(pred(input[0])=='42')break;// si le prédicat vaut '42', on s'arrête}returninput;}
alias nom synonyme; où nom peut être n'importe quel symbole compilable, ça peut être une fonction, un type, une valeur, un nom de module…
Dans find42, alias pred peut être un delegate string(T), mais aussi une string, par exemple.
Les contraintes if peuvent bien sûr être nettement plus complexes et porter sur les divers paramètres du template.
À mon humble avis il y a déjà assez de langages satisfaisants à l'implémentation libre pour qu'on n'ait pas besoin de jeter son dévolu sur un langage au statut moins clair. Par exemple, si j'étais intéressé par le genre de choses que met D en avant, je pourrais à la place utiliser et soutenir Rust (aussi en développement), ATS (un peu plus orienté recherche), Cyclone (un peu mort), Vala ou même Common Lisp (SBCL) ou OCaml.
Le gros avantage de D, outre la syntaxe relativement familière pour les habitués de C++ est son rapport expressivité/performance. ATS a l'air intéressant, mais ne semble maintenu que par une personne. D a maintenant une dizaine de contributeurs très réguliers et une trentaine de contributeurs occasionnels. C'est sans compter les mainteneurs des compilateurs alternatifs. Il y a en moyenne 5 bugs corrigés/jour, sans compter les nouveaux développements. Comme il est développé par des experts du C++ (W. Bright et A. Alexandrescu), ce langage et ses pratiquants sont clairement la cible. Par conséquent, la performance fait partie des buts essentiels.
[^] # Re: Bof
Posté par lovelydear . En réponse à la dépêche Le langage D. Évalué à 1.
L'exemple est tiré de "The D Programming Language" d'A. Alexandrescu. Vous avez raison, delegate bool(T) est plus simple ici, mais c'est juste à titre d'exemple. Mais imaginons une fonction find42 qui cherche la string '42'.
alias nom synonyme; où nom peut être n'importe quel symbole compilable, ça peut être une fonction, un type, une valeur, un nom de module…
Dans find42, alias pred peut être un delegate string(T), mais aussi une string, par exemple.
Les contraintes if peuvent bien sûr être nettement plus complexes et porter sur les divers paramètres du template.
Le gros avantage de D, outre la syntaxe relativement familière pour les habitués de C++ est son rapport expressivité/performance. ATS a l'air intéressant, mais ne semble maintenu que par une personne. D a maintenant une dizaine de contributeurs très réguliers et une trentaine de contributeurs occasionnels. C'est sans compter les mainteneurs des compilateurs alternatifs. Il y a en moyenne 5 bugs corrigés/jour, sans compter les nouveaux développements. Comme il est développé par des experts du C++ (W. Bright et A. Alexandrescu), ce langage et ses pratiquants sont clairement la cible. Par conséquent, la performance fait partie des buts essentiels.