Взаимодействие Руста с Юлей | Кодементор

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 вы получите требуемый результат.

Похожие записи

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *