Hi..
Is there any way to interact between Julia and Rust, a way that allow:
- Calling Rust function from Julia, like
ccall
- Calling Julia from Rust
Thanks
Hi..
Is there any way to interact between Julia and Rust, a way that allow:
ccall
Thanks
I found the below way to solve it, and liked to share with the community:
Executing Julia
from Rust
Use the Rust Command as below:
Create simple main.jl
file, that contains:
`println("hello from Julia function")`
Create simple main.rs
file, that contains:
use std::process::Command;
fn main() {
println!("Hello from Rust");
let mut cmd = Command::new("Julia");
cmd.arg("main.jl");
// cmd.args(&["main.jl", "arg1", "arg2"]);
match cmd.output(){
Ok(o) => unsafe {
println!("Output: {}", String::from_utf8_unchecked(o.stdout));
},
Err(e) => {
println!("There was an error {}", e);
}
}
}
Then, by running cargo run
you'll get the required output s below:
Executing Rust
from Julia
Use the calling-c-and-fortran-code by ccall
Create rust shared library, simple lib.rs
file, that contains:
#[no_mangle]
pub extern fn double_input(input: i32) -> i32 {
println!("Hello from Rust");
input * 2
}
The Cargo.toml
for building the library, is:
[package]
name = "julia_call_rust"
version = "0.1.0"
authors = ["hasan yousef]
[lib]
name = "my_rust_lib"
crate-type = ["dylib"]
Create simple main.jl
file, that contains:
println("Hello from Julia")
input = 10 #Int32(10)
output = ccall( #(:function or "function", "library"), Return type, (Input types,), arguments if any)
(:double_input,
"target/debug/libmy_rust_lib"),
Int32, # Return type
(Int32,), # (Input types,)
input) # Arguments if any
println("As result of $input * 2 is: $output")
Then, by running cargo build
to get the rust library built, and by running julia main.jl
you'll get the required output s below:
Nice. You gonna link this post on the Julia discourse...? Or I'll do it for you since I'm there alot...?
You want to use crate-type = ["cdylib"]
Done, I asked the same, and posted same answer,thanks
Please, check out [ANN] Embedding Rust Libraries in a Julia Package.