语言语法概览(概念版)
本文聚焦语言层面概念和计划中的语法,不涉及编译器/实现细节。
核心理念
- 值类型按值传递,复合类型按引用传递:基础标量(整型、浮点、布尔、字符)默认值传递;
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 风格对象接口。