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
中元组的开销,因此无需担心这一改动带来性能问题