# Rust-lang interaction

**URL:** https://discourse.julialang.org/t/rust-lang-interaction/13711
**Category:** New to Julia
**Tags:** question, rust
**Created:** [August 19, 2018, 1:20pm UTC](https://discourse.julialang.org/t/rust-lang-interaction/13711 "2018-08-19T13:20:16Z")
**Posts on this page:** 1
**Showing post:** 4

<div class="post-metadata">

### Author: ![hasanOryx](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/hasanoryx/32/5373_2.png) [@hasanOryx](https://discourse.julialang.org/u/hasanOryx)
#### Post date: [August 19, 2018, 6:24pm UTC](https://discourse.julialang.org/t/rust-lang-interaction/13711/4 "2018-08-19T18:24:20Z")

</div>

I found the below way to solve it, and liked to share with the community:

**Executing `Julia` from `Rust`**

Use the [Rust Command](https://doc.rust-lang.org/std/process/struct.Command.html) as below:

Create simple `main.jl` file, that contains:

```
# __precompile__ () # If required to be kept precompiled for faster execution
# name = isempty(ARGS) ? "name" : ARGS[1] # To check input arguments
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](https://docs.julialang.org/en/v0.6.1/manual/calling-c-and-fortran-code/) by [ccall](https://docs.julialang.org/en/v0.6.1/stdlib/c/#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:

---

_[View the full topic](https://discourse.julialang.org/t/rust-lang-interaction/13711)._
