MoonBit 周报 Vol.53:新增高级循环语法、引入字符串插值、MoonBit AI 支持代码解释!

weekly 2024-08-05

MoonBit更新

  • 添加了基于 IterIter2 类型的 for .. in 循环支持:
fn main {for x in [ 1, 2, 3 ] {println(x)}for k, v in { "x": 1, "y": 2 } {println("\{k} => \{v}")}
}

forin 之间可以使用 1~2 个变量来绑定 Iter 中的元素。有一个变量的 for x in expr1 循环会遍历 expr1.iter() : Iter[_],有两个变量的 for x, y in expr2 循环会遍历 expr2.iter2() : Iter2[_, _] 中的元素。可以使用下划线代替变量来忽略元素,但不能在 forin 之间使用模式匹配。

for .. in 循环的循环体中,可以使用 return/break/raise 等控制流:

test "for/in" {// 数组的 `iter2` 方法会遍历 index + 元素for i, x in [ 1, 2, 3 ] {assert_eq!(i + 1, x)}
}
  • 引入新的字符串插值语法:\{},旧的语法\()已弃用,允许更复杂的表达式直接嵌入字符串。
    未来会放松字符串插值内的语法限制,例如支持\{1 + 2}\{x.f(y)}
"hello, \(name)!" // warning: deprecated
"hello, \{name}!" // new syntax
  • 数值处理拓展:增加了新的内建类型BigInt,用于处理超出普通整数范围的大数值。
// BigInt 字面量以 N 结尾
let num = 100000000N // 与 Int 字面量类似,数字间允许下划线。同样支持 16 进制、8 进制、2 进制表示
let n2 = 0xFFFFFFFFN
let n3 = 0o77777777N
let n4 = 0b1111111100000000N
let n5 = 1234_4567_91011N// 当明确是一个 BigInt 类型时,字面量不用加 N 后缀
let n6 : BigInt = 1000000000000000000 //模式匹配也支持`BigInt`:match 10N {1N => println(1)10N => println(10)100 => println(100)
}
  • 支持了 enum 形式的错误类型声明,比如 Json 包中的错误类型可以如下声明:
pub type! ParseError {InvalidChar(Position, Char)InvalidEofInvalidNumber(Position, String)InvalidIdentEscape(Position)
} derive(Eq)

此外,labeled argumentmutable argument 也可以在 enum 形式的错误类型中使用,使用方式与普通的 enum 类型一致,比如:

type! Error1 {AB(Int, ~x: String)C(mut ~x: String, Char, ~y: Bool)
} derive(Show)fn f() -> Unit!Error1 {raise Error1::C('x', x="error2", y=false)
}fn g() -> Unit!Error1 {try f!() {Error1::C(_) as c => {c.x = "Rethrow Error2::C"raise c}e => raise e}
}fn main {println(g?()) // Err(C(x="Rethrow Error2::C", 'x', y=false))
}
  • 添加了 catch! 语法,用于在 error handler 中将未处理的错误重新抛出,以简化错误处理,比如上面例子中的函数 g 可以重写为:
fn g() -> Unit!Error1 {try f!() catch! {Error1::C(_) as c => {c.x = "Rethrow Error2::C"raise c}}
}
  • 移除了 JavaScript 后端生成的代码对 TextDecoder API 的依赖。随着 Node.js 对 TextDecoder 的支持变得更完善,我们未来仍然可能会考虑在项目中引入和使用 TextDecoder

IDE 更新

  • 修复在 web 版 vscode 插件上调试时无法加载核心库 core 中的源码问题,现在 MoonBit IDE上的调试功能已恢复可用。

  • IDE 支持在模式匹配中根据类型对构造器进行补全:

match (x : Option[Int]) {// ^^^^ 这里会补全 `None` 和 `Some`
}

标准库更新

  • 新增 Iter2 类型,用于遍历有两个元素的集合,例如 Map,或是带着 index 遍历数组:
fn main {let map = { "x": 1, "y": 2 }map.iter2().each(fn (k, v) {println("\{k} => \{v}")})
}

