Uma biblioteca C++23, de LU a CFD
Software de engenharia roda sobre matemática pesada, e quase ninguém escreve a sua. Ela é costurada a partir de bibliotecas de terceiros e plataformas pagas — difícil de auditar, difícil de mudar e difícil de instalar onde a máquina de build não tem internet. O MathScript faz a matemática ele mesmo, da aritmética de matrizes até a dinâmica dos fluidos, em uma única biblioteca C++ sem nada para baixar.
- Kernels de matriz na própria árvore. As Sub-rotinas Básicas de Álgebra Linear (BLAS) e o Pacote de Álgebra Linear (LAPACK) são implementados aqui, não baixados: sem Eigen, sem OpenBLAS.
linalgtem LU, QR, Decomposição em Valores Singulares (SVD), eig, Cholesky e os kernels no estilo LAPACK, então implantar é compilar e não caçar dependências. - Um subconjunto restrito de C++. Sem ponteiros crus, sem exceções, sem casts inseguros — imposto em tempo de compilação. O código de produção devolve
Result<T>, então o tratamento de erro é determinístico e visível no tipo.
O que isto é, em um minuto
Tensão, escoamento, sinais, risco — os cálculos por baixo do software de engenharia raramente são escritos pela equipe que o entrega. Chegam de uma dúzia de bibliotecas externas e plataformas pagas que precisam ser baixadas, licenciadas e merecer confiança. Quando uma resposta parece errada, as contas estão no código de outra pessoa; em uma máquina de build lacrada, pode ser que você nem consiga baixá-las.
O MathScript é uma única biblioteca C++ que faz a matemática ela mesma: álgebra linear, estatística, equações diferenciais, elementos finitos, escoamento de fluidos, otimização e um sistema de álgebra simbólica, em trinta e cinco bibliotecas estáticas. As rotinas de matriz que a maioria dos projetos importa de BLAS e LAPACK estão escritas aqui. Todas as 816 suítes de teste passam no build do Windows. A v1.0.0 ainda não foi lançada.
Equipes cujas máquinas de build não alcançam a internet — defesa, saúde, aeroespacial, bancos — onde cada dependência baixada é mais uma aprovação. Produtos que fazem o trabalho de verdade em C++ e a matemática em Python, e carregam dois conjuntos de problemas por isso. Professores e estudantes que querem o método escrito onde dá para ler.
Um Sistema de Álgebra Computacional (CAS) simbólico, rodando no seu navegador
Digite uma expressão. Ela é tokenizada, analisada para uma Árvore de Sintaxe Abstrata (AST), derivada simbolicamente, simplificada e então avaliada numericamente para o gráfico — junto com uma integral pela regra de Simpson e busca de raízes por bisseção no intervalo visível.
mathscript-repl
Derivada simbólica
Result<T>
Suportado: + - * / ^, sin cos tan exp log sqrt abs sinh cosh tanh
asin acos atan, constantes pi e e. O CAS de verdade é bem maior; este é a mesma ideia numa escala que dá para ler.
symbolic do repositório.
A biblioteca C++ de verdade, compilada para WebAssembly
Tudo acima é JavaScript escrito para esta página — honesto, mas um modelo da coisa real. Abaixo está a coisa real: libms_symbolic ele mesmo, compilado a partir do mesmo código que constrói a biblioteca nativa, rodando no seu navegador.
ms::sym_diff — WebAssembly
não carregadaNada é baixado até você apertar carregar, e então é buscado uma vez só. O módulo tem 113 kilobytes (KB) de WebAssembly e 10 KB de carregador — o build completo da biblioteca tem 4,9 megabytes (MB), então isto liga só o que estas quatro chamadas alcançam. O painel mostra a versão da biblioteca e a Arquitetura do Conjunto de Instruções (ISA) vetorial que o build informa.
ms::detect_isa(), a mesma chamada que ela faz nativamente. No seu desktop isso responde com uma das Extensões Vetoriais Avançadas (AVX2 ou AVX-512); aqui há uma só ISA vetorial, e ela diz isso.
tools/wasm/README.md.
Trinta e cinco bibliotecas estáticas, seis domínios
Álgebra linear densa e esparsa, funções especiais, estatística e Aprendizado de Máquina (ML). Equações Diferenciais Ordinárias (EDO) e Equações Diferenciais Parciais (EDP), o Método dos Elementos Finitos (FEM) e a Dinâmica dos Fluidos Computacional (CFD). Otimização, processamento de sinais e de imagens, teoria dos números, grafos, geometria, topologia, primitivas quânticas, controle, finanças, compressão — e um CAS simbólico. Com LU, QR, SVD, resolvedores de autovalores e Cholesky escritos na própria árvore.
Sistemas centrais
Álgebra linear densa e esparsa com LU, QR, SVD, resolvedores de autovalores e Cholesky na própria árvore. Result<T> para tratamento de erro em toda parte.
ODE, PDE, FEM, CFD
Integração no tempo, elementos finitos e dinâmica de fluidos computacional, mais funções especiais e quadratura.
Estatística e ML
Distribuições, inferência, regressão e o maquinário de otimização por baixo delas.
Sinal, imagem, controle, finanças
Transformadas, filtragem, processamento de imagens, teoria de controle e primitivas de finanças quantitativas.
Álgebra computacional
Um pequeno CAS simbólico ao lado da parte numérica, e não parafusado em cima dela.
Grafos, geometria, topologia, quântica
Teoria dos números, algoritmos de grafos, geometria computacional, topologia e primitivas quânticas.
Três executáveis, todo o resto opcional
Tudo além dos três executáveis é opção de build — uma Interface Gráfica de Usuário (GUI) em Qt, CUDA, a Interface de Passagem de Mensagens (MPI) e um compilador em tempo de execução (JIT) construído sobre a camada de Compilação Sob Demanda (ORC) do LLVM.
O que 816 suítes te dão
A matriz de Integração Contínua (CI) por trás dos controles abaixo cobre dois compiladores: Microsoft Visual C++ (MSVC) no Windows e a Coleção de Compiladores GNU (GCC) 13 no Linux.
| Controle | Configuração |
|---|---|
| Suítes CTest | 816, 100% passaram |
| Plataforma | Windows MSVC Release |
| Matriz de CI | MSVC + Linux GCC 13 |
| Controle de cobertura | 90% |
| Sanitizers | Ativados |
| Fuzzing | Ativados |
| Regressões de benchmark | 28, tolerância de 10% |
Um kit de matemática completo para programadores, em uma peça só
Trabalho sério de cálculo normalmente significa parafusar uma dúzia de softwares separados e torcer para que concordem. Esta é uma única biblioteca que cobre tudo.
Equipes que não têm permissão para baixar nada
Sistemas de build de defesa, medicina, aeroespacial e bancos costumam ficar isolados da internet. Aqui tudo já vem incluído, então não há nada para buscar e nada para aprovar.
Equipes cansadas de parafusar Python em um produto
Muito software faz o trabalho de verdade em uma linguagem e a matemática em outra, o que significa dois conjuntos de problemas. Isto mantém a matemática na mesma linguagem do produto.
Ensino e aprendizado
Os métodos estão escritos por extenso e podem ser lidos, em vez de escondidos dentro do componente lacrado de um fornecedor. Os alunos conseguem acompanhar o que está de fato acontecendo.
Uma biblioteca numérica que não consegue lançar nada em você
Código numérico falha de maneiras comuns: uma matriz singular, uma iteração que não converge, um erro de domínio em uma função especial. Sinalizar isso com uma exceção significa que todo chamador ou embrulha tudo em try ou descobre a falha no topo da pilha sem contexto nenhum. O MathScript torna a falha parte do 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.