nature v0.4.0-beta 发布,静态编译强类型语言


nature v0.4.0-beta 已发布。

新增

  1. 编译时错误优化,显示文件名和行号,类型错误显示类型原始标识
  2. 运行时 error 提供堆栈追踪
  3. 多行注释/****/支持
  4. import 支持不带前缀的导入方式import utils as *
  5. 小型测试用例parker
  6. 参数解构功能支持,示例call(...vec)
  7. 泛型类型支持递归type numbert = gen intergert|flotert
  8. 二元运算符||``&&支持
  9. 包管理 import dir 支持, 此时会自动查找 dir 下的 main.n
  10. 包管理 import xxx_temp 支持,能够定义 temp 文件与静态库进行交互
  11. nature struct 调整为与 C 语言同构,能够直接将 nature struct 传递给 c 语言
  12. 数据类型arr<T,len>支持,其在 stack 中进行分配,和 C 语言中T ident[len]同构
  13. new 语法支持,nature struct 默认为 stack 分配,可以通过ptr<person> p = new person得到一个 heap 分配的 p
  14. as 后的类型支持约束,如var s = {} as {u8}声明了一个 set 类型将会被约束为{u8}类型,等同于{u8} s = {}
  15. 包管理支持声明 links 静态库链接 和 temps 模板声明
  16. 新增标准库字符串库import strings
  17. 为了更好的和 C 语言进行交互,新增类型cptrcptr<T>
  18. 增加内置语法关键字 sizeof 用来计算类型的 size,使用示例int s = sizeof(person)
  19. 新增标准库 fmt/os/path/strings/time
  20. 新增模板文件(用于和 C 语言交互) builtin_temp(默认 import),dirent_temp, libc_temp, strings_temp, syscall_temp

调整

  1. type param 只能在全局进行定义
  2. 全局变量支持类型推导
  3. 删除 set 函数,通过 as 约束声明一个空的 set
  4. list 类型定义调整为 vec, 支持使用 vec 原始结构体声明并指定长度,示例var terms = vec<u8>{len=12,cap=24}
  5. string 类型调整为与 vec 同构,支持通过str[0]的方式访问以及赋值,并支持 for in 遍历
  6. vec 类型方法 list.len() 调整为类型属性,list.len, 并支持类型方法 slice/concat 等类型函数
  7. for 迭代表达式错误与 break 和 continue 无法重复声明错误
  8. 泛型 type i = gen int|int64 基本类型一致时重复生成
  9. 寄存器分配时 interval_add_range 添加 range 错误
  10. set.contains() 计算 hash slot 错误
  11. struct 中定义 fn 异常
  12. 链接器 elf rela addend 计算异常,addend = next_inst_offset - current_inst_rel offset
  13. ssa rename 异常,部分线性 var def 未进行 rename
  14. if 多行表达式 parser 解析异常
  15. 自动 GC 触发时间异常,调整 GC 触发时间点为 user mode
  16. malloc 分配重复的内存区域时,由于没有清空该区域导致 GC 异常,malloc 分配区域主动进行清空处理
  17. import 优先级异常,local ident 可以覆盖 import ident
  18. 修复 gcc11 下全局变量重复定义错误 #16

详细更新内容见发行说明。


nature 是一款静态编译强类型语言,具有以下特征:

  • null 安全、泛型和联合类型的类型系统
  • 静态交叉编译,允许为目标机器生成可执行文件,无需依赖任何第三方组件
  • 带有增量垃圾回收的支持,支持自动垃圾回收(手动垃圾回收仍在设计中)
  • 内置数据结构,如列表、映射、集合和元组
  • 包和模块管理
  • 函数标签(正在设计中)、闭包、错误处理和协程
  • SSA、线性扫描寄存器分配、反射机制、汇编器和链接器

代码示例

  • 错误处理

  • 泛型


相關推薦

2023-11-24

Fortran 2023 已发布。Fortran 2023是Fortran语言的最新版本,它在性能、易用性和并行编程方面都有显著的改进。如果您正在编写一个需要对大型数值数组进行快速计算的程序或库,Fortran 2023是您的最佳选择。 Fortran 2023 根据 ISO/IEC 1539

