Rust a safe, concurrent, practical language

http://www.rust-lang.org

  • Il existe des tas de #langages_de_programmation et les chercheurs en inventent de nouveaux tous les jours, sans se demander si c’est utile. Toutefois, si on regroupe les langages en catégories, on s’aperçoit que certaines catégories sont très encombrées (langages fonctionnels), alors que d’autres attirent moins d’intérêt. C’est ainsi que la catégorie « programmation système et réseaux à haute performance » a peu de membres et que #C y règne toujours en maître (le langage C avec le hashtag, pas le truc de Microsoft qui a aussi un croisillon).

    Sur ce créneau, C a peu de concurrents, à part #C++, #Erlang et, plus récemment, #Go. Pour ne prendre qu’un exemple, des quatres logiciels serveurs DNS faisant autorité, tous sont en C (la prochaine version de BIND est en C++), simplement parce qu’il n’y a guère d’alternative réaliste.

    Un nouveau langage, #Rust, arrive dans cette catégorie. Il est en cours de développement (et la syntaxe et la sémantique changent tout le temps) chez Mozilla.

    La page officielle : http://www.rust-lang.org

    Des documents d’introduction : http://winningraceconditions.blogspot.co.uk/2012/09/rust-0-index-and-conclusion.html

    En deux mots, Rust est un langage statiquement typé (comme C et Go), prévu pour le parallèlisme (comme Go et Erlang) et censé être optimisé pour les performances. Sa principale originalité me semble être son mécanisme de la gestion mémoire, avec trois types de pointeurs, conçus pour des usages différents. Je cite un document d’introduction :

    ~T is a unique pointer to a T. It points to memory allocated in the send heap, which means data inside of unique pointers can be sent between tasks. You can copy unique pointers, but only by deeply copying (otherwise they wouldn’t be unique !) (and by default, they are "non-implicitly-copyable", so the compiler will issue warnings if you copy them without writing the "copy" keyword).

    @T is a managed pointer to a T. Currently, these are reference-counted and cycle-collected (they may be full-on GCed in the future). Copying one increments the reference count, so multiple managed pointers can point to the same data. These are allocated on a per-task private heap, and cannot be sent between tasks.

    &T is a borrowed pointer to a T. It can point to the inside of arbitrary data structures - on the stack, inside ~ or @ pointers, etc. Rust has a static analysis, called the "borrow checker", that ensures that borrowed pointers must not outlive the scope of the pointed-to data (i.e., it is impossible for rust programs to have a use-after-free).