Взаимодействие Руста с Юлей | Кодементор
Rust и Julia — два многообещающих языка, ориентированных на скорость, их интеграция поможет добиться отличных результатов.
Допустим, у нас есть приведенный ниже код Julia, и мы хотим вызвать его из кода Rust:
println("hello from Julia function")
Затем мы можем вызвать его, используя следующее:
use std::process::Command; fn main() { println!("Hello from Rust"); let mut cmd = Command::new("Julia"); cmd.arg("main.jl"); match cmd.output() { Ok(o) => unsafe { println!("Output: {}", String::from_utf8_unchecked(o.stdout)); }, Err(e) => { println!("There was an error {}", e); } }
}
Затем файл ржавчины можно запустить, запустив cargo run
:
С другой стороны, допустим, у нас есть следующий файл ржавчины:
pub extern fn double_input(input: i32) -> i32 { println!("Hello from Rust"); input * 2
}
Сначала нам нужно определить правильный файл груза для создания библиотеки и вызов cargo build
:
[package]
name = "julia_call_rust"
version = "1.0.0"
authors = ["hasan yousef] [lib]
name = "my_rust_lib"
crate-type = ["dylib"]
Затем функции в этой библиотеке можно вызывать из кода Julia как:
println("Hello from Julia")
input = 10 output = ccall( (:double_input, "target/debug/libmy_rust_lib"), Int32, (Int32,), input) println("As result of $input * 2 is: $output")
Затем, запустив cargo build
чтобы собрать библиотеку rust, и запустив julia main.jl
вы получите требуемый результат.