Struct gluon_vm::thread::Thread

source ·
pub struct Thread { /* private fields */ }
Expand description

Representation of the virtual machine

Implementations

Spawns a new gluon thread with its own stack and heap but while still sharing the same global environment

Roots self, extending the lifetime of this thread until at least the returned RootedThread is droppped

👎Deprecated since 0.7.0: Use gluon::import::add_extern_module instead

Creates a new global value at name. Fails if a global called name already exists.

Examples

Load the factorial rust function into gluon and evaluate factorial 5

fn factorial(x: i32) -> i32 {
    if x <= 1 { 1 } else { x * factorial(x - 1) }
}


let vm = new_vm();

vm.define_global("factorial", primitive!(1, factorial)).unwrap();

let result = Compiler::new()
    .run_expr::<i32>(&vm, "example", "factorial 5")
    .unwrap_or_else(|err| panic!("{}", err));
let expected = (120, Type::int());

assert_eq!(result, expected);

Retrieves the global called name.

Examples

Bind the (+) function in gluon’s prelude standard library to an add function in rust



let vm = new_vm();

Compiler::new()
    .run_expr::<OpaqueValue<&Thread, Hole>>(&vm, "example",
        r#" import! std.int "#)
    .unwrap_or_else(|err| panic!("{}", err));
let mut add: FunctionRef<fn(i32, i32) -> i32> =
    vm.get_global("std.int.num.(+)").unwrap();
let result = add.call(1, 2);
assert_eq!(result, Ok(3));
Errors

if the global does not exist or it does not have the correct type.

Retrieves type information about the type name. Types inside records can be accessed using dot notation (std.prelude.Option)

Returns the gluon type that was bound to T

Registers the type T as being a gluon type called name with generic arguments args

Locks and retrieves the global environment of the vm

Retrieves the macros defined for this vm

Runs a garbage collection.

Pushes a value to the top of the stack

Removes the top value from the stack

Trait Implementations

Formats the value using the given formatter. Read more
This method tests for self and other values to be equal, and is used by ==. Read more
This method tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason. Read more

Roots a value

Calls a module, allowed to to run IO expressions

Calls a function on the stack. When this function is called it is expected that the function exists at stack.len() - args - 1 and that the arguments are of the correct type

Locks and retrives this threads stack
Evaluates a zero argument function (a thunk)
owner is theread that owns value which is not necessarily the same as self
Roots a value
A version of Self which implements Any allowing a TypeId to be retrieved
Creates an gluon type which maps to Self in rust
How many extra arguments a function returning this type requires. Used for abstract types which when used in return position should act like they still need more arguments before they are called Read more

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more
Pushes self to stack. If the call is successful a single element should have been added to the stack and Ok(()) should be returned. If the call is unsuccessful Status:Error should be returned and the stack should be left intact. Read more
Immutably borrows from an owned value. Read more
Mutably borrows from an owned value. Read more
Extract a subset of the possible types in a coproduct (or get the remaining possibilities) Read more

Returns the argument unchanged.

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Performs the indexed conversion.
Pushes self to stack. If the call is successful a single element should have been added to the stack and Ok(()) should be returned. If the call is unsuccessful Status:Error should be returned and the stack should be left intact Read more
Consumes the current HList and returns an HList with the requested shape. Read more
The type returned in the event of a conversion error.
Performs the conversion.
The type returned in the event of a conversion error.
Performs the conversion.