Tableaux multidimensionnels

Pour l’instant, Rust est dans une situation similaire à C++ en ce qui concerne les tableaux multidimensionnels : ils ne sont pas directement intégrés au langage comme en Fortran, mais disponibles sous forme de bibliothèques tierces.

Ces bibliothèques représentent un effort de recherche de l’API idéale qui est encore en cours, et ne se terminera probablement pas avant que certains prérequis soient remplis côté langage. Dans le cas de Rust, deux gros prérequis encore manquants sont une couche d’abstraction standard pour le SIMD et un support plus complet des types et opérations génériques paramétrés par des valeurs.

Il n’y a donc pas actuellement une solution parfaite prête à l’emploi, mais plusieurs solutions imparfaites qui répondent plus ou moins bien à différents besoins selon les choix de conception faits par chacune d’entre elles :

  • Si vous rencontrez principalement des problèmes d’algèbre linéaire à base de vecteurs et matrices, et désirez une génération de code spécialisée pour les problèmes de faible dimensionnalité qui en ont cruellement besoin, je vous recommande à l’heure actuelle de commencer par essayer nalgebra, même si des challengers intéressants comme faer commencent à arriver à l’horizon.
  • Si vous rencontrez des problèmes multidimensionnels plus généraux, comme les calculs en stencil, je vous recommande plutôt de commencer par essayer ndarray, qui adopte un style d’interface à la NumPy plus adapté dans ce genre de cas.

Ces deux bibliothèques fournissent des tutoriels introductifs et prennent beaucoup de soin à rédiger les parties “générales” de leur documentation (documentation à l’échelle de la crate entière, du module, etc). Je vous encourage très fortement à ne pas faire l’impasse sur ces sections de leur documentation, car en raison de l’usage relativement avancé qui est fait du système de typage de Rust, la partie de la documentation de référence qui est générée automatiquement (signatures de méthodes, etc) peut être plus difficile à suivre pour l’utilisateur non aguerri.