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 commefaer
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.