• [^] # Re: Gnirehtet réécrit en Rust

    Posté par (site web personnel) . En réponse au journal Du reverse tethering, en Rust. Évalué à 7. Dernière modification le 26 septembre 2017 à 08:46.

    Quand je vois la liste des difficultés que tu dresses pour cette réécriture, [...] je ne veux absolument pas passer à Rust

    C'est vrai que les borrowing rules sont assez contraignantes pour la conception d'une application. En contrepartie, elles offrent un certain nombre de garanties à l'exécution, ce qui élimine toute une classe de bugs potentiels (et de failles de sécurité).

    Je crois que le truc qui m'a le plus choqué, c'est le paragraphe «Infinité indéfinie» qui explique que Rust fait de la merde mais à la fin, la conclusion, c'est que «les garanties de sûreté de Rust sont très fortes»

    Oui, à part ce bug (de LLVM), en pratique c'est vraiment le cas. Quand j'ai retravaillé sur un projet C++ après, ça m'a fait tout drôle d'avoir un segfault à l'exécution.

    un langage qui [...] me refile une météorite

    Pour nuancer, note que le comportement est également indéfini en C++:

    #include <iostream>
    void infinite(int value) {
     while (value != 0) {
     if (value != 1) {
     value -= 1;
     }
     }
    }
    int main() {
     infinite(42);
     std::cout << "end" << std::endl;
     return 0;
    }
    

    Sans optimisations :

    $ clang++ ub.cpp -o ub && ./ub
    ^C (infinite loop, interrupt it)
    

    Avec optimisations :

    $ clang++ -O1 ub.cpp -o ub && ./ub
    end
    

    blog.rom1v.com