• [^] # Re: Pourquoi Rust ?

    Posté par . En réponse au lien Rewrite it in Rust : au delà du meme (Google finance la réécriture en Rust de certains logiciels lib. Évalué à 3.

    Héhé, non, je parlais pas des regexps :-)

    Bah si. Tu peux le faire en java. L'introspection te permet ça.

    C'est différent : l'introspection apporte de l'expressivité en plus au langage (au sens des choses qu'il n'est pas possible de faire sans).

    Le filtrage par motif est une syntaxe déclarative pour écrire plus facilement certains types de code. Par exemple :

    match l with
    | [] -> (* faire des trucs si la liste l est vide *)
    | (Some ((Some x) :: [])) :: l' -> (* faire un truc spécial si le premier élément est un type option qui contient une liste avec un seul élément qui lui même contient un élément x *)
    | x :: [] -> (* dans les autres cas, si la liste n'a qu'un seul élément x *)
    | x :: y :: l' -> (* faire des trucs avec les deux premiers éléments x et y s'il y a au moins deux éléments dans la liste *)

    Une version plus impérative ferait plutôt quelque chose comme :

    if len(l) == 0 {
     // faire des trucs si la liste l est vide
     return
    }
    a := l[0]
    if a != nil {
     if len(*a) == 1 {
     x := (*a)[0]
     if x != nil {
     // faire un truc spécial si le premier élément est un type
     // option qui contient une liste avec un seul élément
     // qui lui même contient un élément x
     return
     }
     }
    }
    if len(l) == 1 {
     x := l[0]
     // dans les autres cas, si la liste n'a qu'un seul élément x
     return
    }
    x, y := l[0], l[1]
    // faire des trucs avec les deux premiers éléments x et y s'il y a au moins deux éléments dans la liste

    Après, c'est très tiré par les cheveux, c'est rare d'avoir à destructurer en profondeur juste un cas très particulier et pouvoir gérer tout le reste de façon homogène. En pratique, la différence en verbosité est moindre.