Skip to content

语言语法概览(概念版)

本文聚焦语言层面概念和计划中的语法,不涉及编译器/实现细节。

核心理念

  • 值类型按值传递,复合类型按引用传递:基础标量(整型、浮点、布尔、字符)默认值传递;string、自定义 class/struct 默认按引用(内部是指针)。
  • 无裸指针,但允许取址/解引用:通过内置 addrof(expr) 获取对象地址(i64),objof(addr) 将整数视作泛型引用,配合 as T 解引用。
  • 对象优先:模块、函数、类、实例都可作为对象传递、取方法或字段调用。

类型与字面量

  • 整数字面量默认 i64;字符串字面量是值类型 string(内部结构体含数据指针/长度/容量)。
  • 类型后置:let x: i64 = 1;,可省略类型由初始化表达式推断。
  • 未来计划:数组、记录、更多包装类型(如 Int/Double/Bool)提供对象式接口。

变量与作用域

  • let/const 声明,块级作用域。
  • 赋值:值类型直接赋值;引用类型存储的是引用。
  • 模块导入:#import "std/io" as io; 导入模块对象,io.output(...) 调用其成员。

表达式与内置

  • 算术/比较/逻辑与常规 C/JS 接近;字符串支持 + 拼接。
  • 取址与解引用:
    • let addr: i64 = addrof(x); 取对象地址。
    • (objof(addr) as T) 将整数地址视作 T* 并加载。
  • 系统调用:syscall(num, arg1..arg6),所有参数自动提升为 i64

类与对象

  • 类定义:class File { public fd: i64; public fun read(max_len: i64): string { ... } }
  • 方法调用:obj.method(args),隐式传入 this
  • 构造函数:约定方法名 constructor(...),由 new Class(args...) 自动调用。
  • 实例化:let f: File = new File(path, flags, mode);
  • 计划中:destructor/析构方法,未来配合自动释放。

内存与生命周期(规划)

  • new 在堆上分配对象;delete obj; 计划用于释放(当前实现仅支持栈顶回退,未来改为可回收 allocator)。
  • 计划加入静态引用计数/逃逸分析:编译期能确定的路径自动插入 retain/release,无法确定时给出警告,提示开发者显式 delete

模块与命名空间

  • 模块对象:编译期生成函数指针表和类型信息,io.File 等类型在命名空间内可访问。
  • 导出/导入:#import 引入模块对象;未来继续拓展 #using/#header 的声明注入能力。

尚未落地但规划的语法

  • 完整的 destructor/析构调用链,配合统一的 free
  • 更智能的内存分配:可回收的 free-list 分配器取代当前线性 brk。
  • 静态引用计数插桩与警告。
  • 数组、记录、异步/Promise 风格对象接口。