Interop with Rust
Dyon is designed to work with Rust, but uses different types.
Rust uses static types only, which usually takes up less memory and runs faster. When you need to high performance, it is recommended to use Rust.
Functions example
Source: dyon/examples/functions.rs
The dyon_fn!
macro lets you write a Rust function that maps to Dyon types:
#![allow(unused)] fn main() { #[macro_use] extern crate dyon; dyon_fn!{fn say_hello() { println!("hi!"); }} }
Add the function to a module:
#![allow(unused)] fn main() { module.add(Arc::new("say_hello".into()), say_hello, Dfn { lts: vec![], tys: vec![], ret: Type::Void }); }
The dyon_obj!
macro lets to map new Rust structs to Dyon objects:
#![allow(unused)] fn main() { pub struct Person { pub first_name: String, pub last_name: String, pub age: u32, } dyon_obj!{Person { first_name, last_name, age }} }
All fields must implement embed::PopVariable
and embed::PushVariable
.
The Dfn
struct
The Dfn
struct describes the type information of the function signature:
lts
- lifetimes, e.g.Lt::Default
tys
- types, e.g.Type::F64
ret
- return type, e.g.Type::Bool
This is used by the lifetime and type checker when loading modules.