MoonBit 新增 += 运算符,引入 super trait 和 List 字面量机制

MoonBit更新

1. 添加了 += 系列语句

包括+=、-=、*=、/=,支持运算符重载:

fn init {let array = [1,2,3,4]array[2] *= 10println(array) // [1, 2, 30, 4]
}fn init {let mut a = 1a += 20println(a) // 21
}
struct Foo {data : Array[Int]
} derive(Debug)fn op_set(self : Foo, index : Int, value : Int) {self.data[index] = value
}fn op_get(self : Foo, index : Int) -> Int {self.data[index]
}fn init {let foo : Foo = { data: [0,0,0,0] }foo[2] -= 10debug(foo) // {data: [0, 0, -10, 0]}
}

2. 现在 toplevel 如果没有顶格会报错

如下图所示:
在这里插入图片描述

3. 引入 super-trait 机制

Super-trait 通过如下的语法指定:

trait A {// ...
}trait B : A { // A is a super trait of B, B is a sub trait of A// ...
}

可以通过 + 来指定多个 Super-trait,表示该 sub-trait 依赖这几个 super-trait:

// ...trait B: A + Compare + Debug {//       ^~~ B is a sub-trait of A *and* Compare *and* Debug// ...
}

在使用上,可以将 sub-trait 当作 super trait 使用,但是不能够将 super-trait 当作 sub-trait 使用。目前Compare是Eq的 sub-trait,意味着实现了Compare的类型能够在要求Eq的情况下使用,所以以这两个代码为例:

trait Eq {op_equal(Self, Self) -> Bool
}trait Compare: Eq {compare(Self, Self) -> Int
}fn eq[X: Compare](this: X, that: X) -> Bool {this == that
}
fn compare[X: Eq](this: X, that: X) -> Int {this.compare(that)//   ^~~~~~~ Type X has no method compare.
}

4. 添加T::[x, y, …]的语法

这种语法结构会被解糖成T::from_array([x, y, …])的形式。这种语法使得列表等线性数据结构的初始化更加易读。

enum List[X] {NilCons(X, List[X])
} derive(Show, Debug)fn List::from_array[X](array: Array[X]) -> List[X] {let mut list = List::Nilfor i = array.length() - 1; i >= 0; i = i - 1 {list = Cons(array[i], list)}list
}fn main {println(List::[1, 2, 3])
}

输出:

Cons(1, Cons(2, Cons(3, Nil)))

5. 调整自动生成的 Show 的实现的逻辑

现在它会调用 Debug 作为实现。这意味着,现在 derive(Show) 之前需要先 derive 或自行实现 Debug。Debug 的输出是 MoonBit 语法下合法的值,而 Show 可以用于输出更美观的内容。这修复了之前 derive(Show) 在有 String 的结构体上的错误行为:

struct T {x: String
} derive(Show, Debug)fn init {println({ x: "1, y: 2" })// 之前: {x: 1, y: 2}// 现在: {x: "1, y: 2"}
}

6. 目前已不支持fn hello() = "xx"的语法

fn hello() = "xx"的语法目前已经不适用了。我们建议用户这样写:

extern "wasm" fn hello () =#| ...

现在 inline stubs 只支持 wasmgc,不支持 wasm1。

7. 现在丢弃非 Unit 的值会直接报错,如果需要丢弃需要显式使用 ignore。

fn f() -> Int {ignore(3)   // Ok.3 |> ignore // Ok.3           // Err: Expr Type Mismatch: has type Int, wanted Unit3           // Ok, as this value is returned, not dropped
}

8. 移除了test作为标识符使用的支持

IDE更新

1. 提供更好的线上 IDE Markdown 支持

  • 可以在线上 IDE 中使用 Marp 插件来查看之前现代编程思想课的内容了。

!https://pic1.zhimg.com/80/v2-0c814cf182fbab5895d533399bc2b5f3_1440w.png?source=d16d100b

  • Markdown 中内嵌的 MoonBit 的代码块支持语法高亮。

!https://picx.zhimg.com/80/v2-83f09ea6ea09ee273ed5e984d7783050_1440w.png?source=d16d100b

  • 针对内嵌有 MoonBit 代码的 Markdown 文本开发了语法检查的程序,开源在:GitHub链接。使用方法可以参考项目的 README。

