As much as I hate to say it, there is a lot of useful code living in .m files. Sometimes it can be nice to access that code through Rust. There are at least two use cases I can think of: 1. Rapid Development: There might be a simple function in Octave that would require significant development effort to replicate in Rust. This crate serves as a stopgap measure to enable further development. 2. Robust Testing: We all know that the better option is to rewrite those nasty .m files in Rust so they're 🚀Blazingly Fast™️🚀! This create is still useful for testing purposes, allowing direction comparison to legacy Octave/MATLAB code.
This crate uses a disgusting hack: Octave is run in the background in Docker. For that reason, you must have a working installation of Docker.
Let's say we need a function to compute prime numbers, but we're too lazy to write one ourselves. Let's make a thin
wrapper around the Octave primes
function! That function will look like this:
``rust
fn primes(less_than_n: usize) -> Vec<Vec<f64>> {
mocktave::eval( // Start an evaluation
&format!( // Format the command
"x = primes({});", // This is where we call
primes` from Octave
lessthann // Pass through the argument
)
)
.getmatrixnamed("x") // Extract the results matrix.
.unwrap() // Unwrap to get the value
}
let allprimeslessthan100 = primes(100); ``` Its important to note that this function is definitely NOT 🚀Blazingly Fast™️🚀, since it starts, runs, and closes a Docker container every time its run.