MoonBit标准库开源,支持带标签/可选参数,还有这些更新值得更新……

2024-03-11 23:04

本文主要是介绍MoonBit标准库开源,支持带标签/可选参数,还有这些更新值得更新……,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

01 MoonBit 更新

1. moonbitlang/core 开源

moonbitlang/core(MoonBit标准库)现已开源。我们很高兴收到社区的积极反馈,想了解更多与moonbitlang/core开源的详情,可点击这里查看:国人自主研发的编程语言 MoonBit Core 开源啦!

Github链接:

https://github.com/moonbitlang/core

2. 支持带标签/可选参数

支持带标签参数(labelled argument)和可选参数(optional argument)。带标签参数有助于区分相同类型,不同功能的函数:

fn greeting(~name: String, ~location: String) {println("Hi, \(name) from \(location)!")
}fn init {greeting(~name="somebody", ~location="some city")let name = "someone else"let location = "another city"greeting(~name, ~location)// `~label=label` 可以简写成 `~label`
}

可选参数必须带标签,并且指定默认值。在函数调用的时候,如果没有手动指定参数,则取默认值。注意:默认值在每次调用的时候都会被重新求值:

fn greeting(~name: String, ~location: Option[String] = None) {match location {Some(location) => println("Hi, \(name)!")None => println("Hi, \(name) from \(location)!")}
}fn init {greeting(~name="A")// Hi, A!greeting(~name="B", ~location=Some("X")// Hi, B from X!
}

3. 提供了内建类型 SourceLoc

SourceLoc,表示源码中的位置。假如某个函数声明了一个类型为 SourceLoc、默认值为 _ 的可选参数,那么每次调用这个函数时,MoonBit 会自动插入调用处的位置作为这个参数的默认值:

fn f(~loc : SourceLoc = _) {println("called at \(loc)")
}fn g(~loc : SourceLoc = _) {f()// 显示 `g` 内部的位置f(~loc)// 自动注入的参数也可以手动覆盖。这一次调用会显示 `g` 的调用者的位置
}test "source loc" {g()
}

在 try.moonbitlang.cn 新建一个名为 test.mbt 的文件,放入上述代码,并运行代码中的测试,可以得到如下的输出:

test source loc ...
called at memfs:/sample-folder/test.mbt:6:3-6:6
called at memfs:/sample-folder/test.mbt:11:3-11:6

SourceLoc 可以用于编写测试相关的函数,用于在测试失败时输出有用的位置信息:

fn assert_eq[X: Eq + Show](result: X, expect: X, ~loc : SourceLoc = _) -> Result[Unit, String] {if (result == expect) {Ok(())} else {Err("\(loc): Assertion failed: \(result) != \(expect)")}
}test "1 =? 2" {assert_eq(1, 2)?
}
running 1 tests
test 1 =? 2 ... FAILED memfs:/sample-folder/test.mbt:10:3-10:18: Assertion failed: 1 != 2test result: 0 passed; 1 failed

4. === 已经弃用,可以使用 physical_equal 作为代替

5. 添加新的内置类型 UnsafeMaybeUninit[T]

添加新的内置类型 UnsafeMaybeUninit[T] 和对于该类型的一些相关操作,用以在 MoonBit Core 中实现 Vector 等数据结构,因为其不安全性,普通的 MoonBit 程序中应尽可能避免使用该类型。

02构建系统更新

1. 支持 JavaScript 后端

可以通过 --target js 来生成后端代码。例如:

a. 通过 moon new hello 新建一个名为 hello 的项目

b. 在 main/main.mbt 中写入:

fn main {println("Hello from JavaScript!")
}

c. 在命令行中构建生成 JavaScript 代码,并使用 Node 运行。

$ moon build --target js
moon: ran 2 tasks, now up to date
$ node target/js/release/build/main/main.js
Hello from JavaScript!

d. 你也可以方便地通过 moon run main --target js 来编译并运行编译到 JavaScript 的 MoonBit 代码。

$ moon run main --target js
Hello from JavaScript!

2. 修复了一些 moonbuild 的问题

a. 修复了 Windows 上 moon upgrade 失败的问题。

b. 修复了 moon add 添加新版本没有移除旧版本的问题。

c. 修复了本地 moon check 失败仍然能够 publish 的问题。

IDE更新

1. 线上 IDE 支持通过 CodeLens 的方式运行测试

ide更新.png

2. 大幅度改善 moonfmt 的对于包含注释的源代码的处理。

3. 提升 IDE 和 VSCode 插件的稳定性和用户体验

