当前位置: 首页 > 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 以供社区下载和使用。

相关文章:

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

2024-11-04 MoonBit更新 增加了编译期常量的支持。常量的名字以大写字母开头,用语法 const C ... 声明。常量的类型必须是内建的数字类型或 String。常量可以当作普通的值使用,也可以用于模式匹配。常量的值目前只能是字面量: const MIN_…...

Linux相关概念和易错知识点(20)(dentry、分区、挂载)

目录 1.dentry (1)路径缓存的原因 (2)dentry的结构 ①多叉树结构 ②file和dentry之间的联系 ③路径概念存在的意义 2.分区 (1)为什么要确认分区 (2)挂载 ①进入分区 ②被挂…...

论 ONLYOFFICE:开源办公套件的深度探索

公主请阅 引言第一部分:ONLYOFFICE 的历史背景1.1 开源软件的崛起1.2 ONLYOFFICE 的发展历程 第二部分:ONLYOFFICE 的核心功能2.1 文档处理2.2 电子表格2.3 演示文稿 第三部分:技术架构与兼容性3.1 技术架构3.2 兼容性 第四部分:部…...

兵马未动,粮草先行-InnoDB统计数据是如何收集的

我们前面介绍查询成本的时候经常用到一些统计数据,比如通过SHOW TABLE STATUS可以看到关于表的统计数据,通过SHOW INDEX可以看到关于索引的统计数据,那么这些统计数据是怎么来的呢?它们是以什么方式收集的呢?本章将聚焦…...

oracle服务器意外宕机数据库启动失败故障处理记录

客户反馈由于服务器意外宕机,导致数据库业务不能正常运行,经过一番努力后通过redo日志恢复成功! 故障描述:ORA-00600: 内部错误代码, 参数: [krctcr_4], [1179922061], [1179942042], [], [], [], [], [], [], [], [], [] 现将主要…...

学习笔记——MathType公式编号:右编号和随章节变化

1.如何在word文档中插入带有编号的公式? 步骤:(前提是已经安装mathtype) 2.MathType公式编号怎么随章节变化? 想要编号级数也随标题级数进行自动变化,则需要插入或修改文档的“分隔符” 步骤:...

如何使用 SSH 连接并管理你的 WordPress 网站

在当今数字化的世界里,网站的管理与维护至关重要。对于使用 WordPress 搭建网站的用户而言,掌握基本的 SSH(安全壳)命令能够极大地简化网站管理工作。本指南将向你介绍 SSH 的基本知识,并教你如何通过 SSH 连接和管理你…...

力扣60. 排列序列

描述 力扣60. 排列序列 给出集合 [1,2,3,…,n],其所有元素共有 n! 种排列。 按大小顺序列出所有排列情况,并一一标记,当 n 3 时, 所有排列如下: “123” “132” “213” “231” “312” “321” 给定 n 和 k,返回…...

Mac如何实现最简单的随时监测实时运行状态的方法

Mac book有着不同于Windows的设计逻辑与交互设计,使得Mac book有着非常棒的使用体验,但是在Mac电脑的使用时间过长时,电脑也会出现响应速度变慢或应用程序崩溃的情况,当发生的时候却不知道什么原因导致的,想要查询电脑…...

时间管理应用(可复制源码)

创建一个简单的时间管理应用程序&#xff0c;结合 Pomodoro 技术使用 HTML、CSS 和 JavaScript 1. HTML 创建一个基本的 HTML 文件 (index.html)&#xff1a; <!DOCTYPE html> <html lang"zh"> <head> <meta charset"UTF-8"&…...

SQL server 列转行

在 SQL Server 中&#xff0c;将列转换为行的操作通常被称为“透视”&#xff08;Pivot&#xff09;的逆操作&#xff0c;即“反透视”&#xff08;Unpivot&#xff09;。SQL Server 提供了 UNPIVOT 关键字来实现这一功能。假设你有一个表 EmployeeDetails&#xff0c;其中包含…...

aws申请ssl证书的方法【该证书仅供aws】

