Moonbit每周工作动态-0724

简化结构体和枚举的语法

语法从 type T struct|enum {……} 简化为 struct|enum T {……}

用户现在可以更加方便的编写结构体和枚举,比如原来需要写:

type T enum {
  A
  B
}

type queue[T] struct {
  front:list[T]
  back:list[T]
}

现在可以简化成:

enum T {
  A
  B
}

struct queue[T] {
  front:list[T]
  back:list[T]
}

return / break / continue 后不可触达代码检测

现在程序中出现不可触达的代码会被自动检测出来,比如:

func init {
  while true {
    break
    1.print()  // 会出现Warning 012: Unreachable code
  }
}

重新设计了类型的可⻅度

增加 priv 关键字,如果需要让类型名也不对外公开,或是隐藏 pub 结构体的部分字段,可以增加 priv,比如这个表示stack的结构体,只对外公开pushpop这2个方法,而实现细节 mut elems 则被隐藏起来了。

pub struct stack {
  priv mut elems: list[int]
  push: (int) => ()
  pop: () => int
}

跨包访问构造器

现在可以通过类似 @pkg.T::A 的语法来做跨包访问构造,比如

代码 lib/list2/data.moon 定义了一个 myList :

pub enum myList[T] {
  Nil
  Cons(T,myList[T])
}

main/moon.pkg 引入依赖时alias成 L2:

package main

import (
    L2 "moonbitlang.com/test_proj/lib/list2"
)

那么在 main/main.moon中可以做如下操作:

let lst = @L2.myList::Cons(42, @L2.myList::Nil)
  match lst {
    @L2.myList::Cons(x,xs) => ()
    @L2.myList::Nil => ()
  }

运算符 lsl /lsr/ asr等改成内置方法

比如原来做逻辑与(logic and)需要写 5 land 3,现在改成: 5.land(3)

其他涉及本次运算符修改的方法如下:

  • land:逻辑与

  • lor:逻辑或

  • lxor:逻辑异或

  • lsl:逻辑左移

模式匹配 as 位置变更

互换了模式匹配中 as左右元素的位置,比如:

let x = 'c'

func init {
  match x {
    // c as 'c' => c.print() // 旧的写法
    'c' as c => c.print()    // 新的写法
    _ => 'd'.print()
  }
}

IDE实现了类型构造器 gotodef/references功能

比如:

其他优化

  • 优化了模式匹配的missing cases提⽰

  • formatter 增加对其他特殊字符转义的支持:‘\’ ‘\t’ , ‘\b’ ,‘\r’

  • formatter 适配对 constraint 的支持

  • 优化了部分场景下formatter的效果

  • IDE优化:增加文件icon, 把默认缩进改成2

官网文档页面上线

大家可以在Moonbit的文档页面直接运行和调试代码了:

Moonbit Syntax:https://zh.moonbitlang.com/docs/syntax/

构建系统更新

  1. 添加 moon check --watch,通过监听文件系统变动

  2. 添加 moon version 显示版本号

  3. 在可以⽀持 build 拉取的第三⽅的库

  4. moon add ⽀持多个 package 拉取同⼀个 package

  5. 增加一键安装构建系统脚本