nanny 0.0.4

Safe native abstractions for Node.
docs.rs failed to build nanny-0.0.4
Please check the build logs for more information.
See Builds for ideas on how to fix a failed build, or Metadata for how to configure docs.rs builds.
If you believe this is docs.rs' fault, open an issue.

Nanny

A Rust library providing a safe API around native abstractions for Node.

Nanny collaborates with the V8 embedding API to safely monitor stack-allocated handles to garbage-collected objects. This ensures that all objects rooted in the stack are safely tracked by the garbage collector.

A good nanny keeps the nursery safe.

Example

A complete example can be found in the nanny-demo repository. The demo makes use of the rust-bindings npm package to completely automate the process of building and requiring a Rust module in Node.

A Node function in Rust

A JS function is represented in Rust as an extern function that takes a reference to a Call object. The Call object allows you to create memory management scopes, which safely manage the rooting of handles to garbage-collected JS values:

#[no_mangle]
extern fn make_an_array(call: &Call) {
    let realm = call.realm(); // current VM execution context
    realm.scoped(|scope| {    // create a scope for rooting handles
        let mut array: Handle<Array> = scope.array(3);
        array.set(0, scope.integer(9000));
        array.set(1, scope.object());
        array.set(2, scope.number(3.14159));
        call.activation().set_return(array);
    });
}

License

MIT