Weekly. 社区周报 [weekly6][edit]
- 2025/6/16 ~ 2025/6/22
Weekly. 社区周报 [weekly6][edit]
- 2025/6/16 ~ 2025/6/22
这里是 2025/6/16 ~ 2025/6/22 的社区周报,为一周周报。在本周中 MoonBit 语言正式进入了 Beta 版本,是一个巨大的里程碑。
Moonbit 官方在 6 月 16 号发布了一次官方周报,本次是 beta 版本之前的最后修改,意味着语法即将进入稳定阶段。更新内容有: 用于表示错误的  定义错误类型的语法  对于函数, typealias/traitalias 语法更新:改用  废弃多参数  显式实现特征(Trait)新规:即使有默认方法也需  废弃外部类型  虚拟包支持抽象类型:接口声明,多实现可自定义类型。 新增保留字警告:未来可能成为关键字。 新增了箭头函数语法  矩阵函数功能被废弃,以精简语法。形如  之前,可以使用  对于一些比较模糊/不够广为人知的运算符优先级组合,例如  新引入了  等号右手侧只能是函数形式的值,比如匿名函数或者箭头函数,之前使用  利用新的错误多态功能,标准库中的许多高阶函数如  MoonBit 在 2025 年 6 月 13 日至 15 日,分别先后亮相两大重量级科技盛会:香港科技大学(广州)主办的第三届 INNOTECH 创科嘉年华,以及 msup(麦思博)主办的第十二届 GIAC 全球互联网架构大会。在 GIAC 大会上,IDEA 研究院基础软件中心首席科学家、MoonBit 平台负责人张宏波在本次大会中带来了《AI 编程在 MoonBit 上的垂直整合》主题演讲。 2025 年 6 月 18 日,CSDN 官方公众号发表了一篇题为《20 年磨一剑,国内首个工业级编程语言进入 Beta 版本》的文章,介绍了 MoonBit 的最新进展。同时也标志着 MoonBit 正式进入 Beta 版本。 MoonBit 官方的 Pearls 系列文章更新了第二篇文章 《MoonBit Pearls Vol.02:MoonBit 中的面向对象编程》,由 MoonBit 官方同学刘子悦执笔,通过一个生动的 RPG 游戏开发的例子,带领读者探索了 MoonBit 中的面向对象编程。 1. 本周官方重要动态 [official][edit]
! 语法被替换为关键字 raise,用于表示错误。type! T .. 改为 suberror T ..,通过格式化工具可以自动完成迁移。f!(..)/f?(..) 的语法即将被废弃,函数的类型参数语法也从 fn f[..](..) 改为 fn[..] f(..)。as 替代 =,这一改动也可以通过格式化工具自动完成迁移。loop,改用元组参数以保持与 match 一致。类似多参数的 loop 需求应该替换为元组,该改动保证了模式匹配的一致性。impl。如果没有需要提供自定义实现的方法,可以用 impl Trait for Type 来表示 “给 Type 实现 Trait,但所有方法都用默认实现”。impl 的点调用,改用本地方法扩展。该改动比较复杂,我们引用周报原文:
之前,给外部类型的 impl 可以在当前包内用 . 调用。但这一功能是不重构安全的:上游新增方法会改变下游代码的行为。因此,我们决定废弃这一行为。作为替代,MoonBit 支持了局部地给外部类型定义新方法的功能,语法和普通的方法定义一样。这些给外部类型定义的方法有如下特点:
pub 的。这是为了保证跨包协作时不会产生冲突。x.f(..) 的解析规则变为(优先级从高到低):x 的类型所在的包的方法x 的类型所在的包的 implJson 字面量自动调用 ToJson::to_json,编写更便捷。let x = 42
// 之前
let _ : Json = { "x": x.to_json() }
// 现在
let _ : Json = { "x": x }
(..) => expr,能极大简化简单匿名函数:test {
    let arr = [ 1, 2, 3 ]
    arr
    .map(x => x + 1) // 只有一个参数时可以省略括号
    .iter2()
    .each((i, x) => println("\{i}: \{x}"))
}
fn { .. => expr } 的矩阵函数可以改为箭头函数,其他矩阵函数应改为显式的 fn 和 match。xx._ 语法来将 new type 转化为其实际表示。但这一语法和 partial application 语法(_.f(..))过于相似,有视觉歧义。因此,xx._ 语法被废弃,相应的,编译器会给每个 new type 自动生成一个 .inner() 方法,代替原本的 ._。这一改动可以通过格式化代码自动完成迁移。<< 和 +,MoonBit 现在会产生警告。手动或者通过格式化代码加上括号来明确计算顺序即可消除警告。letrec 和 and 关键字用于声明 local 互递归函数,比如:fn main {
    letrec even = fn (x: Int) { ... } // anonymous function
    and odd = x => ...                // arrow function
}
fn 声明的隐式互递归写法会被 deprecated,不过自递归函数依然可以用 fn 进行声明。fnalias 不再能用于创建非函数值的别名。对于非函数类型的值,可以用 let 来创建别名。Array::each 现在可以接受带错误的回调函数了。main 包测试支持:moon test 运行测试,moon run 执行主程序(此前 main 包中禁止编写测试)。IDE codelens 支持运行文档中的测试。moon test 和 moon check 现在默认会包含文档中的测试。
 2. 本周社区新增优质项目 [projects][edit]
 3. 本周社区新增优质包 [packages][edit]
 4. 本周社区动态 [community][edit]