Moi ce que je disais c'est que le type des tableaux 'a array est polymorphe et contient des éléments de n'importe quel type 'a qui peut être un type de fonction
J'en déduis donc que selon toi un langage fonctionnel digne de ce nom doit être faiblement typé. Ou au moins doit avoir un type racine qui peut contenir n'importe quoi. C++ ne sera donc jamais un langage fonctionnel digne de ce nom.
L'inférence de type vérifie que le typage est correct. Quand tu touche à OCaml tu te rend vite compte qu'il a un typage fort.
L'inférence de type (je vais essayer de l'expliquer mais je vais me casser les dents, on va me reprendre derrière ^), c'est le compilateur qui va tenter de déduire les types non pas avec du transtypage et/ou de la conversion (PHP c'est toi qu'on regarde !), mais en propageant les types partout où c'est nécessaire.
Si tu as une fonction qui peut retourner soit le type A soit le type B, tu doit faire attention à gérer chacun des 2 types partout ou utiliser des fonctions ou des opérateurs qui peuvent prendre ces 2 types en paramètre. C'est en ça qu'ils sont polymorphiques. Le polymorphisme dans le paradigme fonctionnel ne s'appuie pas sur une hiérarchie de classe, mais sur le fait de pouvoir prendre un type parmi d'autres. C'est ce qu'ils appellent les union type si je ne m'abuse (mais je crois que je m'abuse, c'est un autre nom).
En tout cas ça permet de définir un type comme étant soit d'un type soit d'un autre (c'est pas limité à 2). Ça se rapproche du type union du C sauf que ça ne cache pas le type au compilateur, il va propager la liste des types partout où c'est nécessaire.
Tous les contenus que j'écris ici sont sous licence CC0 (j'abandonne autant que possible mes droits d'auteur sur mes écrits)
[^] # Re: Jai: Language for game programmming
Posté par barmic . En réponse à la dépêche C++17, Genèse d’une version mineure. Évalué à 4.
L'inférence de type vérifie que le typage est correct. Quand tu touche à OCaml tu te rend vite compte qu'il a un typage fort.
L'inférence de type (je vais essayer de l'expliquer mais je vais me casser les dents, on va me reprendre derrière ^), c'est le compilateur qui va tenter de déduire les types non pas avec du transtypage et/ou de la conversion (PHP c'est toi qu'on regarde !), mais en propageant les types partout où c'est nécessaire.
Si tu as une fonction qui peut retourner soit le type A soit le type B, tu doit faire attention à gérer chacun des 2 types partout ou utiliser des fonctions ou des opérateurs qui peuvent prendre ces 2 types en paramètre. C'est en ça qu'ils sont polymorphiques. Le polymorphisme dans le paradigme fonctionnel ne s'appuie pas sur une hiérarchie de classe, mais sur le fait de pouvoir prendre un type parmi d'autres. C'est ce qu'ils appellent les union type si je ne m'abuse (mais je crois que je m'abuse, c'est un autre nom).
En tout cas ça permet de définir un type comme étant soit d'un type soit d'un autre (c'est pas limité à 2). Ça se rapproche du type union du C sauf que ça ne cache pas le type au compilateur, il va propager la liste des types partout où c'est nécessaire.
Tous les contenus que j'écris ici sont sous licence CC0 (j'abandonne autant que possible mes droits d'auteur sur mes écrits)