查看原文
其他

Moonbit平台最新动态速递 Vol.07

Moonbit运营组 MoonBit
2024-08-22



-- 更新目录 --


1/ 允许用户自定义interface

2/ 增加对FFI中浮点数的支持

3/ 新增Bytes内置类型

4/ 修改局部函数逻辑

5/ 完善Moonbit代码高亮机制

6/ 优化代码分享交互

7/ IDE增加::语法的代码补齐



01
Moonbit 更新



1. 允许用户自定义interface

Moonbit允许用户自定义interface,通过 interface 关键词来定义自定义接口,比如:
interface Number {
  op_add(SelfSelf) -> Self
  op_sub(SelfSelf) -> Self
  op_mul(SelfSelf) -> Self
  op_div(SelfSelf) -> Self
  op_neg(Self) -> Self
}

func f[X: Number](x: X, y: X) -> X {
  x * x + (- y / x - y)
}

func init {
  f(12).print()
  f(1.02.0).print()
}

上面的代码片段定义了一个叫作 Number 的 interface,它可以用来表示实现了算术操作的类型。对于任何类型 X ,只要 X 实现了 Number 指定的五个算术操作,函数 f 就能在 X 上工作。用户可以对整数、浮点数,以及其他自定义的支持算术的类型,例如向量和矩阵,调用 f 。

2. Moonbit 增加对FFI中浮点数(float)支持


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()
    }
  )
})();

3. 新增Bytes内置类型

Moonbit 增加 Bytes 内置类型,当前支持的方法如下:
1)`make`: 创建 Bytes
2)`length`: 获取Bytes长度
3)通过方括号+下标数字读写Bytes内容

func init{
  let bytes : Bytes = Bytes::make(356)
  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
  }
}

4. String::make以及Array::make接口更新

Moonbit移除了原先的string_make, array_make接口,迁移到新的T::method风格,比如:

func init{
  let ary = Array::make(4,3// [3,3,3,3]
  let str = String::make(4,'s'// "ssss"
}


5. 局部函数命名逻辑修改

Moonbit修改了局部函数逻辑,现在不允许局部函数重名。

比如这段代码会提示函数已经被定义:
func init {
  fn add(a:Int) -> Int {
    a + 1
  }
  
  fn add(b:String) {
    b.print()
  }
}



02
Moonbit IDE更新



1. 完善了Moonbit代码高亮机制,当前token的高亮对用户更友好


优化前:


优化后:


2. 优化代码分享交互

编辑器右上角增加分享icon:


3. IDE增加::语法的自动补全


官方平台账号,欢迎扫码关注


Moonbit


知乎|@张宏波 / @Moonbit

Twitter丨@Moonbitlang

Bilibili丨张宏波的基础软件课程

继续滑动看下一个
MoonBit
向上滑动看下一个

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存