diff --git a/.gitignore b/.gitignore index eb5a316cbd195d26e3f768c7dd8e1b47299e17f8..2273413d849d3d37bded0a233700f5d2f1fe9364 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,4 @@ target +*~ + +embed/node_modules diff --git a/embed/Cargo.lock b/embed/Cargo.lock new file mode 100644 index 0000000000000000000000000000000000000000..eefe950cdabc9ebabbc47f267294e7e4dcebb7f5 --- /dev/null +++ b/embed/Cargo.lock @@ -0,0 +1,4 @@ +[root] +name = "embed" +version = "0.1.0" + diff --git a/embed/Cargo.toml b/embed/Cargo.toml new file mode 100644 index 0000000000000000000000000000000000000000..7d419e4008b48ef26ce520313add44063d992f38 --- /dev/null +++ b/embed/Cargo.toml @@ -0,0 +1,8 @@ +[package] +name = "embed" +version = "0.1.0" +authors = ["Anders Nilsson <anders.nilsson@control.lth.se>"] + +[lib] +name ="embed" +crate-type = ["dylib"] diff --git a/embed/embed.js b/embed/embed.js new file mode 100644 index 0000000000000000000000000000000000000000..a7eafb268fe28cc84712486639a0c220423f6982 --- /dev/null +++ b/embed/embed.js @@ -0,0 +1,9 @@ +var ffi = require('ffi'); + +var lib = ffi.Library('../target/release/libembed', { + 'process': ['void', []] +}); + +lib.process(); + +console.log("done!"); diff --git a/embed/embed.py b/embed/embed.py new file mode 100644 index 0000000000000000000000000000000000000000..0c0596031b2ce7fd8182985f7bbdf4f8662027ab --- /dev/null +++ b/embed/embed.py @@ -0,0 +1,7 @@ +from ctypes import cdll + +lib = cdll.LoadLibrary("../target/release/libembed.so") + +lib.process() + +print("done!") diff --git a/embed/embed.rb b/embed/embed.rb new file mode 100644 index 0000000000000000000000000000000000000000..964bceba99b7f533b97c81e2ab31a61dc3cba366 --- /dev/null +++ b/embed/embed.rb @@ -0,0 +1,11 @@ +require 'ffi' + +module Hello + extend FFI::Library + ffi_lib '../target/release/libembed.so' + attach_function :process, [], :void +end + +Hello.process + +puts 'done!' diff --git a/embed/src/lib.rs b/embed/src/lib.rs new file mode 100644 index 0000000000000000000000000000000000000000..b9f454c7283f68c694b3e5773634635935366d4d --- /dev/null +++ b/embed/src/lib.rs @@ -0,0 +1,19 @@ +use std::thread; + +#[no_mangle] +pub extern fn process() { + let handles: Vec<_> = (0..10).map(|_| { + thread::spawn(|| { + let mut x = 0; + for _ in (0..15_000_000) { + x += 1 + } + x + }) + }).collect(); + + for h in handles { + println!("Thread finished with count={}",h.join().map_err(|_|"Could not join a thread!").unwrap()); + } + println!("done!"); +} diff --git a/embed/toy.rb b/embed/toy.rb new file mode 100644 index 0000000000000000000000000000000000000000..ff109a0348bf859db4e1db8bab398c69e5675fc7 --- /dev/null +++ b/embed/toy.rb @@ -0,0 +1,18 @@ +threads = [] + +10.times do + threads << Thread.new do + count = 0 + + 15_000_000.times do + count += 1 + end + + count + end +end + +threads.each do |t| + puts "Thread finished with count=#{t.value}" +end +puts "done!"