双周报Vol.72:字段级文档注释支持、视图类型现为值类型,减少内存分配
更新目录
..
调用链末尾自动丢弃值语义变更- 字段级文档注释支持
- 视图类型现为值类型,减少内存分配
- 特效函数调用现支持样式高亮
- 实验性支持虚拟包,接口与实现解耦
语言更新
1、..
调用链末尾自动丢弃值语义变更
x..f(..)
的语义即将发生改变,在 .
/..
调用链末尾的最后一个 ..
以后会自动丢弃它的值。因此,下面的代码:
impl[X : Show, Y : Show] Show for (X, Y) with output(self, logger) {logger..write_string("(")..write_object(self.0)..write_string(", ")..write_object(self.1)// 原本,这里必须写 `.`,否则整个 `.` 链的类型是 `&Logger`,不符合预期类型 `Unit`.write_string(")")
}
以后可以简化成
impl[X : Show, Y : Show] Show for (X, Y) with output(self, logger) {logger..write_string("(")..write_object(self.0)..write_string(", ")..write_object(self.1)// 以后可以直接一路 `..` 到底了..write_string(")")
}
但这也意味着直接使用 x..f()
的值的用法将会被废弃,需要显式保存x
。例如,下面的代码:
let arr = []..push(1)..push(2)
需要改写成:
let arr = []
arr..push(1)..push(2)
2、字段级文档注释支持
枚举构造器和结构体的字段支持单独的文档注释,在补全时会显示相应的文档。
///| Location enum
struct Location {/// X coordinatex : Int/// y coordinatey : Int
}///| Variant enum
enum Variant {/// Stirng constructorString(String)/// Number constructorNumber(Double)
}
3、视图类型现为值类型,减少内存分配
@bytes.View
和 @string.View
在 C 和 wasm1 后端现在会被编译成值类型,这意味着这两个类型不会引入内存分配,性能有较大提升。
工具链更新
1、特效函数调用现支持样式高亮
vscode 插件支持semantic token, 会对有effect的函数(会抛出异常的函数, 异步函数)调用使用不同的样式高亮。
2、实验性支持虚拟包,接口与实现解耦
构建系统支持 virtual package 特性,通过将一个 package 声明为虚拟包,定义好一套接口,用户可选择具体使用哪一份实现,如不指定则使用该虚拟包的默认实现。
通过这项特性,给分离接口与实现带来较大灵活性。注意:目前这项特性处于实验性状态。详情请查看:MoonBit 新特性:Virtual Package 虚拟包机制
3、单文件测试调试功能上线
支持对于单个 .mbt 和 .mbt.md 文件的 test 和 debug codelen