Une seule bibliothèque C++23, de LU à la CFD
Le logiciel d’ingénierie repose sur des mathématiques lourdes, et presque personne n’écrit les siennes. Il est cousu à partir des bibliothèques des autres et de plateformes payantes — difficile à auditer, difficile à modifier, et difficile à installer là où la machine de build n’a pas d’internet. MathScript fait les mathématiques lui-même, de l’arithmétique matricielle jusqu’à la dynamique des fluides, dans une seule bibliothèque C++ sans rien à télécharger.
- Noyaux matriciels intégrés. Les sous-programmes d’algèbre linéaire de base (BLAS) et la bibliothèque d’algèbre linéaire (LAPACK) sont implémentés ici plutôt que téléchargés : pas d’Eigen, pas d’OpenBLAS.
linalgpossède LU, QR, la décomposition en valeurs singulières (SVD), eig, Cholesky et les noyaux à la LAPACK, si bien que le déploiement est une compilation plutôt qu’une chasse aux dépendances. - Un sous-ensemble restreint de C++. Pas de pointeurs bruts, pas d’exceptions, pas de conversions non sûres — imposé à la compilation. Le code de production renvoie
Result<T>, si bien que la gestion des erreurs est déterministe et visible dans le type.
Ce que c’est, en une minute
Contraintes, écoulements, signaux, risque — les calculs sous le logiciel d’ingénierie sont rarement écrits par l’équipe qui le livre. Ils arrivent d’une douzaine de bibliothèques extérieures et de plateformes payantes qu’il faut télécharger, licencier et croire sur parole. Quand une réponse semble fausse, le détail du calcul est dans le code de quelqu’un d’autre ; sur une machine de build scellée, vous ne pourrez peut-être même pas le télécharger.
MathScript est une seule bibliothèque C++ qui fait les mathématiques elle-même : algèbre linéaire, statistiques, équations différentielles, éléments finis, écoulement des fluides, optimisation et un système d’algèbre symbolique, répartis sur trente-cinq bibliothèques statiques. Les routines matricielles que la plupart des projets importent de BLAS et LAPACK sont écrites ici. Les 816 suites de tests passent toutes sur le build Windows. La v1.0.0 n’est pas encore sortie.
Les équipes dont les machines de build n’ont pas accès à internet — défense, médical, aérospatial, banque — où chaque dépendance téléchargée est une validation de plus. Les produits qui font leur vrai travail en C++ et leurs mathématiques en Python, et qui en portent les deux séries de problèmes. Les enseignants et les étudiants qui veulent la méthode écrite là où on peut la lire.
Un système de calcul formel (CAS) symbolique, dans votre navigateur
Tapez une expression. Elle est découpée en jetons, analysée en arbre syntaxique abstrait (AST), dérivée symboliquement, simplifiée, puis évaluée numériquement pour le tracé — avec une intégrale par la règle de Simpson et une recherche de racines par bissection sur l’intervalle visible.
mathscript-repl
Dérivée symbolique
Result<T>
Pris en charge : + - * / ^, sin cos tan exp log sqrt abs sinh cosh tanh
asin acos atan, constantes pi et e. Le vrai CAS est considérablement plus grand ; ceci est la même idée, à l’échelle de la lecture.
symbolic du projet.
La vraie bibliothèque C++, compilée en WebAssembly
Tout ce qui précède est du JavaScript écrit pour cette page — honnête, mais un modèle de la chose réelle. Ci-dessous, c’est la chose réelle : libms_symbolic lui-même, compilé à partir des mêmes sources qui produisent la bibliothèque native, en train de tourner dans votre navigateur.
ms::sym_diff — WebAssembly
non chargéeRien n’est téléchargé tant que vous n’appuyez pas sur charger, et ensuite c’est téléchargé une seule fois. Le module fait 113 kilooctets (Ko) de WebAssembly et 10 Ko de chargeur — le build complet de la bibliothèque fait 4,9 mégaoctets (Mo), donc on ne lie ici que ce que ces quatre appels atteignent. Le panneau affiche la version de la bibliothèque et l’architecture de jeu d’instructions (ISA) vectorielle que le build rapporte.
ms::detect_isa(), le même appel qu’elle fait en natif. Sur votre poste, ça répond avec l’une des Advanced Vector Extensions (AVX2 ou AVX-512) ; ici il n’y a qu’un seul ISA vectoriel, et elle le dit.
tools/wasm/README.md.
Trente-cinq bibliothèques statiques, six domaines
Algèbre linéaire dense et creuse, fonctions spéciales, statistiques et apprentissage automatique (ML). Équations différentielles ordinaires (EDO) et équations aux dérivées partielles (EDP), méthode des éléments finis (FEM) et mécanique des fluides numérique (CFD). Optimisation, traitement du signal et de l’image, théorie des nombres, graphes, géométrie, topologie, primitives quantiques, contrôle, finance, compression — et un CAS symbolique. Avec LU, QR, SVD, solveurs de valeurs propres et Cholesky intégrés.
Systèmes de base
Algèbre linéaire dense et creuse avec LU, QR, SVD, solveurs de valeurs propres et Cholesky intégrés. Gestion des erreurs par Result<T> partout.
EDO, EDP, FEM, CFD
Intégration temporelle, éléments finis et mécanique des fluides numérique, plus les fonctions spéciales et la quadrature.
Statistiques & ML
Distributions, inférence, régression et la machinerie d’optimisation qui les porte.
Signal, image, automatique, finance
Transformées, filtrage, traitement d’images, théorie du contrôle et primitives de finance quantitative.
Calcul formel
Un petit CAS symbolique posé à côté du numérique plutôt que boulonné par-dessus.
Graphes, géométrie, topologie, quantique
Théorie des nombres, algorithmes de graphes, géométrie algorithmique, topologie et primitives quantiques.
Trois exécutables, tout le reste en option
Tout ce qui dépasse les trois exécutables est une option de build — une interface graphique utilisateur (GUI) Qt, CUDA, l’interface de passage de messages (MPI), et un compilateur juste-à-temps (JIT) bâti sur la couche On-Request Compilation (ORC) de LLVM.
Ce que valent 816 suites
La matrice d’intégration continue (CI) derrière les contrôles ci-dessous couvre deux compilateurs : Microsoft Visual C++ (MSVC) sous Windows et la GNU Compiler Collection (GCC) 13 sous Linux.
| Contrôle | Réglage |
|---|---|
| Suites CTest | 816, 100 % passées |
| Plateforme | Windows MSVC Release |
| Matrice CI | MSVC + Linux GCC 13 |
| Seuil de couverture | 90% |
| Sanitizers | Activé |
| Fuzzing | Activé |
| Régressions de benchmark | 28, tolérance de 10 % |
Une boîte à outils mathématique complète pour programmeurs, d’un seul tenant
Le calcul sérieux revient d’habitude à boulonner ensemble une douzaine de logiciels distincts en espérant qu’ils soient d’accord. Ici, c’est une seule bibliothèque qui couvre l’ensemble.
Des équipes qui n’ont le droit de rien télécharger
Les chaînes de compilation de la défense, du médical, de l’aérospatiale et de la banque sont souvent coupées d’Internet. Tout est inclus ici, donc il n’y a rien à récupérer et rien à faire approuver.
Des équipes fatiguées de boulonner du Python sur un produit
Beaucoup de logiciels font leur vrai travail dans un langage et leurs maths dans un autre, ce qui fait deux jeux de problèmes. Ici, les maths restent dans le même langage que le produit.
Enseignement et apprentissage
Les méthodes sont écrites en entier et peuvent être lues, au lieu d’être cachées dans le composant scellé d’un fournisseur. Les étudiants peuvent suivre ce qui se passe réellement.
Une bibliothèque numérique qui ne peut pas vous lever d’exception
Le code numérique échoue de façons ordinaires : une matrice singulière, une itération qui ne converge pas, une erreur de domaine dans une fonction spéciale. Signaler cela par une exception veut dire que chaque appelant soit enveloppe tout dans un try soit découvre l’échec en haut de la pile, sans contexte. MathScript fait de l’échec une partie du type de retour.
// Every production entry point returns Result<T>. auto lu = linalg::lu_factor(A); if (!lu) return lu.error(); // singular — handled, not thrown auto x = lu->solve(b); if (!x) return x.error(); // No raw pointers, no unsafe casts, no exceptions: // the restricted subset is enforced at compile time.