这里先声明&#xff0c;过程是对的&#xff0c;最终没有达到目的。 原本想着申请ssl证书替代&#xff0c;结果发现aws证书只能给自己的服务器用 但是整套申请证书以及下载&#xff0c;以及使用aws控制台的过程可以参考借鉴。 起因&#xff1a; 腾讯云的ssl证书越来越没法用了…...

Linux中目录配置标准的FHS

文件系统层次结构标准&#xff08;Filesystem Hierarchy Standard, FHS&#xff09;定义了Linux和其他类Unix操作系统中文件和目录的标准布局。FHS的目标是确保在不同的Linux发行版之间具有一致的文件系统结构&#xff0c;从而使软件能够在不同的系统上容易地安装和运行。 FHS…...

目标检测YOLO实战应用案例100讲-基于深度学习的人眼视线检测

目录 知识储备 视觉深度的测定 基本知识 视觉检测中的关键技术 单眼感知景深 内部摄像机距离的效果 Face ID 与3D传感技术 什么是Face ID? 3D传感技术原理 主动测距法 被动测距法 基于深度学习的人眼视线检测代码 数据集读取与预处理 卷积神经网络模型构建 模型…...

SpringCloud篇(微服务)

目录 一、认识微服务 1. 单体架构 2. 分布式架构 3. 微服务 3.1. 特点 3.2. 优点 3.3 缺点 二、微服务设计、拆分原则 1. AKF 拆分原则 2. Y轴&#xff08;功能&#xff09;关注应用中功能划分&#xff0c;基于不同的业务拆分 3. X轴&#xff08;水平扩展&#xff09…...

[每日一练]过去30天的用户活动

#该题目来源于力扣&#xff1a; 1142. 过去30天的用户活动 II - 力扣&#xff08;LeetCode&#xff09; Activity 表&#xff1a;------------------------ | Column Name | Type | ------------------------ | user_id | int | | session_id | int | …...

华为2288HV2服务器安装BCLinux8U6无法显示完整安装界面的问题处理

本文记录了华为2288HV2服务器安装BCLinux8U6无法显示完整安装界面&#xff0c;在安装过程中配置选择时&#xff0c;右侧安装按钮不可见&#xff0c;导致安装无法继续的问题处理过程。 一、问题现象 华为2288HV2服务器安装BCLinux8U6时无法显示完整的安装界面&#xff0c;问题…...

【python】OpenCV—findContours(4.6)

文章目录 1、功能描述2、代码实现3、效果展示4、完整代码5、涉及到的库函数cv2.inRange 6、参考 1、功能描述 给出一张仅含有手指的图片&#xff0c;判断图片中有多少根手指 2、代码实现 导入库函数&#xff0c;图像预处理 import numpy as np import cv2 as cv img cv.im…...

【C++】——多态

一.多态的概念 1.多态 多态(polymorphism)的概念&#xff1a;通俗的来说&#xff0c;就是多种形态。多态分为静态多态(编译时多态)和动态多态(运行时多态)&#xff0c;而我们讲的多态大部分都是动态多态。 静态多态主要就是我们前面了解过的函数模板和函数重载&#xff0c;它…...

Web前端开发--HTML语言

文章目录 前言1.介绍2.组成3.基本框架4.常见标签4.1双标签4.1.1.标题标签4.2.2段落标签4.1.3文本格式化标签4.1.4超链接标签4.1.5视频标签4.1.6 音频标签 4.2单标签4.2.1换行标签和水平线标签4.2.2 图像标签 5.表单控件结语 前言 生活中处处都有网站&#xff0c;无论你是学习爬…...

Swift 协议扩展精进之路:解决 CoreData 托管实体子类的类型不匹配问题(下)

概述 在 Swift 开发语言中&#xff0c;各位秃头小码农们可以充分利用语法本身所带来的便利去劈荆斩棘。我们还可以恣意利用泛型、协议关联类型和协议扩展来进一步简化和优化我们复杂的代码需求。 不过&#xff0c;在涉及到多个子类派生于基类进行多态模拟的场景下&#xff0c;…...

