简化结构体和枚举的语法
语法从 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的结构体,只对外公开push和pop这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/
构建系统更新
-
添加
moon check --watch,通过监听文件系统变动 -
添加
moon version显示版本号 -
在可以⽀持 build 拉取的第三⽅的库
-
moon add ⽀持多个 package 拉取同⼀个 package
-
增加一键安装构建系统脚本
