当前位置: 首页 > news >正文

双周报Vol.69: C FFI 支持 borrow、新增.mbt.md测试与调试、WASM 后端支持extern type..

更新目录

· WASM 后端支持将 extern type T 存储到数组等数据结构中
· C FFI 支持 borrow
· type 和 trait支持了 #deprecated attribute
‍· FFI 的 extern 函数的声明添加了后端一致性的检查
· 新增了对 .mbt.md 的测试和调试支持
· moon info --package 支持模糊匹配包名

MoonBit 更新

1、 WASM 后端支持 extern type T 存储到数组等数据结构中

在 FFI 边界(导入/导出函数的签名)上,extern type T 依然会被编译成 WASM 的 externref 类型。2、 C FFI 支持 borrow现在,你可以通过在extern "c"的函数上方指定#borrow(args, ...) 来修改 C FFI 对参数的生命周期管理方式,其中args是 C FFI 的参数名字的一个子集。

默认情况下,C FFI 需要负责把参数释放掉,这意味着,绑定 C FFI 时,往往需要写一个辅助函数来释放掉参数:

fn open(path : Bytes, flags : Int, mode : Int) -> Int = "open_wrapper"
int open_wrapper(moonbit_bytes_t path, int flags, int mode) {
  int rc = open(path, flags, mode);
  moonbit_decref(path)
  return rc;
}

使用borrow attribute,我们可以指示 MoonBit 对 C FFI 函数调用不生成引用计数指令,从而不用再写辅助函数,可以直接绑定 C 库中的函数:

#borrow(path)
fn open(path : Bytes, flags : Int, mode : Int) -> Int = "open"

由于 #borrow 标记,MoonBit 会自动在调用完 open 后释放掉 path3、type&trait支持#deprecated attribute我们下次发布将移除旧的 pragmas 机制,建议使用 attribute 替代:

/// the @alert pragmas is deprecated
/// @alert deprecated "message"
fn f() -> Unit {...}

/// use attribute #deprecated instead
#deprecated("message")
fn f() -> Unit {...}

4、 FFI 的 extern 函数声明添加后端一致性检查例如下列函数会在非 Native 后端构建的时候报错。

extern "c" fn open(path : Bytes, flags : Int, mode : Int) -> Int = "open"

工具链更新

1、从本周开始,工具链的发布从周一改到周四。

2、修复了 test explorer 的 bug,并新增了对 .mbt.md 的测试和调试支持:

可通过开启以下设置来允许在 Markdown 文件中设置断点:

Settings > Debug: Allow Breakpoint Everywhere

3、moon info --package 支持模糊匹配包名。

相关文章:

  • Python----计算机视觉处理(Opencv:道路检测完整版:透视变换,提取车道线,车道线拟合,车道线显示,)
  • 解决:Fontconfig head is null, check your fonts or fonts configurat
  • Java设计模式之外观、享元、组合模式《三国争霸:模式风云录》
  • Spring MVC 框架 的核心概念、组件关系及流程的详细说明,并附表格总结
  • 【探商宝】 Llama 4--技术突破与争议并存的开源多模态
  • 【机器学习】ROC 曲线与 PR 曲线
  • Python 3.13.2 安装教程(附安装包)轻松开启编程之旅
  • c# 系列pdf转图片 各种处理2--net3.1到net8
  • OpenCV鼠标事件
  • TDengine 与 taosAdapter 的结合(二)
  • Elasticsearch8.x集成SpringBoot3.x
  • AI Agent开发大全第十九课-神经网络入门 (Tensorflow)
  • Oracle数据库数据编程SQL<8.1 文本编辑器Notepad++和UltraEdit(UE)对比>
  • UE5 蓝图里的反射
  • 进程内存分布--之smaps呈现memory-layout.cpp内存分布
  • RK3568下GPIO模拟串口
  • 详解数据结构线性表 c++实现
  • 算法进阶指南 货仓选址
  • redis导入成功,缺不显示数据
  • 华为ensp中路由器IPSec VPN原理及配置命令(超详解)
  • 广东茂名高州市山体滑坡已致3死1失联,搜救仍在继续
  • 央媒:设施老化、应急预案套模板,养老机构消防隐患亟待排查
  • 习近平向第三十四届阿拉伯国家联盟首脑理事会会议致贺信
  • 新时代,新方志:2025上海地方志论坛暨理论研讨会举办
  • 101岁陕西省军区原司令员冀廷璧逝世,曾参加百团大战
  • 机器人为啥热衷“搞体育”,经济日报:是向加速融入日常生活发起的冲锋