雙周報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