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

    Posté par . En réponse à la dépêche C++17, Genèse d’une version mineure. Évalué à 1. Dernière modification le 14 octobre 2016 à 16:42.

    Il n'y a pas de quoi pour mes réponses, on est là pour échanger et partager. Quand j'ai du temps, j'essaye d'être assez précis, d'illustrer le plus que je peux et de fournir des références si le lecteur veut prolonger sa réflexion de son côté.

    Pour les différentes représentations, elles ont chacune leur module avec leurs opérateurs propres :

    • module Int32 pour les entiers 32-bits signés;
    • module Int64 pour les entiers 64-bits signés;
    • module Num pour les opérations sur des rationnels en précision arbitraire.
    (* exemple sur les Int32 *)
    Int32.add 32l 64l;;
    - : int32 = 96l
    (* mais on peut le renommer localement + si on préfère *)
    let (+) = Int32.add in 32l + 54l;;
    - : int32 = 86l
    (* idem avec les Int64 *)
    Int64.add 32L 544L;;
    - : int64 = 576L
    let (+) = Int64.add in 32L + 544L;;
    - : int64 = 576L
    (* mais si on travaille dans un module où l'on ne manipule
     * que des Int32, il suffit de l'ouvrir et de renommer *)
    open Int32;;
    let (+) = add;;
    val ( + ) : int32 -> int32 -> int32 = <fun>
    127l + 233l;;
    - : int32 = 360l
    (* là comme j'étais dans la REPL j'ai perdu le + sur les int
     * il me suffit de le renommer et c'est good ! :-) *)
    let (+) = Pervasives.(+);;
    val ( + ) : int -> int -> int = <fun>
    21 + 21;;
    - : int = 42

    Une fois qu'il y aura le polymorphisme ad hoc, on pourra avoir un opérateur + « unique » pour les différentes représentations. J'ai mis les guillemets car en réalité, cela correspond à un seul alias pour différents codes mais qui préserve tout de même l'essentiel : le typage fort du langage.

    En attendant, on peut néanmoins déjà utiliser les principes du code avec les modules de première classe (et oui les modules aussi sont des citoyens de premières classe : c'est du lambda-calcul après tout ;-) mais avec paramètre explicite. Ils sont abordés au chapitre First-Class Modules (en) du livre Real World OCaml, et sont illustrés pour coder un query-handling framework.

    Sapere aude ! Aie le courage de te servir de ton propre entendement. Voilà la devise des Lumières.