glyph-runtime

Crates.ioglyph-runtime
lib.rsglyph-runtime
version0.0.1
created_at2025-07-20 13:44:21.62872+00
updated_at2025-07-20 13:44:21.62872+00
descriptionRuntime execution engine for the Glyph programming language
homepagehttps://github.com/glyph-lang/glyph
repositoryhttps://github.com/glyph-lang/glyph
max_upload_size
id1761073
size235,106
David Irvine (dirvine)

documentation

https://docs.rs/glyph-runtime

README

Glyph Runtime

The Glyph runtime provides an immutable-first virtual machine (VM) for executing Glyph programs with capability-based security.

Features

Immutable-First Design

  • All values are immutable - operations create new values rather than modifying existing ones
  • Variable bindings are immutable (no reassignment allowed)
  • Collection operations (append, insert, etc.) return new collections
  • Side effects only through capability-controlled intrinsics

Stack-Based Execution

  • Efficient stack-based VM with configurable limits
  • Support for nested function calls with proper frame management
  • Automatic memory management with configurable limits

Capability-Based Security

  • Programs must declare required capabilities upfront
  • Fine-grained permission system for:
    • Audio synthesis (audio.speak)
    • Network access (network.fetch with URL patterns)
    • Display operations (display.chart, display.image)
    • User interaction (wait.confirm)
    • Memory limits
  • Runtime enforcement prevents unauthorized operations

Comprehensive Instruction Set

  • Arithmetic: Add, Sub, Mul, Div, Mod, Pow
  • Comparison: Eq, Ne, Lt, Le, Gt, Ge
  • Logical: And, Or, Not
  • Stack manipulation: Push, Pop, Dup, Swap, Rot3
  • Control flow: Jump, JumpIf, JumpIfNot, Call, Return
  • Data structures: MakeList, MakeDict, ListAppend, DictInsert
  • Pattern matching: Match, MatchValue, MatchType
  • Intrinsics: CallIntrinsic for built-in functions
  • Debugging: TraceValue, RecordTelemetry

Usage

use glyph_runtime::{VM, VMConfig, Instruction, Value, Capability};

// Configure VM with capabilities
let mut config = VMConfig::default();
config.capabilities.grant(Capability::AudioSpeak);

// Create VM instance
let mut vm = VM::new(config);

// Load bytecode program
vm.load_bytecode(vec![vec![
    Instruction::Push(Value::Str("Hello, Glyph!".to_string())),
    Instruction::CallIntrinsic("voice.speak".to_string()),
    Instruction::Halt,
]]);

// Execute program
match vm.execute() {
    Ok(result) => println!("Result: {}", result),
    Err(e) => eprintln!("Error: {}", e),
}

Architecture

VM Structure

VM
├── Stack (configurable size)
├── Call Frames (function contexts)
├── Global bindings (immutable)
├── Capability set (granted permissions)
├── Memory manager (tracks allocations)
└── Telemetry collector

Execution Model

  1. Instructions are fetched from bytecode
  2. Stack-based operations manipulate values
  3. Call frames manage function scope
  4. Capabilities are checked before intrinsics
  5. Memory limits are enforced continuously

Examples

See the examples/ directory for:

  • simple_vm.rs - Basic arithmetic and list operations
  • capability_demo.rs - Capability-based security demonstrations
  • vm_benchmark.rs - Performance benchmarks

Performance

The VM is designed for:

  • Cold start: ≤ 150ms
  • Arithmetic operations: > 4 ops/ms
  • Memory efficiency: < 10MB for basic programs
  • Deterministic execution with seed-based randomness
Commit count: 0

cargo fmt