V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
moonbitlang
V2EX  ›  编程

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

  •  
  •   moonbitlang · 166 天前 · 586 次点击
    这是一个创建于 166 天前的主题,其中的信息可能已经有所发展或是发生改变。

    MoonBit 更新

    • 类型标注增加了新的语法T? 来表示Option[T]
    struct Cell[T] {
      val: T
      next: Cell[T]?
    }
    
    fn f(x : Cell[T]?) -> Unit { ... }
    

    相当于

    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.前缀
    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相同,等待功能进一步完善。

    插件更新

    • [语言服务器] 修复了内存泄露的问题
    目前尚无回复
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2859 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 13:01 · PVG 21:01 · LAX 05:01 · JFK 08:01
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.