• [^] # Re: Le cerveau n'est pas logique

    Posté par . En réponse au journal Pourquoi la recherche en langages de programmation ?. Évalué à 5.

    Autant le code python me parle (je ne connais pas du tout ce langage), autant le DSL ne me parle pas.

    Là, il y à un truc que je ne comprends pas du tout. Je n'avais pas prêté attention au message de ta part auquel gasche t'a répondu en présentant ce DSL, mais tu y reprochais à OCaml de ne pas générer des instructions SIMD en écrivant :

    De plus, ocaml pourrait faire des map et fold sur des array de nombres, et proposer des versions vectorisés des opérations en question.

    Il te répond avec un langage qui fait cela pour du code sur GPU, et tu réponds que ça ne te parle pas ? C'est quoi le problème ? Qu'ils utilisent la lettre \lambda pour définir des fonctions ? Qu'ils écrivent reduce et non fold ?

    Si j'écris cela :

    let (<.>) f g = fun x -> f (g x);;
    let dot = fun xs ys -> Array.(fold_left (+) 0 <.> map2 ( * ) xs) ys
    dot (Array.of_list [1; 2]) (Array.of_list [3; 4]);;
    - : int = 11

    alors tu comprends, mais tu voudrais que cela génère du code optimisé avec instructions SIMD ?

    Mais quand on écrit :

    dot = λxs ys. (reduce (+) 0 ◦ map (∗)) (zip xs ys)
    

    alors tu ne comprends plus ?

    On pourrait rendre le code python encore plus concis avec :

    dot = lambda xs,ys: sum([a * b for a,b in zip(xs, ys)])

    mais quand on sait ce qu'est un fold (ou reduce), un map et une composition de fonctions, l'équivalence des deux écritures est évidente.

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