Una sola biblioteca C++23, de LU a CFD
El software de ingeniería funciona sobre matemáticas pesadas, y casi nadie escribe las suyas. Se cose con bibliotecas de otros y plataformas de pago — difíciles de auditar, difíciles de cambiar y difíciles de instalar donde la máquina de compilación no tiene internet. MathScript hace las matemáticas él mismo, desde la aritmética de matrices hasta la dinámica de fluidos, en una sola biblioteca de C++ sin nada que descargar.
- Kernels matriciales en el árbol. Los subprogramas básicos de álgebra lineal (BLAS) y el paquete de álgebra lineal (LAPACK) están implementados aquí en vez de descargarse: sin Eigen, sin OpenBLAS.
linalgalberga LU, QR, descomposición en valores singulares (SVD), eig, Cholesky y los kernels al estilo LAPACK, así que desplegar es compilar y no ir a la caza de dependencias. - Un subconjunto restringido de C++. Sin punteros crudos, sin excepciones, sin conversiones inseguras — impuesto en tiempo de compilación. El código de producción devuelve
Result<T>, así que el manejo de errores es determinista y visible en el tipo.
Qué es esto, en un minuto
Tensión, flujo, señales, riesgo — los cálculos que hay debajo del software de ingeniería rara vez los escribe el equipo que lo entrega. Llegan de una docena de bibliotecas externas y plataformas de pago que hay que descargar, licenciar y creer. Cuando una respuesta parece mal, las operaciones están en el código de otro; en una máquina de compilación aislada puede que ni siquiera puedas descargarlas.
MathScript es una sola biblioteca de C++ que hace las matemáticas ella misma: álgebra lineal, estadística, ecuaciones diferenciales, elementos finitos, flujo de fluidos, optimización y un sistema de álgebra simbólica, repartidos en treinta y cinco bibliotecas estáticas. Las rutinas matriciales que casi todos los proyectos importan de BLAS y LAPACK están escritas aquí. Las 816 suites de prueba pasan en la compilación de Windows. v1.0.0 todavía no se ha publicado.
Equipos cuyas máquinas de compilación no llegan a internet — defensa, sanidad, aeroespacial, banca —, donde cada dependencia descargada es otra aprobación. Productos que hacen su trabajo de verdad en C++ y sus matemáticas en Python, y cargan con dos conjuntos de problemas por ello. Docentes y estudiantes que quieren el método escrito donde se pueda leer.
Un sistema de álgebra computacional (CAS) simbólico, en tu navegador
Escribe una expresión. Se tokeniza, se analiza hasta un árbol de sintaxis abstracta (AST), se deriva simbólicamente, se simplifica y luego se evalúa numéricamente para la gráfica — junto a una integral por la regla de Simpson y una búsqueda de raíces por bisección sobre el intervalo visible.
mathscript-repl
Derivada simbólica
Result<T>
Soportado: + - * / ^, sin cos tan exp log sqrt abs sinh cosh tanh
asin acos atan, constantes pi y e. El CAS de verdad es bastante más grande; esto es la misma idea a escala legible.
symbolic de MathScript.
La biblioteca C++ real, compilada a WebAssembly
Todo lo de arriba es JavaScript escrito para esta página — honesto, pero un modelo de la cosa real. Abajo está la cosa real: libms_symbolic en sí, compilado a partir del mismo código que construye la biblioteca nativa, corriendo en tu navegador.
ms::sym_diff — WebAssembly
sin cargarNo se descarga nada hasta que pulsas cargar, y entonces se descarga una sola vez. El módulo son 113 kilobytes (KB) de WebAssembly y 10 KB de cargador — la compilación completa de la biblioteca son 4,9 megabytes (MB), así que esto enlaza solo lo que alcanzan estas cuatro llamadas. El panel muestra la versión de la biblioteca y la arquitectura del juego de instrucciones (ISA) vectorial que reporta la compilación.
ms::detect_isa(), la misma llamada que hace de forma nativa. En tu escritorio eso responde con una de las extensiones vectoriales avanzadas (AVX2 o AVX-512); aquí hay una sola ISA vectorial y lo dice.
tools/wasm/README.md.
Treinta y cinco bibliotecas estáticas, seis dominios
Álgebra lineal densa y dispersa, funciones especiales, estadística y aprendizaje automático (ML). Ecuaciones diferenciales ordinarias (ODE) y ecuaciones en derivadas parciales (PDE), el método de elementos finitos (FEM) y la dinámica de fluidos computacional (CFD). Optimización, procesamiento de señales e imágenes, teoría de números, grafos, geometría, topología, primitivas cuánticas, control, finanzas, compresión — y un CAS simbólico. Con LU, QR, SVD, resolutores de autovalores y Cholesky escritos en el árbol.
Sistemas base
Álgebra lineal densa y dispersa con LU, QR, SVD, resolutores de autovalores y Cholesky propios. Result<T> para el manejo de errores en todo el código.
ODE, PDE, FEM, CFD
Integración temporal, elementos finitos y dinámica de fluidos computacional, más funciones especiales y cuadratura.
Estadística y ML
Distribuciones, inferencia, regresión y la maquinaria de optimización que hay debajo.
Señal, imagen, control, finanzas
Transformadas, filtrado, procesamiento de imagen, teoría de control y primitivas de finanzas cuantitativas.
Álgebra por ordenador
Un CAS simbólico pequeño que va al lado de lo numérico en vez de atornillado encima.
Grafos, geometría, topología, cuántica
Teoría de números, algoritmos de grafos, geometría computacional, topología y primitivas cuánticas.
Tres ejecutables, todo lo demás opcional
Todo lo que pasa de los tres ejecutables es una opción de compilación — una interfaz gráfica de usuario (GUI) en Qt, CUDA, la interfaz de paso de mensajes (MPI) y un compilador justo a tiempo (JIT) construido sobre la capa de compilación bajo demanda (ORC) de LLVM.
Lo que te dan 816 suites
La matriz de integración continua (CI) que hay detrás de los controles de abajo cubre dos compiladores: Microsoft Visual C++ (MSVC) en Windows y la Colección de Compiladores de GNU (GCC) 13 en Linux.
| Control | Valor |
|---|---|
| Suites de CTest | 816, 100% pasadas |
| Plataforma | Windows MSVC Release |
| Matriz de CI | MSVC + Linux GCC 13 |
| Umbral de cobertura | 90% |
| Sanitizers | Activados |
| Fuzzing | Activados |
| Regresiones de benchmark | 28, tolerancia del 10% |
Un juego de herramientas matemáticas completo para programadores, en una sola pieza
El trabajo de cálculo serio suele significar atornillar una docena de programas distintos y esperar que se pongan de acuerdo. Esto es una sola biblioteca que lo cubre todo.
Equipos que no tienen permiso para descargar nada
Los sistemas de compilación de defensa, medicina, aeroespacial y banca suelen estar aislados de internet. Aquí está todo incluido, así que no hay nada que descargar ni nada que aprobar.
Equipos cansados de atornillar Python a un producto
Mucho software hace su trabajo real en un lenguaje y sus matemáticas en otro, lo que significa dos conjuntos de problemas. Esto mantiene las matemáticas en el mismo lenguaje que el producto.
Enseñar y aprender
Los métodos están escritos por completo y se pueden leer, en lugar de estar escondidos dentro del componente sellado de un proveedor. Los estudiantes pueden seguir lo que está pasando de verdad.
Una biblioteca numérica que no te puede lanzar nada
El código numérico falla de formas corrientes: una matriz singular, una iteración que no converge, un error de dominio en una función especial. Señalar eso con una excepción significa que cada llamante o envuelve todo en try o descubre el fallo en lo alto de la pila y sin contexto. MathScript hace que el fallo forme parte del tipo de retorno.
// 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.