2024-10-21
MoonBit更新
-
MoonBit支持native后端
-
Wasm-gc 后端支持 Js-string-builtins proposal
当通过编译选项 -use-js-builtin-string
开启使用 Js-string-builtins 之后,Moonbit 面向 wasm-gc 后端时,会使用 JavaScript 中的字符串类型表示 MoonBit 中的字符串,这时生成的 wasm 可执行文件中将需要从 JavaScript 宿主中导入字符串类型相关的函数,这个过程可以通过在 JS 的胶水代码中,使用如下选项来实现:
// glue.js
// read wasm file
let bytes = read_file_to_bytes(module_name);
// compile the wasm module with js-string-builtin on
let module = new WebAssembly.Module(bytes, { builtins: ['js-string'], importedStringConstants: "moonbit:constant_strings" });
// instantiate the wasm module
let instance = new WebAssembly.Instance(module, spectest);
- 整数字面量重载支持 表示Byte类型
let b : Byte = 65
println(b) // b'\x41'
- 多行字符串插值和转义支持
考虑到多行字符串有时用于保存raw string,即字符串内可 能包含与转义序列冲突的字符序列。 MoonBit拓展了原先的多行字符串插值语法,用户可以通过开头的标记单独控制每行是否启用插值和转义序列:$|
表示启用插值和转义,#|
表示raw string。
let a = "string"
let b = 20
let c =
#| This is a multiline string
$| \ta is \{a},
$| \tb is \{b}
#| raw string \{not a interpolation}
println(c)
输出:
This is a multiline string
a is string,
b is 20
raw string \{not a interpolation}
- 带标签参数的语法调整
移除函数调用中f(~label=value)
和模式匹配中Constr(~label=pattern)
的语法,仅保留省略~
符号的形式:f(label=value)
和Constr(label=pattern)
。f(~value)
和Constr(~name)
不受影响。
IDE 更新
- 修复了字符串插值的高亮