• [^] # Re: J'ai trouvé ce projet marrant

    Posté par . En réponse au journal Un tap tempo en ligne de commande. Évalué à 3.

    J'aurais du mal à détailler toutes les caractéristiques du Rust (ou de n'importe quel langage) en quelques lignes, mais je dirais que si le code est plus concis, c'est dû d'une part aux macros procédurales qui permettent de générer n'importe quel code à la compilation:

    #[derive(Debug, StructOpt)]
    struct Params {
     #[structopt(short = "p", long = "precision", default_value = "0")]
     /// set the decimal precision of the tempo display [max: 5]
     precision: usize,
     #[structopt(short = "r", long = "reset-time", default_value = "5")]
     /// set the time in second to reset the computation
     reset_time: u64,
     #[structopt(short = "s", long = "sample-size", default_value = "5")]
     /// set the number of samples needed to compute the tempo
     sample_size: usize,
    }
    

    Ce code va générer tout le code nécessaire à la gestion des paramètres en ligne de commande par exemple. Ça a la même utilité que les templates en C++, mais c'est plus puissant (tu peux réécrire tout l'arbre syntaxique du code sur lequel s'applique la macro).

    La deuxième raison est que le code est orienté expression (comme un langage fonctionnel). On peut écrire des choses comme:

    fn are_close(a: f64, b: f64) -> bool {
     (a - b).abs() < 0.0001
    }
    

    Si j'ai géré le cas d'erreur c'est que c'est obligatoire en Rust (sinon ça génère un warning). En soi, je ne suis pas sûr que ce soit super utile, j'imagine qu'il y a peu de chance que l'écriture sur le terminal échoue.