B64 Language Reference

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

TypeSizeDescription
i81 byteSigned 8-bit integer (-128 to 127)
i162 bytesSigned 16-bit integer
i324 bytesSigned 32-bit integer (default int)
i648 bytesSigned 64-bit integer
u81 byteUnsigned 8-bit integer (0 to 255)
u162 bytesUnsigned 16-bit integer
u324 bytesUnsigned 32-bit integer
u648 bytesUnsigned 64-bit integer
bool1 byteBoolean (true/false)
f324 bytesIEEE 754 single-precision float
f648 bytesIEEE 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.