B64 is a C-like systems programming language and the primary frontend of PBXB64. It features explicit memory management, first-class pointers, structs, and direct IR integration.
Function Syntax
fn name(params): return_type { body }
fn add(a: i32, b: i32): i32 {
return a + b;
}
fn main(): i32 {
let result: i32 = add(10, 20);
return result;
}
Primitive Data Types
| Type | Size | Description |
|---|---|---|
i8 | 1 byte | Signed 8-bit integer (-128 to 127) |
i16 | 2 bytes | Signed 16-bit integer |
i32 | 4 bytes | Signed 32-bit integer (default int) |
i64 | 8 bytes | Signed 64-bit integer |
u8 | 1 byte | Unsigned 8-bit integer (0 to 255) |
u16 | 2 bytes | Unsigned 16-bit integer |
u32 | 4 bytes | Unsigned 32-bit integer |
u64 | 8 bytes | Unsigned 64-bit integer |
bool | 1 byte | Boolean (true/false) |
f32 | 4 bytes | IEEE 754 single-precision float |
f64 | 8 bytes | IEEE 754 double-precision float |
Pointers & Dereferencing
let p: *type = &variable;
fn main(): i32 {
let x: i32 = 42;
let p: *i32 = &x;
*p = 100; // dereference write
return *p; // dereference read -> 100
}
Structs
struct Point {
x: i32,
y: i32,
}
fn main(): i32 {
let p: Point = Point { x: 10, y: 20 };
return p.x + p.y;
}
Control Flow
// Conditional
if condition { body } else { body }
// Looping
while expr { body }
for let i: i32 = start; i < end; i = i + step { body }
// Return
return expression;
return; // void return
External Functions (FFI)
extern "kernel32.dll" fn Sleep(dwMilliseconds: u32): void; extern "user32.dll" fn MessageBoxA(hWnd: *void, lpText: *u8, lpCaption: *u8, uType: u32): i32;
Memory Model: B64 uses explicit allocation via
alloc/dealloc intrinsics. Stack variables are automatic. Pointers must be validated before dereferencing in safe mode.