构建系统更新

1. 添加 main 函数的支持

  • main只能写在main包(is_main: true的包)里
  • main 包中应当有且仅有一个main 函数
  • main函数的执行顺序在所有init函数之后
  • main包中不能有test

2. 目前可以通过 moon upgrade 升级 MoonBit 工具链的版本了。

p.s. 但是在使用之前,必须再用安装脚本安装一次:-)

3. moon check|build|run 现在默认链接到 moonbitlang/core。

立即开启 Moonbit 语言新体验

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

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

相关文章

[C语言]——操作符

目录 一.算术操作符:、-、*、/、% 1. 和 - 2.* 3./ 4.% 二.赋值操作符:和复合赋值 1.连续赋值 2.复合赋值符 三.单目操作符:、--、、- 1.和-- 1.1前置 1.2后置 1.3前置-- 2. 和 - 四.强制类型转换 一.算术操作符:…

html邮件基本使用方法?如何发送HTML邮件?

html邮件是什么意思?如何在HTML中创建电子邮件链接? HTML邮件以其丰富的格式和视觉效果,让我们的邮件内容更加生动和吸引人。那么,HTML邮件的基本使用方法是什么呢?我们又该如何发送HTML邮件呢?下面&#…

LSTM 长短期记忆递归神经网络

1、神经网络简介 1.1 神经网络起源 人工神经网络(Aritificial Neural Networks, ANN)是一种仿生的网络结构,起源于对人类大脑的研究。人工神经网络(Aritificial Neural Networks)也常被简称为神经网络(Ne…

CMMI的成熟度分为五个等级

CMMI(Capability Maturity Model Integration)即能力成熟度模型集成,它将软件开发过程的成熟度分为五个等级: 1.初始级(Level 1, Initial): 在这个级别,组织的项目管理过程通常是临…

展览展会媒体传播的必要性,有哪些宣传方式?

传媒如春雨,润物细无声,大家好,我是51媒体网胡老师。 展览展会媒体传播的必要性在于扩大影响力、吸引观众和促进行业交流。通过媒体宣传,可以快速传递展会信息,提升品牌知名度,吸引更多潜在参展商和观众。…

算法| 栈 队列

用栈实现队列 用队列实现栈 有效的括号 删除字符串中的所有相邻重复项 逆波兰表达式求值 前 K 个高频元素 232. 用栈实现队列 var MyQueue function () {this.stackIn []this.stackOut [] };/** * param {number} x* return {void}*/ MyQueue.prototype.push functi…

【GIS人必看】如何手动更改ArcGIS矢量文件的编码方式

前面一篇文章,给大家免费免费开源了一款ArcGIS超级工具---一键扩展矢量文件字段名长度脚本工具 工具的具体获取及使用方法请点击链接:【ArcPy工具】【GIS人必备超级工具】【免费开源】ArcGIS超级工具-一键扩展矢量文件字段名长度-CSDN博客 其实工…

品牌有窜货可以这样治理

窜货是品牌渠道中的常见问题,也是品牌发展中必然要面对的,只要品牌没有做好前期的出货管控,窜货会非常容易出现,对区域的销售保护制度是很普遍的,经销商利用区域保护策略,钻品牌漏洞,进行窜货销…

windows 使用ffmpeg .a静态库:读取Wav音频并保存PCM

ffmpeg读取Wav音频并保存PCM&#xff08;源代码保存成 c 文件&#xff09;&#xff1a; // test_ffmpeg.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。 ////#include <iostream>#include <libavcodec/avcodec.h> #include <libavform…

【MySQL使用】show processlist 命令详解

show processlist 命令详解 一、命令含义二、命令返回参数三、Command值解释四、State值解释五、参考资料 一、命令含义 对于一个MySQL连接&#xff0c;或者说一个线程&#xff0c;任何时刻都有一个状态&#xff0c;该状态表示了MySQL当前正在做什么。SHOW PROCESSLIST 命令的…

SpringBoot接口防抖(防重复提交)的一些实现方案

前言 啥是防抖 思路解析 分布式部署下如何做接口防抖&#xff1f; 具体实现 请求锁 唯一key生成 重复提交判断 前言 作为一名老码农&#xff0c;在开发后端Java业务系统&#xff0c;包括各种管理后台和小程序等。在这些项目中&#xff0c;我设计过单/多租户体系系统&a…

在Linux中使用docker【上】(docker、nvidia-docker安装)

在Linux中使用docker【上】&#xff08;docker、nvidia-docker安装&#xff09; 一、Docker介绍二、在Linux中使用Docker的意义2.1 轻量级与资源高效2.2 快速部署与版本控制2.3 隔离与安全2.4 简化运维2.5 跨平台兼容2.6 持续集成与持续部署&#xff08;CI/CD&#xff09; 三、…

软考中级系统集成必备100题(41-60)真题精炼

文章目录 41.控制进度采用的工具和技术有哪些&#xff1f;42.简述项目成本管理的过程&#xff1f;43.简述项目成本控制点主要内容&#xff1f;44.什么是应急储备和管理储备&#xff1f;45.简述项目质量管理包括哪些过程&#xff1f;46.请简述对质量与等级的认识&#xff1f;47.…

springboot+bootstrap+jsp校园二手书交易平台mlg86

考虑到实际生活中在校园二手书交易系统方面的需要以及对该系统认真的分析,将系统权限按管理员和学生这两类涉及用户划分。 (a) 管理员&#xff1b;管理员使用本系统涉到的功能主要有个人中心、学生管理、图书类型管理、二手图书管理、通知公告管理、管理员管理、用户留言、系统…

Linux操作系统已成为技术领域的一块重要基石

在数字时代&#xff0c;Linux操作系统已成为技术领域的一块重要基石&#xff0c;无论是开发者、系统管理员还是普通技术爱好者&#xff0c;Linux都扮演着不可或缺的角色。本文旨在为读者提供一个关于Linux常用命令的全面概览&#xff0c;帮助大家更高效地使用Linux系统。 Linu…

Windows Docker 部署 MySQL

部署 MySQL 打开 Docker Desktop&#xff0c;切换到 Linux 容器。然后在 PowerShell 执行下面命令&#xff0c;即可启动一个 MySQL 服务。这里安装的是 8.3.0 Tag版本&#xff0c;如果需要安装其他或者最新版本&#xff0c;可以到 Docker Hub 进行查找。 docker run -itd --n…

DC电源模块的 PCB设计和布局指南

BOSHIDA DC电源模块的 PCB设计和布局指南 DC电源模块的PCB设计和布局是一个关键的步骤&#xff0c;它直接影响到电源的性能和稳定性。下面是一些DC电源模块的PCB设计和布局的指南&#xff1a; 1. 选择合适的PCB尺寸和层数&#xff1a;根据电源模块的尺寸和功能需求&#xff0…

【SPDK】SPDK + fio编译、测试(包成功版)

准备使用fio对spdk做性能测试的时候,查阅网上的其他资料,发现基本上都没有直接能跑出来的。 经过自己的摸索,跑通了。特此记录一下整个过程,方便其他人参考。 一、 fio 编译 首先需要做的是fio的编译。 1、 下载fio源码 git clone https://github.com/axboe/fio.git 注…

蓝桥杯前端Web赛道-新鲜的蔬菜

蓝桥杯前端Web赛道-新鲜的蔬菜 题目链接&#xff1a;1.新鲜的蔬菜 - 蓝桥云课 (lanqiao.cn) 题目要求如下&#xff1a; 其实很容易联想到使用flex布局&#xff0c;这是flex布局一种非常经典的骰子布局&#xff0c;推荐Flex 布局教程&#xff1a;实例篇 - 阮一峰的网络日志 (r…

【python课程作业】python学生成绩管理系统

功能介绍 平台采用B/S结构&#xff0c;后端采用主流的Python语言进行开发&#xff0c;前端采用主流的Vue.js进行开发。给舍友做的课程作业。 功能包括&#xff1a;成绩管理、学生管理、课程管理、班级管理、用户管理、日志管理、系统信息模块。 源码地址 https://github.co…