windjammer 0.48.0

A simple language inspired by Go, Ruby, and Elixir that transpiles to Rust - 80% of Rust's power with 20% of the complexity
Documentation
// std/subprocess - Interactive subprocess I/O (Windjammer API)
//
// Implementation: windjammer_runtime::subprocess → std::process (Rust)
// Import: use std::subprocess
//
// Opaque handle pattern — swap backend without changing call sites.

struct SubprocessHandle {
    pub id: u64,
}

fn invalid_handle() -> SubprocessHandle {
    SubprocessHandle { id: 0 }
}

fn is_valid(handle: SubprocessHandle) -> bool {
    handle.id != 0
}

fn spawn(program: string, args: Vec<string>) -> Result<SubprocessHandle, string> {
    Err("use std::subprocess import — maps to runtime")
}

fn write_line(handle: SubprocessHandle, line: string) -> Result<(), string> {
    Err("use std::subprocess import — maps to runtime")
}

fn read_line(handle: SubprocessHandle) -> Result<string, string> {
    Err("use std::subprocess import — maps to runtime")
}

fn read_line_until_prefix(handle: SubprocessHandle, prefix: string) -> Result<string, string> {
    Err("use std::subprocess import — maps to runtime")
}

fn frames_in_agent_command(command: string) -> int {
    1
}

fn read_agent_obs_n(handle: SubprocessHandle, count: int) -> Result<string, string> {
    Err("use std::subprocess import — maps to runtime")
}

fn kill(handle: SubprocessHandle) -> Result<(), string> {
    Err("use std::subprocess import — maps to runtime")
}

fn wait(handle: SubprocessHandle) -> Result<int, string> {
    Err("use std::subprocess import — maps to runtime")
}

fn close(handle: SubprocessHandle) -> Result<(), string> {
    Err("use std::subprocess import — maps to runtime")
}