Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Quand Rust chie dans la colle

Maîtriser un art, ou ici un langage, c’est connaître ses failles et les regarder droit dans les yeux.

Développer son sens critique n’est pas être négatif·ve, ni de mauvaise foi, ni méchant·e ni toutes ces imbécilités que certain·e·s lèvent comme des boucliers dérisoires face à la force de la raison.

Développer son sens critique, c’est être en mesure de ne pas tomber dans les panneaux des beaux discours, et c’est aussi savoir vérifier les pièces les plus fragiles du puzzle dont nous nous servons, apprendre à ne pas tomber dans les panneaux, etc.

Rust souffre de pas mal d’incohérences qui pourraient coûter très cher aux impudent·e·s et aux imprudent·e·s qui préfèrent s’arc-bouter que réfléchir posément.

Le masquage (shadowing)

Avec le masquage, nous apprenons à détruire une variable sans ménagement ni aucune précaution pour la remplacer par une autre (ou d’autres mécanismes similaires).

Tout cela n’est pas sécurisé du tout, par rien.

C’est pourtant une des premières techniques (design patterns) que l’on enseigne lorsque l’on transmet l’art du développement sous Rust. Très fièrement, on explique que les variables sont immuables par défaut. Top ça ! Pour tout de suite expliquer qu’on peut les désintégrer en autre chose sans ménagement.

Lorsque nous intégrons ce type d’opération dans Rust, nous ne recevons aucune alerte, encore moins d’avertissement ni de blocage de protection sécuritaire.

Pour un langage qui prétend être sûr, cela commence assez mal.

Ce n’est pas la seule dissonance cognitive dans Rust, comme nous allons le voir ensemble.

Le déplacement (move)

Il y a un vrai capharnaüm dans Rust avec le move qui n’a pas le même comportement en fonction du type traité.

Imaginons quelques instants des voitures qui auraient une pédale d’accélérateur qui activerait les essuie-glaces plutôt que d’accélérer en fonction du type ou de la couleur des chaussures que nous portons pour conduire.

Ce serait ridicule, n’est-ce pas ?

Et bien ce type de manque de discernement existe bel et bien dans la Rust-sphere.

Dans Rust, avant d’appuyer sur l’accélérateur, nous devons vérifier quelles chaussures nous portons.

Et nous n’avons aucun moyen de contrôler le comportement que notre code va avoir : nous devons accepter le choix qu’ont fait des tiers et avancer qua hinc, qua hàc 1 avec.

Et ils·elles en sont fier·e·s !

Comme si c’était trop compliqué de mettre en place deux modes de comportement explicites, disjoints dans le langage, dont l’un n’est accessible qu’à certaines classes de données !

S’ils·elles avaient eu la tête mieux faite, ils·elles auraient créé :

  • le copy et
  • le move.

Le copy aurait toujours eu le même comportement.
Le move aurait toujours eu le même comportement.
Et les vaches auraient été bien gardées.

Ils·elles ont préféré créer une dette technique pharaonique qu’on aurait pu, très simplement, éviter.

Quel dommage pour un langage qui prétend nous aider à dormir sur nos deux oreilles… Le réveil pourrait bien être brutal et désagréable pour ceux·celles qui auraient oublié que tel type est move, et tel autre est Copy.

Bref, apprenez à vous défier du move Rust comme du loup déguisé en votre grand-mère… si vous ne voulez pas être dévoré·e un jour ou l’autre.


  1. Cahin-caha si vous préférez, ou même clopin-clopant. Voir https://fr.wiktionary.org/wiki/cahin-caha.