nature v0.4.0-beta 已发布。
新增
- 编译时错误优化,显示文件名和行号,类型错误显示类型原始标识
- 运行时 error 提供堆栈追踪
- 多行注释
/****/
支持 - import 支持不带前缀的导入方式
import utils as *
- 小型测试用例parker
- 参数解构功能支持,示例
call(...vec)
- 泛型类型支持递归
type numbert = gen intergert|flotert
- 二元运算符
||``&&
支持 - 包管理 import dir 支持, 此时会自动查找 dir 下的 main.n
- 包管理 import xxx_temp 支持,能够定义 temp 文件与静态库进行交互
- nature struct 调整为与 C 语言同构,能够直接将 nature struct 传递给 c 语言
- 数据类型
arr<T,len>
支持,其在 stack 中进行分配,和 C 语言中T ident[len]
同构 - new 语法支持,nature struct 默认为 stack 分配,可以通过
ptr<person> p = new person
得到一个 heap 分配的 p - as 后的类型支持约束,如
var s = {} as {u8}
声明了一个 set 类型将会被约束为{u8}
类型,等同于{u8} s = {}
- 包管理支持声明 links 静态库链接 和 temps 模板声明
- 新增标准库字符串库
import strings
- 为了更好的和 C 语言进行交互,新增类型
cptr
和cptr<T>
- 增加内置语法关键字 sizeof 用来计算类型的 size,使用示例
int s = sizeof(person)
- 新增标准库 fmt/os/path/strings/time
- 新增模板文件(用于和 C 语言交互) builtin_temp(默认 import),dirent_temp, libc_temp, strings_temp, syscall_temp
调整
- type param 只能在全局进行定义
- 全局变量支持类型推导
- 删除 set 函数,通过 as 约束声明一个空的 set
- list 类型定义调整为 vec, 支持使用 vec 原始结构体声明并指定长度,示例
var terms = vec<u8>{len=12,cap=24}
- string 类型调整为与 vec 同构,支持通过
str[0]
的方式访问以及赋值,并支持 for in 遍历 - vec 类型方法 list.len() 调整为类型属性,list.len, 并支持类型方法 slice/concat 等类型函数
- for 迭代表达式错误与 break 和 continue 无法重复声明错误
- 泛型 type i = gen int|int64 基本类型一致时重复生成
- 寄存器分配时 interval_add_range 添加 range 错误
- set.contains() 计算 hash slot 错误
- struct 中定义 fn 异常
- 链接器 elf rela addend 计算异常,addend = next_inst_offset - current_inst_rel offset
- ssa rename 异常,部分线性 var def 未进行 rename
- if 多行表达式 parser 解析异常
- 自动 GC 触发时间异常,调整 GC 触发时间点为 user mode
- malloc 分配重复的内存区域时,由于没有清空该区域导致 GC 异常,malloc 分配区域主动进行清空处理
- import 优先级异常,local ident 可以覆盖 import ident
- 修复 gcc11 下全局变量重复定义错误 #16
详细更新内容见发行说明。
nature 是一款静态编译强类型语言,具有以下特征:
- null 安全、泛型和联合类型的类型系统
- 静态交叉编译,允许为目标机器生成可执行文件,无需依赖任何第三方组件
- 带有增量垃圾回收的支持,支持自动垃圾回收(手动垃圾回收仍在设计中)
- 内置数据结构,如列表、映射、集合和元组
- 包和模块管理
- 函数标签(正在设计中)、闭包、错误处理和协程
- SSA、线性扫描寄存器分配、反射机制、汇编器和链接器
代码示例
- 错误处理
- 泛型