From ca87219e01ca3f842d8c3988ed3bacc8dbaf916c Mon Sep 17 00:00:00 2001 From: Anders Nilsson <anders.nilsson@control.lth.se> Date: Thu, 19 Nov 2015 13:53:35 +0100 Subject: [PATCH] Added membed tutorial --- .gitignore | 3 +++ embed/Cargo.lock | 4 ++++ embed/Cargo.toml | 8 ++++++++ embed/embed.js | 9 +++++++++ embed/embed.py | 7 +++++++ embed/embed.rb | 11 +++++++++++ embed/src/lib.rs | 19 +++++++++++++++++++ embed/toy.rb | 18 ++++++++++++++++++ 8 files changed, 79 insertions(+) create mode 100644 embed/Cargo.lock create mode 100644 embed/Cargo.toml create mode 100644 embed/embed.js create mode 100644 embed/embed.py create mode 100644 embed/embed.rb create mode 100644 embed/src/lib.rs create mode 100644 embed/toy.rb diff --git a/.gitignore b/.gitignore index eb5a316..2273413 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 0000000..eefe950 --- /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 0000000..7d419e4 --- /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 0000000..a7eafb2 --- /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 0000000..0c05960 --- /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 0000000..964bceb --- /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 0000000..b9f454c --- /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 0000000..ff109a0 --- /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!" -- GitLab