Iter[(X, Y)] 相比,Iter2[X, Y] 有更好的性能,并且有 for .. in 循环的原生支持。

  • @json.JsonValue 类型被移动到 @builtin 包中,并重命名为 Json@json.JsonValue 现在是以 Json 的一个类型别名,所以这一改动是向后兼容的。

  • @builtin 中添加了 ToJson 接口,用于表示可以被转换为 Json 的类型。

构建系统更新

  • moon check|build|test 添加 -C/--directory 命令,与 --source-dir 参数等价,用于指定 MoonBit 项目的根目录,也即 moon.mod.json 所在目录。

  • 修改 moon.mod.json 中的 root-dirsource,这个字段用于指定模块的源码目录,source 字段的值也可以是多层目录,但是必须为 moon.mod.json 所在目录的子目录,例如:“source”: “a/b/c”。

    引入该字段的目的是因为 MoonBit 模块中的包名与文件路径相关。例如,如果当前模块名为 moonbitlang/example,而其中一个包所在目录为 lib/moon.pkg.json,那么在导入该包时,需要写包的全名为 moonbitlang/example/lib。有时,为了更好地组织项目结构,我们想把源码放在 src 目录下,例如src/lib/moon.pkg.json,这时需要使用 moonbitlang/example/src/lib 导入该包。但一般来说我们并不希望 src 出现在包的路径中,此时可以通过指定"source": "src"来忽略src这层目录,便可仍然使用 moonbitlang/example/lib 导入该包。

工具链更新

  • MoonBit AI 增加explain新功能:点击 MoonBit 图标,选择 /explain 来解释代码。代码的解释会出现在右侧。代码生成完以后,可以通过点击👍/👎给我们关于生成质量上的反馈。

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/399469.html

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

相关文章

国产的Kimi,很牛逼!

国内大模型现在百花齐放,给大家推荐一下最近我一直在用的大模型工具:kimi kimi很强大,关键还免费(这一点太良心了!) 在 长文本和文件处理 方面,kimi做的非常好。 不仅如此,kimi 里…

html+css网页制作 电商品优购5个页面(无js)

