快速开始
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 |