weekly 2024-04-30
MoonBit 更新
- 新增JavaScript后端
目前MoonBit已新增对JavaScript的支持并带来前所未有的性能提升,在JS后端实现了超出Json5近8倍性能的优势。更详细的介绍可以看一下这篇文章:IDEA研究院编程语言MoonBit发布JavaScript后端,速度提升25倍
如果你想自己体验一下,可以点击:https://github.com/moonbit-community/benchmark-202404/tree/master/bench_json5
-
现在MoonBit允许传递回调函数至FFI。但回调函数的参数和返回值类型目前只能是简单类型,如
Int
等。例子:// 使用示例:传递回调函数至外部
fn set_callback(f : () -> Int) = "ffi" "set_callback"
// 使用示例
fn use_callback() -> Int = "ffi" "use_callback"
test {
let i = { val : 0 }
set_callback(fn () {
i.val += 1
i.val
})
inspect(use_callback(), content="1")?
inspect(use_callback(), content="2")?
inspect(use_callback(), content="3")?
inspect(use_callback(), content="4")?
}let f
export default {
// 必要外部接口:将闭包转换为JS函数。其他运行时根据语言不同实现方式不同
'moonbit:ffi': {
make_closure: (funcref, context) => funcref.bind(null, context)
},
// 使用示例
ffi: {
set_callback: (func) => {
f = func
}, // 设置回调函数
use_callback: () => f() // 使用回调函数
}
} -
修改显式实现 trait(extension method)的语法,允许显式写出要给哪个类型实现 trait
// 为 `Trait` 的方法 `method` 提供默认实现
impl Trait with method(...) { ... }
// 给类型 `Type` 实现 `Trait` 的方法 `method`
impl Trait for Type with method(...) { ... }
// 带类型参数的情况
impl[X] Trait for Array[X] with method(...) { ... }和之前的
fn Trait::method(...)
语法相比,新的语法允许显式写出实现 trait 的类型,签名信息更丰富、更清晰。由于写出了类型,编译器可以自动推断出方法的参数和返回值类型,不需要手动标注:trait MyTrait {
f(Self) -> Option[Int]
}
// 无需标注 `self` 和返回值的类型
impl MyTrait for Int with f(self) {
// 编译器能自动推断出返回值的类型是 `Option[Int]`
Some(self)
} -
支持Bytes字面量
Bytes字面量
b"..."
会将双引号内的ASCII字符串转换为Bytes类型,字符串内支持十六进制和八进制转义。let b1 : Bytes = b"ASCII"
let b2 : Bytes = b"\xFF\o000" -
{ x }
的二义性问题修复
现在{ x }
会解析成只有一个x字段的struct,相当于{ x: x }
。对于这种容易造成混淆的写法,编译器会发出警告。
IDE更新
- 插件新增
moonbit.autoUpdate
的选项控制是否开启自动更新的提示 - 插件支持多后端开发
- 用户可以在vscode里选择不同的后端
- 非当前后端的代码对比度会变低