De C# à ferrugem: Porting MathFlow para criar Mathcore – Uma jornada simbólica da biblioteca de matemática
var expr = matemation .Parse (“x^2 + 2*x + 1”); var derivativo = expr .Differencie (“x”); var resultado = expr .Evaluate (novo {x = 5}); Seja expr = mathcore :: parse (“x^2 + 2*x + 1”)?; Seja derivado = mathcore :: diferencia (& expr, “x”)?; Let Result = Math.Calculate (& Expr, &[(“x”, 5.0)]
)?; ⚡ Resultados de desempenho Fiquei chocado com esses números: | Operação | C# (MathFlow) | Ferrugem (mathcore) | Diferença || —————— | ————— | ———————- | —————- || Expressão de análise | 245 µs | 89 µs | 2.7x mais rápido ✨ || Diferenciar | 1.230 µs | 456 µs | 2.7x mais rápido ✨ || Resolver equação | 890 µs | 234 µs | 3,8x mais rápido 🚀 || Uso da memória | 847 MB | 124 MB | 6,8x menos 🎯 | 💡 Diferenças -chave Eu descobri 1️⃣ LIDADE DE ERRO C# WAY (exceções): tente {var resultado = mathExpression.parse (“inválido”); } catch (parseException e) {console.WriteLine ($ “OOPS: {E.Message}”); } Rust Way (Tipo de resultado): Combine Mathcore :: parse (“inválido”) {ok (expr) => println! (“Sucesso!”), Err (e) => println! (“OOPS: {}”, e),} 💭 Insight: Rust force você a lidar com erros. Não há mais acidentes surpresos na produção! 2️⃣ Gerenciamento de memória C#: ✅ O coletor de lixo lida com tudo ❌ Random GC Pusia ❌ Rust de desempenho imprevisível: ✅ Desempenho previsível ✅ Nenhuma pausa GC ❌ Deve pensar em propriedade 3️⃣ Exemplo real). var solver = new Mathengine (); var trajetória = solucionador .parse (equação) .substitute (novo {v0 = 100, θ = math.pi/4, g = 9,81}); // calcule a trajetória Let equação = “y = v0*sin (θ)*t – 0,5*g*t^2”; Deixe Math = Mathcore :: new (); Seja trajetória = matemática .Calculate (equação, &[
(“v0”, 100.0),
(“θ”, PI/4.0),
(“g”, 9.81),
])?; 🎨 Evolução da arquitetura de OOP para C# funcional (orientado a objetos): Expressão de classe abstrata pública {public abstrate duplo avaliar (); } classe pública adcexpr: expressão {expressão privada esquerda, direita; Public Subster Double avaliate () {return left.evaluate () + Right.Evaluate (); }} Ferrugem (tipos de dados algébricos): enum expr {número (f64), add (caixa
Fonte