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

MoonBit 双周报 Vol.59:新增编译器常量支持,改进未使用警告,支持跨包函数导入...多个关键技术持续优化中!

2024-11-04

MoonBit更新

  • 增加了编译期常量的支持。常量的名字以大写字母开头,用语法 const C = ... 声明。常量的类型必须是内建的数字类型或 String。常量可以当作普通的值使用,也可以用于模式匹配。常量的值目前只能是字面量:
const MIN_INT = 0x1000_0000
const MAX_INT = 0x7fff_fffffn classify_int(x : Int) -> Unit {match x {MIN_INT => println("smallest int")MAX_INT => println("largest int")_ => println("other int")}
}fn main {classify_int(MIN_INT) // smallest intclassify_int(MAX_INT) // largest intclassify_int(42) // other int
}
  • 改进了 unused warning,增加了一系列功能:
  1. 增加了 enum 的参数未被使用的检测
enum E {// 现在编译器会提示 y 未被使用C(~x : Int, ~y : Int)
}fn f(x : E) -> Unit {match x {C(~x, ..) => println(x)}
}fn main {f(C(x=1, y=2))
}
  1. 增加了函数的默认参数的默认值未被使用的检测(默认关闭)
// f 是一个私有函数,而且每次调用它时,调用者都显式给 x 提供了值。
// 如果开启了警告 32(默认关闭),编译器会提示 x 的默认值未被使用
fn f(~x : Int = 0) -> Unit {println(x)
}fn main {f(x=1)
}
  • 支持从其他包中直接导入函数,直接导入的函数在使用时,不需要 @pkg. 的前缀,使用方式需要通过在 moon.pkg.json 配置文件中,通过 "value" 字段声明,比如下面这个示例:
{"import": [{ "path": "moonbitlang/pkg","alias": "pkg","value": ["foo", "bar"]},]
}

这里例子中,在 moon.pkg.json 中声明了从 moonbitlang/pkg 导入 foobar 两个函数,从而在使用这两个函数的时候可以直接对其进行调用,而不需要再写 @pkg.foo 或者 @pkg.bar

  • 现在 BigInt 类型在 JavaScript 后端下会编译到原生的 BigInt,对 BigInt 的 pattern matching 也会编译为高效的 switch 语句。

  • 实验性功能:现在 JavaScript 后端会根据 moon.pkg.json 中指定的导出函数配置来生成 .d.ts 文件,用于改进在 TypeScript/JavaScript 侧使用 MoonBit 生成的 JavaScript 代码的体验。(目前复杂类型的导出还在设计中,现阶段生成为 TS 的 any 类型)

IDE更新

  • block-line 标记支持

    增加对顶层注释///中的特殊标记block-line///|的支持。block-line用于分割顶层的代码块,使用它可以提升代码的可读性和维护性。通过在顶层代码块之间添加标记,IDE能够更清晰地展示代码结构。

在这里插入图片描述

通过moon fmt --block-style可以自动在每个顶层成员之前添加这样的标记。未来基于block-line的增量式代码解析和类型检查将进一步提高LSP的反应速度和可用性,提升开发效率。

  • test explorer 中支持 test coverage 可视化。

在这里插入图片描述

  • AI添加了/doc-pub命令来为公开函数生成文档。

  • 修复了/doc命令会覆盖pragmas的问题。

  • patch 功能现在能够验证生成出来的 test case 是否正确。

在这里插入图片描述

构建系统

  • moon check ⽀持指定包,指定后会 check 当前包和它的依赖;用法: moon check /path/to/pkg

MoonBit Markdown 库

  • 已开源 MoonBit Markdown 库,项目现位于 moonbit-community/cmark 仓库中,并已上传 mooncakes.io 以供社区下载和使用。
http://www.lryc.cn/news/480526.html

相关文章:

  • Linux相关概念和易错知识点(20)(dentry、分区、挂载)
  • 论 ONLYOFFICE:开源办公套件的深度探索
  • 兵马未动,粮草先行-InnoDB统计数据是如何收集的
  • oracle服务器意外宕机数据库启动失败故障处理记录
  • 学习笔记——MathType公式编号:右编号和随章节变化
  • 如何使用 SSH 连接并管理你的 WordPress 网站
  • 力扣60. 排列序列
  • Mac如何实现最简单的随时监测实时运行状态的方法
  • 时间管理应用(可复制源码)
  • SQL server 列转行
  • aws申请ssl证书的方法【该证书仅供aws】
  • Linux中目录配置标准的FHS
  • 目标检测YOLO实战应用案例100讲-基于深度学习的人眼视线检测
  • SpringCloud篇(微服务)
  • [每日一练]过去30天的用户活动
  • 华为2288HV2服务器安装BCLinux8U6无法显示完整安装界面的问题处理
  • 【python】OpenCV—findContours(4.6)
  • 【C++】——多态
  • Web前端开发--HTML语言
  • AI驱动的网络空间智能对抗;无人集群系统,多体协同算法创新和故障智能预警
  • 推荐一款SSD硬盘优化器:Auslogics SSD Optimizer Pro
  • k8s-service、endpoints、pod之间是怎么进行网络互通的
  • Go语言开发商城管理后台-GoFly框架商城插件已发布 需要Go开发商城的朋友可以来看看哦!
  • 【51单片机】UART串口通信原理 + 使用
  • 高性能分布式缓存Redis-高可用部署
  • 如何使用XSL-FO生成PDF格式的电子发票的技术博文示例
  • TDengine 签约山东港,赋能港口数字化转型
  • 基于YOLO11/v10/v8/v5深度学习的煤矿传送带异物检测系统设计与实现【python源码+Pyqt5界面+数据集+训练代码】
  • mysql-workbench 导入csv格式数据报错:Unhandled exception: Could not determine delimiter
  • 使用Python简单实现客户端界面