相机从app启动流程

一、流程框架图 二、具体流程分析 1、得到cameralist和对应的静态信息 目录如下: 重点代码分析: 启动相机前,先要通过getCameraIdList获取camera的个数以及id,然后可以通过getCameraCharacteristics获取对应id camera的capabilities(静态信息)进行一些openCamera前的…...

mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包

文章目录 现象&#xff1a;mysql已经安装&#xff0c;但是通过rpm -q 没有找mysql相关的已安装包遇到 rpm 命令找不到已经安装的 MySQL 包时&#xff0c;可能是因为以下几个原因&#xff1a;1.MySQL 不是通过 RPM 包安装的2.RPM 数据库损坏3.使用了不同的包名或路径4.使用其他包…...

优选算法第十二讲:队列 + 宽搜 优先级队列

优选算法第十二讲&#xff1a;队列 宽搜 && 优先级队列 1.N叉树的层序遍历2.二叉树的锯齿型层序遍历3.二叉树最大宽度4.在每个树行中找最大值5.优先级队列 -- 最后一块石头的重量6.数据流中的第K大元素7.前K个高频单词8.数据流的中位数 1.N叉树的层序遍历 2.二叉树的锯…...

AI书签管理工具开发全记录(十九):嵌入资源处理

1.前言 &#x1f4dd; 在上一篇文章中&#xff0c;我们完成了书签的导入导出功能。本篇文章我们研究如何处理嵌入资源&#xff0c;方便后续将资源打包到一个可执行文件中。 2.embed介绍 &#x1f3af; Go 1.16 引入了革命性的 embed 包&#xff0c;彻底改变了静态资源管理的…...

Python ROS2【机器人中间件框架】 简介

销量过万TEEIS德国护膝夏天用薄款 优惠券冠生园 百花蜂蜜428g 挤压瓶纯蜂蜜巨奇严选 鞋子除臭剂360ml 多芬身体磨砂膏280g健70%-75%酒精消毒棉片湿巾1418cm 80片/袋3袋大包清洁食品用消毒 优惠券AIMORNY52朵红玫瑰永生香皂花同城配送非鲜花七夕情人节生日礼物送女友 热卖妙洁棉…...

视觉slam十四讲实践部分记录——ch2、ch3

ch2 一、使用g++编译.cpp为可执行文件并运行(P30) g++ helloSLAM.cpp ./a.out运行 二、使用cmake编译 mkdir build cd build cmake .. makeCMakeCache.txt 文件仍然指向旧的目录。这表明在源代码目录中可能还存在旧的 CMakeCache.txt 文件,或者在构建过程中仍然引用了旧的路…...

Java毕业设计:WML信息查询与后端信息发布系统开发

JAVAWML信息查询与后端信息发布系统实现 一、系统概述 本系统基于Java和WML(无线标记语言)技术开发&#xff0c;实现了移动设备上的信息查询与后端信息发布功能。系统采用B/S架构&#xff0c;服务器端使用Java Servlet处理请求&#xff0c;数据库采用MySQL存储信息&#xff0…...

C#中的CLR属性、依赖属性与附加属性

CLR属性的主要特征 封装性&#xff1a; 隐藏字段的实现细节 提供对字段的受控访问 访问控制&#xff1a; 可单独设置get/set访问器的可见性 可创建只读或只写属性 计算属性&#xff1a; 可以在getter中执行计算逻辑 不需要直接对应一个字段 验证逻辑&#xff1a; 可以…...

【Elasticsearch】Elasticsearch 在大数据生态圈的地位 实践经验

Elasticsearch 在大数据生态圈的地位 & 实践经验 1.Elasticsearch 的优势1.1 Elasticsearch 解决的核心问题1.1.1 传统方案的短板1.1.2 Elasticsearch 的解决方案 1.2 与大数据组件的对比优势1.3 关键优势技术支撑1.4 Elasticsearch 的竞品1.4.1 全文搜索领域1.4.2 日志分析…...