a. VSCode插件现在是在文件更改的时候调用moon check而非启动moon check -w

b. 提升了多行字符串和文档注释(docstring)的输入体验。现在在多行字符串/文档注释内部换行会自动补上 #| 或者 /// 的前缀。

c. 修复了 hover、moon.pkg.json 出错,空文件等导致 lsp 报错的问题。

工具链更新

Markdown linter 支持 expr 标签

举个例子:

```moonbit expr
1 * 2 + 3

可以在运行 mdlint 的时候看到对应的输出:

5

这篇关于MoonBit标准库开源,支持带标签/可选参数,还有这些更新值得更新……的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/799356

相关文章

SpringBoot请求参数接收控制指南分享

《SpringBoot请求参数接收控制指南分享》:本文主要介绍SpringBoot请求参数接收控制指南,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Spring Boot 请求参数接收控制指南1. 概述2. 有注解时参数接收方式对比3. 无注解时接收参数默认位置

Python使用getopt处理命令行参数示例解析(最佳实践)

《Python使用getopt处理命令行参数示例解析(最佳实践)》getopt模块是Python标准库中一个简单但强大的命令行参数处理工具,它特别适合那些需要快速实现基本命令行参数解析的场景,或者需要... 目录为什么需要处理命令行参数?getopt模块基础实际应用示例与其他参数处理方式的比较常见问http

Linux内核参数配置与验证详细指南

《Linux内核参数配置与验证详细指南》在Linux系统运维和性能优化中,内核参数(sysctl)的配置至关重要,本文主要来聊聊如何配置与验证这些Linux内核参数,希望对大家有一定的帮助... 目录1. 引言2. 内核参数的作用3. 如何设置内核参数3.1 临时设置(重启失效)3.2 永久设置(重启仍生效

SpringMVC获取请求参数的方法

《SpringMVC获取请求参数的方法》:本文主要介绍SpringMVC获取请求参数的方法,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下... 目录1、通过ServletAPI获取2、通过控制器方法的形参获取请求参数3、@RequestParam4、@

Spring Boot项目部署命令java -jar的各种参数及作用详解

《SpringBoot项目部署命令java-jar的各种参数及作用详解》:本文主要介绍SpringBoot项目部署命令java-jar的各种参数及作用的相关资料,包括设置内存大小、垃圾回收... 目录前言一、基础命令结构二、常见的 Java 命令参数1. 设置内存大小2. 配置垃圾回收器3. 配置线程栈大小

MySQL更新某个字段拼接固定字符串的实现

《MySQL更新某个字段拼接固定字符串的实现》在MySQL中,我们经常需要对数据库中的某个字段进行更新操作,本文就来介绍一下MySQL更新某个字段拼接固定字符串的实现,感兴趣的可以了解一下... 目录1. 查看字段当前值2. 更新字段拼接固定字符串3. 验证更新结果mysql更新某个字段拼接固定字符串 -

SpringBoot利用@Validated注解优雅实现参数校验

《SpringBoot利用@Validated注解优雅实现参数校验》在开发Web应用时,用户输入的合法性校验是保障系统稳定性的基础,​SpringBoot的@Validated注解提供了一种更优雅的解... 目录​一、为什么需要参数校验二、Validated 的核心用法​1. 基础校验2. php分组校验3

CSS去除a标签的下划线的几种方法

《CSS去除a标签的下划线的几种方法》本文给大家分享在CSS中,去除a标签(超链接)的下划线的几种方法,本文给大家介绍的非常详细,感兴趣的朋友一起看看吧... 在 css 中,去除a标签(超链接)的下划线主要有以下几种方法:使用text-decoration属性通用选择器设置:使用a标签选择器,将tex

Go标准库常见错误分析和解决办法

《Go标准库常见错误分析和解决办法》Go语言的标准库为开发者提供了丰富且高效的工具,涵盖了从网络编程到文件操作等各个方面,然而,标准库虽好,使用不当却可能适得其反,正所谓工欲善其事,必先利其器,本文将... 目录1. 使用了错误的time.Duration2. time.After导致的内存泄漏3. jsO

MyBatis 动态 SQL 优化之标签的实战与技巧(常见用法)

《MyBatis动态SQL优化之标签的实战与技巧(常见用法)》本文通过详细的示例和实际应用场景,介绍了如何有效利用这些标签来优化MyBatis配置,提升开发效率,确保SQL的高效执行和安全性,感... 目录动态SQL详解一、动态SQL的核心概念1.1 什么是动态SQL?1.2 动态SQL的优点1.3 动态S