2022-10-10

怀疑态度,毕竟这对于许多 JavaScript 开发者来说,试图将静态类型引入 JavaScript 是一个笑话——或是邪恶的阴谋。反对者则直言这是十分愚蠢的想法,他们认为当时已存在可以编译为 JavaScript 的强类型语言,例如 C#、Java 和 C++。

2024-01-05

PureScript  v0.15.14 发布了。PureScript 是个小巧而强大的静态类型语言,可以编译成 JavaScript。PureScript 主要是由 Haskell 和 PureScript 编写的。 Bug 修复: 修复超大文件的编译内存回归(#4521) 编译超大文件(>12K 行)时,

2023-03-08

PureScript  v0.15.8 发布了。PureScript 是个小巧而强大的静态类型语言,可以编译成 JavaScript。PureScript 主要是由 Haskell 和 PureScript 编写的。 新功能: 生成的文档现在支持 dark 模式(#4438)。PureScript 文档有一个新的 dark 

2022-11-27

语言来声明项目设置,而不是传统的 XML。 Gradle 7.6 现已发布,此版本包括使用 Java 19 构建和运行代码、单独重新运行任务的标志、用于 JVM 测试套件的新强类型依赖块,以及用于 Java 工具链配置的可插拔系统。 新功能和可用性

2023-03-08

月,Go “不负众望“ 终于进入了前十名的行列中。 Go 是静态类型的编程语言,具有并发性和垃圾回收这样的特点,并且还有良好的性能。Docker 和 Kubernetes 等热门应用都是在 Go 的帮助下开发的。再加上 Go 语言得到了来自 Google

2023-07-19

持深色模式 以及改进对小型 viewports 的支持 BTW,最新发布的 1.9.1 版本修复了 1.9.0 中的两个错误,详见发布公告。

2022-04-09

它的类型由一个先进的全局类型推理算法来解决。 最新发布的 1.4.0 版本包含错误修复和功能改进,涉及到语法、标准库、集合、加密、文件、语法宏、网络、运行时和规范等,详情查看 release note。 值得关注的变化 初步支持 We

2023-04-10

Haxe 是开源的高级严格类型编程语言,具有快速且经过优化的交叉编译器。 Haxe 可以构建目标平台是 JavaScript、C++、C#、Java、JVM、Python、Lua、PHP、Flash 的跨平台应用程序,并支持访问每个平台的原生功能。Haxe 有自己的 VM(HashLink

2022-03-14

提案的目的是让开发者能够运行用 TypeScript、Flow 或其他静态类型的 JavaScript 超集所编写的程序,而不需要转译。微软在公告中表示,新的语法将有效地起到注释作用,而不会改变代码的运行方式。 微软在提案中还表示,在过去

2023-02-03

关于 C++ Core Guidelines 的工作,旨在为有需要的人提供静态保证的类型安全和资源安全的 C++。符合 C++ Core Guidelines 的良好静态分析器可以为 C++ 代码安全提供必要的保证,且比升级到更新的安全编程语言要简单得多。 他批评&n

2023-01-11

进的全局类型推理算法来解决。    Crystal 1.7.0 已发布,此版本包含自 1.6.2 发布以来 38 位贡献者提供的 152 项更改。主要内容如下: 解释器 REPL  #12738 解释器的 REPL 接口在可用性方面得到了重大改进。命令提示

2023-04-16

根据 KotlinConf 2023 的消息,Kotlin 2.0 和 Kotlin K2 编译器即将发布。 Kotlin 2.0  从 Kotlin 1.8.20 开始,已经可以通过常规 Kotlin 语言版本标志( -language-version)启用 Kotlin 2.0 的预览。 Kotlin 2.0 发布后,将提供几个备受期待的功

2023-09-06

V语言 (Vlang) 0.4.1 已发布。主要变化集中在改进语言特性、解析器、标准库,以及编译器内部相关的变化等。 实现Enum.from_string(name string)将字符串转换为枚举值 禁止使用未初始化的函数指针 使用默认 expr 修复匿名结构 支