其他
Moonbit平台最新动态速递 Vol.07
-- 更新目录 --
1/ 允许用户自定义interface
2/ 增加对FFI中浮点数的支持
3/ 新增Bytes内置类型
4/ 修改局部函数逻辑
5/ 完善Moonbit代码高亮机制
6/ 优化代码分享交互
7/ IDE增加::语法的代码补齐
Moonbit 更新
interface
关键词来定义自定义接口,比如:interface Number {
op_add(Self, Self) -> Self
op_sub(Self, Self) -> Self
op_mul(Self, Self) -> Self
op_div(Self, Self) -> Self
op_neg(Self) -> Self
}
func f[X: Number](x: X, y: X) -> X {
x * x + (- y / x - y)
}
func init {
f(1, 2).print()
f(1.0, 2.0).print()
}
Number
的 interface,它可以用来表示实现了算术操作的类型。对于任何类型 X
,只要 X
实现了 Number
指定的五个算术操作,函数 f
就能在 X
上工作。用户可以对整数、浮点数,以及其他自定义的支持算术的类型,例如向量和矩阵,调用 f
。func sqrt(x: Float) -> Float = "math" "sqrt"
func get_pi() -> Float = "math" "get_pi"
let pi: Float = get_pi()
func init {
let x = sqrt(9.0)
x.print()
pi.print()
}
#!/usr/bin/env node
const spectest = {
math: {
sqrt: (x) => Math.sqrt(x),
get_pi: () => Math.PI
},
spectest: {
print_i32: (x) => console.log(String(x)),
print_f64: (x) => console.log(String(x)),
print_char: (x) => console.log(String.fromCharCode(x)),
},
};
(async () => {
WebAssembly.instantiateStreaming(fetch("foo.wasm"), spectest).then(
(obj) => {
obj.instance.exports._start()
}
)
})();
func init{
let bytes : Bytes = Bytes::make(3, 56)
var i = 0
bytes[1] = 57;
bytes[2] = 58;
let len = bytes.length()
"length of bytes: \(len)\n".print()
while i < 3 {
let b = bytes[i]
"byte \(i): \(b)\n".print();
i = i + 1
}
}
func init{
let ary = Array::make(4,3) // [3,3,3,3]
let str = String::make(4,'s') // "ssss"
}
func init {
fn add(a:Int) -> Int {
a + 1
}
fn add(b:String) {
b.print()
}
}
Moonbit IDE更新
1. 完善了Moonbit代码高亮机制,当前token的高亮对用户更友好
优化前:
优化后:
3. IDE增加::语法的自动补全
官方平台账号,欢迎扫码关注
Moonbit
知乎|@张宏波 / @Moonbit
Twitter丨@Moonbitlang
Bilibili丨张宏波的基础软件课程