ring-lang-rs
Rust bindings for the Ring programming language.
Use Cases
- Write Ring extensions in Rust - Create native extensions with Rust's safety and performance
- Wrap Rust crates - Expose any Rust library to Ring applications
- Performance-critical code - Offload CPU-intensive work (parsing, compression, crypto, physics)
- System integration - Access OS APIs, hardware, or FFI libraries not available in Ring
Supported Platforms
Linux, macOS, Windows, FreeBSD
Requirements
- Rust (stable)
- Ring language installed
Installation
Add to your Cargo.toml:
[]
= ["cdylib"]
[]
= "0.1"
Or clone and use locally:
Environment Variables
Optional: Set RING (or ring) to your Ring installation directory:
# Linux/macOS
# Windows (PowerShell)
# Windows (CMD)
If not set, the system's libring will be used.
Quick Start
See examples/basic/ for a complete working example:
Usage
Basic Function
use *;
ring_func!;
ring_libinit!
Working with Numbers
ring_func!;
Working with Strings
ring_func!;
Working with Lists
ring_func!;
ring_func!;
Working with C Pointers (Rust Structs)
use c_void;
const MY_TYPE: & = b"MyStruct\0";
ring_func!;
ring_func!;
Managed Pointers (Auto-freed by Ring GC)
extern "C"
ring_func!;
Available Macros
| Macro | Description |
|---|---|
ring_libinit! |
Register functions with Ring |
ring_func! |
Define a Ring function with boilerplate |
ring_check_paracount! |
Validate parameter count |
ring_check_paracount_range! |
Validate parameter count within range |
ring_check_string! |
Validate string parameter |
ring_check_number! |
Validate number parameter |
ring_check_list! |
Validate list parameter |
ring_check_pointer! |
Validate pointer parameter |
ring_check_cpointer! |
Validate C pointer parameter |
ring_get_string! |
Get string parameter |
ring_get_number! |
Get number parameter (f64) |
ring_get_int! |
Get integer parameter (i32) |
ring_get_list! |
Get list parameter |
ring_get_pointer! |
Get typed pointer as Option<&mut T> |
ring_get_cpointer! |
Get raw C pointer |
ring_new_list! |
Create new list |
ring_ret_number! |
Return number |
ring_ret_string! |
Return string |
ring_ret_list! |
Return list |
ring_ret_cpointer! |
Return C pointer |
ring_ret_managed_cpointer! |
Return managed C pointer |
ring_error! |
Raise Ring error |
Module Structure
| Module | Description |
|---|---|
ffi |
Raw FFI bindings + struct definitions (VM, List, Item, String) |
api |
Ring VM API wrappers (58 functions) |
list |
List manipulation (66 functions) |
string |
String operations (15 functions) |
state |
State management (29 functions) |
vm |
VM control and execution (44 functions) |
item |
Item/value operations (23 functions) |
general |
File/directory utilities (14 functions) |
macros |
Ergonomic helper macros |
API Coverage
186 / 456 functions (41%) of Ring's public C API.
| Header | Coverage |
|---|---|
vm.h |
29/29 (100%) |
state.h |
17/20 (85%) |
rstring.h |
11/22 (50%) |
ritem.h |
17/34 (50%) |
general.h |
12/28 (43%) |
rlist.h |
54/131 (41%) |
ringapi.h |
39/111 (35%) |
vmgc.h |
4/81 (5%) |
We focused on functions useful for writing extensions. ringapi.h has many type-check macros (bound separately). rlist.h and vmgc.h have _gc variants we skip.
License
This project is licensed under the MIT License - see the LICENSE file for details.