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.mzph.cn/pingmian/59103.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

HTB:Shocker[WriteUP]

目录 连接至HTB服务器并启动靶机 1.How many TCP ports are listening on Shocker? 使用nmap对靶机TCP端口进行开放扫描 2.What is the name of the directory available on the webserver that is a standard name known for running scripts via the Common Gateway Int…

【算法赌场】SPFA算法

1.算法简介 SPFA 算法的全称是:Shortest Path Faster Algorithm,是西南交通大学 段凡丁 于 1994 年发表的论文中的名字。不过,段凡丁的证明是错误的,且在 Bellman-Ford 算法提出后不久(1957 年)已有队列优化…

YOLOv11改进策略【卷积层】| CGblock 内容引导网络 利用不同层次信息,提高多类别分类能力 (含二次创新)

一、本文介绍 本文记录的是利用CGNet中的CG block模块优化YOLOv11的目标检测网络模型。CG block通过局部特征提取器、周围环境提取器、联合特征提取器和全局环境提取器来提取局部特征、周围环境和全局环境信息,充分利用不同层次的信息。本文将其应用到v11中,并进行二次创新,…

并发编程(6)——future、promise、async,线程池

六、day6 今天学习如何使用std::future、std::async、std::promise。主要内容包括: 参考: https://llfc.club/category?catid225RaiVNI8pFDD5L4m807g7ZwmF#!aid/2Agk6II6SsiG8DwPawfXHsP4bUT https://github.com/Mq-b/ModernCpp-ConcurrentProgrammin…

力扣——另一个的子树(C语言)

1.题目: 给你两棵二叉树 root 和 subRoot 。检验 root 中是否包含和 subRoot 具有相同结构和节点值的子树。如果存在,返回 true ;否则,返回 false 。二叉树 tree 的一棵子树包括 tree 的某个节点和这个节点的所有后代节点。tree …

【C++】对左值引用右值引用的深入理解(右值引用与移动语义)

🌈 个人主页:谁在夜里看海. 🔥 个人专栏:《C系列》《Linux系列》 ⛰️ 天高地阔,欲往观之。 ​ 目录 前言:对引用的底层理解 一、左值与右值 提问:左值在左,右值在右?…

解决 ClickHouse 高可用集群中 VRID 冲突问题:基于 chproxy 和 keepalived 的实践分析

Part1背景描述 近期,我们部署了两套 ClickHouse 生产集群,分别位于同城的两个数据中心。这两套集群的数据保持一致,以便在一个数据中心发生故障时,能够迅速切换应用至另一个数据中心的 ClickHouse 实例,确保服务连续性…

B2C电商平台如何提升转化率 小程序商城如何做好运营

在竞争激烈的电商市场中,提升转化率是每个B2C电商平台的重要目标。转化率直接影响销售业绩和盈利能力,因此,了解如何优化用户体验、增强客户信任和提高购买动机是至关重要的。商淘云分享一些有效的策略,帮助B2C电商平台提升转化率…

慢SQL优化方向

口语化答案 为了优化慢 SQL 查询,我通常会从几个方面入手: 首先,我会检查查询语句本身。确保使用了合适的索引,避免全表扫描。比如,在WHERE、JOIN或ORDER BY子句中涉及的列上创建索引,这样可以大大提升查…

智能合约中的AI应用

在智能合约中引入人工智能(AI)技术可以提升自动化、智能化和数据处理能力,从而在多个领域中带来创新应用。智能合约是指运行在区块链网络上的自动执行程序,可以通过预先设定的规则进行交易或事件触发。将AI与智能合约结合可以使合…

RK3568平台开发系列讲解(字符设备驱动篇)Linux设备分类

🚀返回专栏总目录 文章目录 一、字符设备(是以字节为单位进行输入输出)二、块设备:块设备是以块为单位进行输入输出三、网络设备沉淀、分享、成长,让自己和他人都能有所收获!😄 一、字符设备(是以字节为单位进行输入输出) 串口、鼠标 字符设备没有固定的大小,也没…

STM32Fxx读写eeprom(AT24C16)

一.I2C 协议简介 I2C 通讯协议 (Inter - Integrated Circuit) 是由 Phiilps 公司开发的,由于它引脚少,硬件实现简单,可扩展性强,不需要 USART、CAN 等通讯协议的外部收发设备,现在被广泛地使用在系统内多个…

GitHub每日最火火火项目(11.4)

twentyhq/twenty:“twentyhq/twenty”致力于打造一个由社区驱动的现代版 Salesforce 替代品。在企业管理软件领域,Salesforce 一直占据着重要地位,但可能存在一些成本高、定制性有限等问题。这个项目使用 TypeScript 语言开发,旨在…

idea使用Translation插件实现翻译

1.打开idea,settings,选择plugins,搜索插件Translation,安装 2.选择翻译引擎 3.配置引擎,以有道词典为例 3.1 获取应用ID,应用秘钥 3.1.1 创建应用 点击进入有道智云控制台 3.1.2 复制ID和秘钥 3.2 idea设…

torch.from_numpy()和torch.tensor()区别

torch.from_numpy()和torch.tensor()都可以用于创建PyTorch张量,但它们有以下区别: 1. 数据共享与内存占用 torch.from_numpy():这个函数创建的PyTorch张量与原始numpy数组共享相同的数据内存。这意味着,如果修改了numpy数组中的…

【论文精读】LPT: Long-tailed prompt tuning for image classification

🌈 个人主页:十二月的猫-CSDN博客 🔥 系列专栏: 🏀论文精读_十二月的猫的博客-CSDN博客 💪🏻 十二月的寒冬阻挡不了春天的脚步,十二点的黑夜遮蔽不住黎明的曙光 目录 1. 摘要 2. …

【SQL Server】解决因使用 varchar 类型存储 Unicode 字符串导致的中文显示乱码问题

问题描述 导入 SQL 到 SQL Server 数据库后,存在部分列的中文显示异常的问题。 原因分析 观察发现显示异常的字段的数据类型是 varchar,而显示正常的字段的数据类型是 nvarchar。 而且,SQL 文件中所有字符串前面都带有 N 的前缀。 在 SQL 中…

dify实战案例分享-基于多模态模型的发票识别

1 什么是dify Dify是一个开源的大语言模型(LLM)应用开发平台,旨在简化和加速生成式AI应用的创建和部署。它结合了后端即服务(Backend as Service, BaaS)和LLMOps的理念,使开发者能够快速搭建生产级的AI应用…

电机控制储备知识 一 电机驱动本质分析以及磁相关的使用场景

一:电机旋转的原因 1.电机基本认识 (1)电机是一种动力装置,能够将电能转换为动能 电机拥有体积小 、动力足,控制精细灵活的特点 完整的电机系统:电机(减速器 传感器) 电机驱动器&a…

ubuntu交叉编译dbus库给arm平台使用

1.下载dbus库源码 https://www.freedesktop.org/wiki/Software/dbus 克隆源码: https://gitlab.freedesktop.org/dbus/dbus/-/tree/dbus-1.12?ref_type=heads 下载1.12.20版本: 指定pkgconfig环境变量: export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:$PWD/../expat-2.3.…