2025-06-16
语言更新
1、用于表示错误的 ! 语法被替换为关键字 raise
-
用于表示错误的
!语法被替换为关键字raise,具体的对应如下:(..) -> T ! SomeErr=>(..) -> T raise SomeErr(..) -> T !=>(..) -> T raise(..) -> T ? Error=>(..) -> T raise?(这是近期新增的错误多态语法,不了解可以略过)fn f!(..) { .. }=>fn f(..) raise { .. }fn!( ..) { .. }=>fn (..) raise { .. }
上述改动都可以通过格式化代码自动完成迁移
2、定义错误类型的语法 type! T .. 改为 suberror T ..
- 定义错误类型的语法
type! T ..改为suberror T ..。这一改 动可以通过格式化代码自动完成迁移
3、f!(..)/ f?(..) 废弃警告及迁移注意事项
f!(..)和f?(..)语法被废弃,继续使用它们会收到编译器的警告。格式化代码能够自动去掉!完成迁移,但f?(..)需要手动迁移至try?。因为对于原先的f?(g!(..))这种情况,简单改成try? f(g(..))会改变语义,使g中的错误也被捕获。在手动迁移f?(..)时,也需要特别注意这种情况
4、函数类型参数语法更新:fn f[..](..) 改为fn[..] f(..)
- 数周前,函数定义的类型参数的位置从
fn f[..](..)改为fn[..] f(..),和impl保持一致。现在,旧的写法被废弃并会收到编译器警告。这一改动可以通过格式化代码自动迁移
5、typealias和traitalias语法更新:改用 as 替代 =
typealias和traitalias的语法进行了简化,typealias A = B和traitalias A = B这两种写法被废弃,应改为使用typealias B as A和traitalias B as A。复杂的typealias,例如typealias Matrix[X] = Array[Array[X]],应改为typealias Array[Array[X]] as Matrix[X]。这一改动可以通过格式化代码自动迁移
6、废弃多参数 loop,改用元组参数以保持与 match 一致
- 多参数的
loop语法被废弃,应改为使用以元组为参数的loop。这一改动让loop和match更一致。MoonBit 编译器在 release 模式下能够通过优化消除掉loop中元组的开销,因此无需担心这一改动带来性能问题