MoonBit 本周新增类型标注语法、继续进行核心库 API 整理工作

MoonBit更新

  • 类型标注增加了新的语法T? 来表示Option[T]
rust 复制代码
struct Cell[T] {
  val: T
  next: Cell[T]?
}

fn f(x : Cell[T]?) -> Unit { ... }

相当于

rust 复制代码
struct Cell[T] {
  val: T
  next: Option[Cell[T]]
}

fn f(x : Option[Cell[T]]) -> Unit { ... }

旧的Option[T]仍然兼容,但是推荐使用更简短的新语法。moonfmt也会将Option[T]格式化为T?

  • 核心库 API 整理工作继续进行
    • Iter包被合入了builtin包。现在使用Iter[T]不需要@iter.前缀
rust 复制代码
pub fn any[T](xs : Iter[T], predicate : (T) -> Bool) -> Bool {
                // ^不需要@iter.
  match xs.find_first(predicate) {
    None => false
    Some(_) => true
  }
}
  • Stack包被移入moonbitlang/x
  • 移除了List包,以及各类数据结构的to_listfrom_list函数。对于数据结构间转换和中间的表示结构,推荐使用Iter[T]Array[T]
  • 性能提升
    • 编译器现在会在分离编译的阶段进行一部分的闭包转化,从而改进了编译性能,并且对 JavaScript 后端生成的代码在特定情况下也进行了闭包转化
    • Option[Bool], Option[Char], Option[Byte], Option[Unit] 这些类型使用32位整数表示,其中 None 对应的值为 -1, Some(x) 对应的值为 x; Option[Int] 类型在 wasm 后端使用 64 位整数表示,其中 None 对应的值为 0x1_0000_0000, Some(x) 对应的值为 x, Option[Int]在 JavaScript 后端使用 int | undefined 表示,其中 undefined 表示 None
  • abort行为变更
    • 为了解除Wasm程序对于非标准的spectest.print_char的依赖,正在重构错误输出功能。
    • abort将不会利用spectest.print_char打印错误信息,行为与panic相同,等待功能进一步完善。

插件更新

  • 【语言服务器】修复了内存泄露的问题
相关推荐
炒毛豆9 小时前
vue3+antd实现华为云OBS文件拖拽上传详解
开发语言·前端·javascript
THMAIL10 小时前
攻克 Java 分布式难题:并发模型优化与分布式事务处理实战指南
java·开发语言·分布式
完美世界的一天10 小时前
Golang 面试题「中级」
开发语言·后端·面试·golang
xhbh66610 小时前
【超全汇总】MySQL服务启动命令手册(Linux+Windows+macOS)(上)
数据库·mysql·程序员·mysql启动命令·数据库启动命令
Morpheon11 小时前
Intro to R Programming - Lesson 4 (Graphs)
开发语言·r语言
代码AI弗森11 小时前
使用 JavaScript 构建 RAG(检索增强生成)库:原理与实现
开发语言·javascript·ecmascript
Tipriest_12 小时前
C++ 中 ::(作用域解析运算符)的用途
开发语言·c++·作用域解析
Swift社区12 小时前
Java 常见异常系列:ClassNotFoundException 类找不到
java·开发语言
Tipriest_13 小时前
求一个整数x的平方根到指定精度[C++][Python]
开发语言·c++·python
蓝倾97614 小时前
淘宝/天猫店铺商品搜索API(taobao.item_search_shop)返回值详解
android·大数据·开发语言·python·开放api接口·淘宝开放平台