ngrs 0.1.3

A New Rust bindings for GNU Guile Scheme
docs.rs failed to build ngrs-0.1.3
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.

Table of Contents

  1. Discription
  2. Overview
  3. Project Structure
  4. Features
  5. Quick Start
    1. Use Ngrs
    2. Example
    3. Initialization
      1. Using with `init`
      2. Using with `withguile`

Discription

NGRS is a New Rust bindings for GNU Guile Scheme.

Overview

`ngrs` provides both low-level raw bindings and high-level safe abstractions for embedding GNU Guile Scheme in Rust applications. This project enables seamless integration of Scheme scripting capabilities into Rust programs with a focus on memory safety and ergonomic APIs.

Project Structure

  • ngrs - High-level safe Rust wrappers with idiomatic interfaces, Contains raw.
  • raw - Low-level FFI bindings to Guile's C API

Features

  •  Make bindings and convert for base values.
  •  Implement eval(evalexpr), evalstring, evalfile(load), apply(applyscm), apply(call0~n), define
  •  Create safe type wrappers for composite values List, Vector, HashMap and special base values procedure, Symbol, Keywords (or at least provide a method to convert them to Rust types)
  •  Add module operations to facilitate writing interactive modules for Guile in Rust.
  •  Write bindings to convert Rust structs into Guile foreign types

Quick Start

Use Ngrs

Add this to your Cargo.toml .

[dependencies]
ngrs = "0.1"

Example

use ngrs::{Runtime, with_guile};

fn main() {
    // Initialize Guile
    Runtime::initialize();

    with_guile(|vm:Runtime| {
        // Your Code Here
        println!("Hello guile from Rust!");
        let args = vec!["Test Guile".to_string(),];
        vm.shell(args);
    });
}

Initialization

Before using any Guile functionality, you must initialize the Guile environment:

use ngrs::Runtime

fn main() {
    // Initialize Guile
    Runtime::initialize();

    // Your code here
}

Using with `init`

This way has Less platforms support.

use ngrs::Runtime;

fn main() {
    Runtime::initialize();
    let runtime = Runtime::new();

    // Your Guile-dependent code here
}

Using with `withguile`

For more control over the Guile context:

use ngrs::with_guile;

fn main() {
    Runtime::initialize();

    with_guile(|vm:Runtime| {
        // Your Guile-dependent code here
    });
}