xxc

可编译可解释的系统级语言 - 确定性 ARC 无 GC / 全自举工具链 / 三后端逐字节一致

📂 开发工具#编程语言#编译器#自举#跨平台#无GC#并发#开发工具📅 2026-10-9

快速开始

📅 2026-10-9

xxc 快速开始

> xxc 是一门可编译也可解释的系统级语言:Go 式人体工学、无 tracing GC

> (确定性 ARC + 值类型)、三后端逐字节一致、整个工具链用 xxc 自己编写。

> 相关页:语言指南 ·

> 标准库参考 ·

> 并发编程指南 ·

> 实现与自举。

安装

# Linux x64 / arm64
curl -fsSL https://magicdo.top/install/xxc.sh | bash

# Windows (PowerShell)
irm https://magicdo.top/install/xxc.ps1 | iex

或从下载页直接取对应平台的可执行文件。xxc 是

单文件分发、零运行时依赖(Linux 产物为静态 ELF,不依赖 libc),放到

PATH 即用。

三个后端

xxc run hello.xxc     # 树遍历解释器——秒起,语义基准
xxc vm hello.xxc      # 字节码 VM——约 2.8 倍速
xxc build hello.xxc   # 原生编译 → ./hello 直接运行

三个后端共享同一前端;差分门矩阵(Windows 58×2 / aarch64 60×2 /

Linux 61 / qemu 59)保证输出逐字节一致。

第一个程序

fn main() {
    print("Hello, xxc")
}

保存为 hello.xxc,三个后端任跑:

$ xxc run hello.xxc
Hello, xxc
$ xxc build hello.xxc && ./hello
Hello, xxc

语言速览

struct Point { x: int; y: int }   // 值类型:赋值即拷贝
class Box   { value: int }        // 引用类型:确定性 ARC

fn inv(x: int) -> int ! {         // ! 标记可错函数
    if x == 0 { return error("zero") }
    return 100 / x
}

fn main() {
    a := Point{x: 1, y: 2}
    b := a                         // 独立副本,b.x 改不动 a.x
    c := Box{value: 10}
    d := c                         // 共享实例,引用计数 +1
    d.value = 77                   // c.value 同步变为 77

    n := inv(5)?                   // ? 传播错误
    m := inv(0) or { -1 }          // or 就地恢复

    print(a.x, c.value, n, m)      // 1 77 20 -1
}

更多语法(闭包、枚举 + match、泛型、接口、map/元组、字符串插值)见

语言指南。

并发

fn worker(ch: int) {
    ch <- 42
}
fn main() {
    ch := chan(0)          // 汇合通道;chan(n) 为有缓冲
    spawn worker(ch)
    got := <-ch
    print("got", got)      // got 42
}

官方二进制已内置 worker 池运行时:XXC_CONC_WORKERS=4 ./hello 即以

4 worker 运行;打印按语句行原子,多任务永不撕行。详见

并发编程指南。

编译成什么、能交叉吗

| 主机 | xxc build 产物 |

|---|---|

| Windows x64 | PE 可执行文件 |

| Linux x64 | 静态 ELF(无 libc 依赖,任意发行版) |

| Linux aarch64 | 原生 AArch64 ELF |

# Windows 上交叉产出 Linux ELF
XXC_TARGET=linux xxc build hello.xxc

编译产物为单文件自包含——这与编译器自身的分发方式相同:你手里的

xxc 就是全部。

常用环境变量

| 变量 | 作用 |

|---|---|

| XXC_ALLOC_LIMIT | 分配失控护栏(严格十进制字节,默认 2GiB) |

| XXC_ARC_FREE | 1 = 启用真释放路径(引用归零即回收) |

| XXC_CONC_WORKERS | 并发 worker 数 |

| XXC_TARGET | linux = 交叉编译 Linux ELF |

下一步