htmlcss网页制作 电商品优购5个页面(无js) 网页作品代码简单,可使用任意HTML编辑软件(如:Dreamweaver、HBuilder、Vscode 、Sublime 、Webstorm、Text 、Notepad 等任意html编辑软件进行运行及修改编辑等操作&#xf…

使用Sanic和SSE实现实时股票行情推送

💝💝💝欢迎莅临我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:「storm…

电机学习-基础知识

文章目录 1 基本物理概念1.1 左手定则1.2 安培定则1.3 感应电动势 2 电机简单分类2.1 直流有刷电机2.2 步进电机2.2.1 步进电机的驱动原理1.相与线2.极性3.步进电机的驱动 2.3 无刷电机2.3.1 充磁方式2.3.2正弦波电动势与梯型电动势 3 编码器3.1 霍尔编码器3.2 光电编码器3.3 增…

软件设计之MySQL(1)

软件设计之MySQL(1) 此篇应在JavaSE之后进行学习: 路线图推荐: 【Java学习路线-极速版】【Java架构师技术图谱】 Navicat可以在软件管家下载 使用navicat连接mysql数据库创建数据库、表、转储sql文件,导入sql数据 学习内容: 数据库概述表、…

NOI Linux 2.0 的安装说明以及使用指南

关于 NOI Linux 2.0 NOI Linux 是 NOI 竞赛委员会基于 Ubuntu 操作系统开发的一款 Linux 桌面发行版,是一套免费的、专门为信息学奥林匹克竞赛选手设计的操作系统,是 NOI 系列赛事指定操作系统,适用于常见笔记本电脑和桌面电脑。 新建虚拟机…

卷大模型,还是卷应用?一次看明白

自从ChatGPT横空出世以来,中美之间围绕大模型的科技竞争愈演愈烈,也渐渐分化出两条差异化发展路线:一派侧重将AI能力投入应用场景,另一派则侧重让基础模型能力更强。于是,“卷应用”还是“卷大模型”成为中国许多新入场…

maven项目中pom.xml文件内容详解

一、什么是pom.xml文件? POM是项目对象模型(Project Object Model)的简称,它是Maven项目中的文件,XML格式,名称为 pom.xml,他是一个有关于maven操作的配置文件。每一个maven项目在创建时都会自动…

67、ceph

一、ceph 1.1、ceph概念 ceph是一个开源的,用c语言写的分布式的存储系统。存储文件数据。 /dev/sdb fdisk /dev/sdb gdisk /dev/sdb lvm 逻辑卷 可以扩容 raid 磁盘阵列 高可用 基于物理意义上的单机的存储系统。 分布式有多台物理磁盘组成一个集群&…

95% 向量资源节省,火山引擎云搜索 RAG 技术体系演进

采访嘉宾 | 火山引擎云搜索团队 鲁蕴铖、李杰辉、余炜强 编辑 | Tina InfoQ 2023 年,大模型惊艳了世界。2024 年,RAG 技术如日中天。 RAG 使得大模型能够在不更新模型参数的情况下,获得必要的上下文信息,从而减少大模型的幻觉。…

【科研笔记】中国知网高级检索与专业检索针对同一检索内容返回的结果对比

中国知网高级检索与专业检索针对同一检索内容返回的结果对比 文献检索文献差集文献检索 预检索“复杂网络”和“事故”相关主题的文献,在高级检索界面中搜寻的结果如下,期刊选择为中文核心及以上,共检索138条文献 然后以专业检索,构建检索式“ (SU=‘事故’) AND (SU=‘复…

前端学习笔记-JS篇-02

运算符 赋值运算符 对变量进行赋值的运算符。 已经学过的赋值运算符:【将等号右边的值赋予给左边,要求左边必须是一个容器】 其他赋值运算符: - * / % 原始写法和简化写法【其实就是java基础】 一元运算符 众多的JavaScript 的运…

BioMistral 7B: 生物医学领域的开源多语言AI模型

人工智能咨询培训老师叶梓 转载标明出处 尽管目前有许多开源的针对健康领域的大模型可供使用,但现有模型在数据隐私风险、模型性能以及多语言支持方面的局限性,限制了它们在医疗领域的应用。为了克服这些限制,研究者们提出了BioMistral&#…

【并查集、树的直径】P2195 HXY造公园 题解

题意 P2195 codeforces 455c,两道一样的题 给出一个由 n n n 个点, m m m 条边组成的森林,有 q q q 组询问,每次询问有以下两种情况 输入 o p 1 op 1 op1 时:给出点 x x x,输出点 x x x 所在的树的直径。 输…

Linux--C语言之分支结构

文章目录 一、分支结构(一)概念(二)条件构建1.关系表达式:2.逻辑表达式:3.常量/变量:值是否非0,取值(0|1) (三)选择结构的形式1.单分支…

idea项目注册在nacos错误:Cannot determine local hostname

一开始想把项目注册在nacos上,启动报错是这样的,而且yml文件也不生效,因为默认端口是8080,我在yml文件中写了8081没用,正好nacos的配置也在yml文件中。各种百度,各种依赖添加删除,反复启动没用 …

振德医疗选择泛微千里聆RPA,助力电商、人事业务流程自动化

振德医疗用品股份有限公司成立于1994年,中国A股上市公司,是医用敷料和感控防护产品主要的供应商之一。 (图片素材来自振德医疗官网) 振德医疗的业务在线上线下齐发力。目前拥有5个国内生产基地,3个海外工厂&#xff0…

SQL Server 2022的游标

《SQL Server 2022从入门到精通(视频教学超值版)》图书介绍-CSDN博客 《SQL Server 2022从入门到精通(视频教学超值版)(数据库技术丛书)》(王英英)【摘要 书评 试读】- 京东图书 (jd.com) 游标是SQL Serv…

分布式知识总结(一致性Hash算法)

文章收录在网站:http://hardyfish.top/ 文章收录在网站:http://hardyfish.top/ 文章收录在网站:http://hardyfish.top/ 文章收录在网站:http://hardyfish.top/ 一致性Hash算法 假如有三台服务器编号node0、node1、node2&…

【系统维护】Dll文件修复工具使用教程,Windows系统必备!

一、dll文件是什么 dll文件是是一种Windows操作系统下的可执行文件格式,包含可由多个程序同时使用的代码和数据的文件,它的主要作用是实现代码和数据的共享,从而节省内存和硬盘空间,并提高程序的性能和可维护性 二、如何解决dll文…