• [^] # Re: Jai: Language for game programmming

    Posté par . En réponse à la dépêche C++17, Genèse d’une version mineure. Évalué à 3.

    le duck typing (c’est le cas en python, et aussi en go si je ne me plante pas

    Le duck typing c'est un typage fort mais dynamique. Go fais ça de manière statique et on appelle ça un typage structurel.

    Ce sont des typages où pour le premier on vérifie dynamiquement si les noms de méthodes correspondent. Imagine en python hors classe new style, tu peux ajouter manuellement toutes les méthodes nécessaires à n'importe quelle variables pour t'en servir comme d'un tableau par exemple, c'est le principe du dynamique et on ne peut donc pas trop se contenter de regarder le type d'un objet pour savoir si on peut ou non s'en servir comme ça.

    En go c'est un peu différent, une variable peu correspondre à une interface qu'elle ne connaît pas (lors de la création de l'objet, on a pas indiqué qu'il descendait de cette interface), mais si c'est le cas il peut être utilisé comme un objet de cette interface. Le compilateur vérifie que l'objet a bien une structure qui correspond à l'interface demandé.

    Dans le paradigme fonctionnel, une variable a un type qui lui est propre et qui reste inchangé de sa création à sa libération. Ce qu'il y a c'est que tu peut indiquer que tu es capable de manipuler plusieurs types différents (soit parce que tu le spécialise via du pattern matching, soit parce que tu te contente de faire des courses que tu peux faire avec les 2).

    ce que tu dis c’est que là le compilateur s’autorise à créer de nouveaux types ?

    Non non c'est toi qui les crée.

    Est-ce à dire que si tu as une fonction f qui peut renvoyer soit un A, soit un B, et deux surcharges de g, l’une pour A, l’autre pour B, cela va fonctionner correctement de chaîner les appels g(f("toto")) ? Ce serait élégant.

    Oui et ça peut même aller plus loin, tu peux spécialiser pour des valeurs donné (par exemple avoir une fonction pour un entier et une pour la valeur 0, c'est souvent comme ça que sont géré les cas terminaux des fonctions récursives). Soit ça se fait par création de multiples fonctions soit via le pattern matching (je crois que ocaml n'a pas de multimethode - on ne parle pas de surcharge en fonctionnel car les fonctions cohabitent-). En tout cas oui le typage est propagé à travers les méthodes (c'est là que réside la beauté du bousin).

    Tous les contenus que j'écris ici sont sous licence CC0 (j'abandonne autant que possible mes droits d'auteur sur mes écrits)