相信开源的力量,MoonBit 构建系统正式开源

MoonBit 构建系统正式开源

在这里插入图片描述

作为由 AI 驱动的云服务和边缘计算开发者平台,MoonBit 自设计之初便注重工具链与语言的协同效果。MoonBit 为开发者提供了一套开箱即用的工具链,包括集成开发环境(IDE)、编译器、构建系统和包管理器,使开发者在使用 MoonBit 时能够轻松入门,极大提高开发效率、代码质量和项目的可维护性,减少繁琐的手动操作和配置管理,从而更加专注于开发的核心逻辑与创新,以提升整体开发体验和生产力。

MoonBit 的构建系统 moon 启动于 2023 年 5 月,今天已通过 GitHub moonbitlang/moon 公开,以 AGPL 协议开源。

moon:MoonBit构建系统

moon 是 MoonBit 的构建系统,为 MoonBit 项目提供编译构建,自动化测试工具(集成 expect test),覆盖率测试、包管理器等功能,此外,moon 作为 MoonBit 语言编译工具链的重要组件,与 IDE 紧密结合,为 IDE 分析代码提供了详尽的项目结构和依赖等信息。

moon 用 Rust 开发,得益于 Rust 语言的内存安全、高性能和并发处理能力、跨平台等特性,确保构建过程的稳定性和速度。

moon 的并行与增量构建功能得益于 n2 项目(n2 与 ninja 都是由 Evan Martin 创建,n2 相比 ninja 更加轻量,并且在增量构建方面更出色),对其修改部分将保持原项目的开源协议 moonbitlang/n2。

为什么选择 moon

在这里插入图片描述

  • 速度

    • MoonBit 的编译器速度极快,这得益于其精心设计的编译流程和优化策略。作为用户与编译器之间的桥梁,moon 在底层设计上力求精简,最小化自身的封装开销,从而最大化编译速度。

    • 此外,moon 还为集成开发环境(IDE)提供了详尽的项目结构和依赖等信息,这对于对延迟极为敏感的 IDE 场景至关重要。moon 通过优化核心构建步骤的性能,确保了即使在高度交互的开发环境中也能提供流畅的用户体验。

  • 并行增量构建

    • moon 得益于 n2 项目的并行增量构建功能是其高效性的关键所在。通过自动分析和理解各个构建任务之间的依赖关系,moon 能够智能地将独立的任务并行化处理,充分利用现代多核处理器的强大性能,从而显著加快构建速度。更为重要的是,moon 仅对自上次构建以来发生更改或其依赖项有所更新的文件进行构建,这种增量构建策略极大地提高了构建效率,使得 moon 能处理需要频繁构建的大型项目。
  • 集成和测试支持

    • 与自动化测试工具紧密结合,能够在代码提交和构建过程中自动执行单元测试、集成测试和端到端测试,确保每一行代码都经过严格的检验。

    • 在代码质量保障方面,MoonBit 提供了代码格式化和静态分析工具,这些工具能够自动检查代码风格的一致性,并识别潜在的逻辑错误和安全漏洞。在持续集成/持续部署(CI/CD)的流水线中,这些功能尤为重要,它们能够在代码合并到主分支之前,及时发现并报告代码质量问题,从而确保团队能够协同开发出高质量的代码。

Benchmark

构建矩阵性能测试

我们测试了 moon 在编译构建具有复杂依赖关系的项目时与 Rust cargo、Go 的性能差异。测试包括生成 DR * DC 目录,即目录矩阵,每个目录包含 MR * MC 模块,即模块矩阵。模块矩阵 r 行 c 列中的模块依赖于同一目录前一行中的所有模块。一个目录中的第一行模块依赖于前一行目录中的所有模块。这种依赖关系便于测试并行性,同一行中的模块可以并行编译,同一行中的目录也可以并行编译。如想进一步了解测试准则请参见 omake1,项目生成器代码见 moonbit-community/build-matrix。

在我们的测试中,取 DR、DC、MR、MC 均为 6,加上 main 模块后,每个项目都包含 1297(6^4 + 1)个包。测试环境为 MacBook Pro Apple M3 Max 128G RAM,操作系统为 macOS 14.4.1,测试结果如下:

在这里插入图片描述

调试构建: 在调试构建(debug build)任务中,moon 依旧表现优异,用时 2.3 秒,go 次之,为 2.9 秒,而 cargo 最慢,耗时 20.0 秒。

在这里插入图片描述

类型检查: 在类型检查(check)任务中,moon 的性能最佳,耗时仅为 1.4 秒,而 cargo 则需要 16.2 秒,go 在此项任务中无数据。go 没有类似于 moon checkcargo check 仅执行类型检查的命令,因此结果为 -

在这里插入图片描述

发布构建: 在发布构建(release build)任务中,moon 的表现依然出色,仅耗时 1.6 秒,go 为 3.1 秒,而 cargo 则未能完成任务。cargo build --release在该项目中耗尽内存后崩溃,因此结果为

值得注意的是,moon 的发布构建要比调试构建的速度更快。

而当 DR、DC、MR、MC 均为 8 时,共 4097 个模块,moon build 用时为 5.7 秒,go build 用时 11.2 秒,而 cargo build 用时 1043 秒。在此项测试中,moon 与 go 均在数秒内完成,而 cargo 已经无法在合理的时间完成此项目的构建。

标准库上的性能测试

目前 moonbitlang/core 为最大的 MoonBit 项目,截止到 2024/07/03,它共有 38177 行代码,46 个包,195 个.mbt文件,2576 个测试。对项目进行类型检查仅需 0.28 秒,执行全部测试仅需 1.27 秒。

马上使用 moon

  • 访问下载页安装脚本下载 MoonBit 工具链,或者在 VS Code 中安装 MoonBit 插件后根据提示一键安装

  • 用法:moon help

The build system and package manager for MoonBit.Usage: moon [OPTIONS] <COMMAND>Commands:new       Create a new moonbit packagebuild     Build the current packagecheck     Check the current package, but don't build object filesrun       Run WebAssembly moduletest      Test the current packageclean     Clean the target directoryfmt       Format moonbit source codedoc       Generate documentationinfo      Generate public interface (`.mbti`) files for all packages in the moduleadd       Add a dependencyremove    Remove a dependencyinstall   Install dependenciestree      Display the dependency treelogin     Log in to your accountregister  Register an account at mooncakes.iopublish   Publish the current packageupdate    Update the package registry indexcoverage  Code coverage utilitiesbench     Generate build matrix for benchmarking (legacy feature)upgrade   Upgrade toolchainsversion   Print version info and exithelp      Print this message or the help of the given subcommand(s)Options:--source-dir <SOURCE_DIR>  The source code directory. Defaults to the current directory--target-dir <TARGET_DIR>  The target directory. Defaults to `source_dir/target`-q, --quiet                    Suppress output-v, --verbose                  Increase verbosity--trace                    Trace the execution of the program--dry-run                  Do not actually run the command-h, --help                     Print help

如何贡献

我们欢迎来自社区各种形式的贡献,如文档、测试以及 issue 等,详细内容请参考贡献指南。

MoonBit 社区现状 & 开源计划

MoonBit 积极拥抱开源,我们相信开源的力量会大幅度推进技术发展与进步,并造福开发者甚至整个社会。今年 3 月 8 日 MoonBit 正式对外开放了标准库,社区的贡献异常热烈,短短几个月就收获数万行社区贡献代码。我们也努力的与社区贡献者和 MoonBit 用户面对面交流,在深圳和北京组织了 3 场线下 Meetup 见面会,现场座无虚席。值得期待的是,我们接下来会举办一场 「MoonBit 编程挑战赛」,届时欢迎更多的开发者加入到 MoonBit 同行者的行列,一起为编程语言事业添砖加瓦。

MoonBit 在海外也取得了空前的反响。近日,MoonBit 得到全球顶级开发者科技媒体 《The New Stack》 专题报道,并两度登顶全站热门文章榜首。此前,MoonBit 已于日本最大开发者论坛之一 zenn.dev 引发热议。MoonBit JavaScript 后端新闻一经发布,即迅速收获海外平台十万级阅读量,以及多位知名开发者转发认可。除海外媒体与开发者的广泛关注外,MoonBit 在海外社区生态已初具规模。MoonBit 在社区成员自发编写的 MoonBit-Extism 插件,已被 Extism 收入官方 PDK 库,实现了海外社区支持下的第一个实用案例。

在教育领域,我们致力于培养编程语言这一基础软件领域的后备人才。MoonBit 创始人张宏波在清华大学等国内多所知名高校和 APIO 2024(亚洲与太平洋地区信息学奥林匹克)等权威技术大会上倾情授课 ,并为学生们细致地构思「学分作业」。

语言生态系统已走向成熟。在本次构建系统开源后,我们将于下个月8月18日发布 MoonBit Beta 预览版本,这标志着 MoonBit 语言达到了一个相对成熟的阶段,可以供早期用户和开发者进行实际项目的开发和测试。今年年底11月22日,MoonBit 编译器核心部分将正式开源。敬请期待!

在这里插入图片描述

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

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

相关文章

android audio不同音频流,(六)settings内音频流音量调整

&#xff08;1&#xff09;settings内&#xff0c;可设置音频流音量&#xff0c;如下图&#xff1a; &#xff08;2&#xff09;settings调整音量条进度&#xff0c;会触发SeekBarVolumizer对象&#xff1a; SeekBarVolumizer文件路径&#xff1a; frameworks/base/core/java/…

【MySQL进阶之路 | 高级篇】事务的ACID特性

1. 数据库事务概述 事务是数据库区别于文件系统的重要特性之一&#xff0c;当我们有了事务就会让数据库始终保持一致性&#xff0c;同时我们还能通过事务的机制恢复到某个时间点&#xff0c;这样可以保证给已提交到数据库的修改不会因为系统崩溃而丢失。 1.1 基本概念 事务&…

OpenCV图像滤波(1)双边滤波函数bilateralFilter的使用

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 功能描述 bilateralFilter是图像处理和计算机视觉领域中的一种高级图像滤波技术&#xff0c;特别设计用于在去除噪声的同时保留图像的边缘和细节。相比于传…

React搭建Vite项目及各种项目配置

1. 创建Vite项目 在操作系统的命令终端&#xff0c;输入以下命令&#xff1a; yarn create vite 输入完成以后输入项目名称、选择开发框架&#xff0c;选择开发语言&#xff0c;如下图所示&#xff0c;即可完成项目创建。 注意事项&#xff1a; 1. Node版本必须符合要求&…

OceanBase v4.2 特性解析:如何实现表级恢复

背景 在某些情况下&#xff0c;你可能会因为误操作而遇到表数据损坏或误删表的情况。为了能在事后将表数据恢复到某个特定时间点&#xff0c;在OceanBase尚未有表级恢复功能之前&#xff0c;你需要进行以下步骤&#xff1a; 利用OceanBase提供的物理恢复工具&#xff0c;您可…

Android 定时任务: Timer 和 TimerTask

目录 为什么要使用Timer和TimerTask?Timer和TimerTask是什么如何使用&#xff1f;注意事项 一、为什么要使用Timer和TimerTask&#xff1f; 延迟执行任务&#xff1a;如果我们需要在一段时间后执行某个任务&#xff0c;可以使用Timer和TimerTask来安排延迟执行。例如&#…

05. Java 三大范式

1. 前言 在面向对象语言中涉及到诸多的设计模式&#xff0c;例如单例模式、适配器模式&#xff0c;设计模式的存在是为了让系统中的代码逻辑更加清晰&#xff0c;帮助开发者建立更加健壮的系统&#xff0c;同时满足易修改特性和易扩展特性。数据库设计时也存在类似设计模式的通…

Linux云计算 |【第一阶段】SERVICES-DAY6

主要内容&#xff1a; Linux容器基础、Linux容器管理、podman命令行、管理容器进阶 实操前骤&#xff1a;安装 RHEL8.2 虚拟机 1.选择软件包&#xff1a;rhel-8.2-x86-dvd.iso&#xff1b; 2.内存2048M&#xff1b; 3.时区选择亚洲-上海&#xff0c;带GUI的服务器&#xff1b…

使用kali对操作系统和网络服务类型进行探测

1&#xff0e;在Kali终端中输入命令“nmap –sS –n -O 192.168.2.2”&#xff0c;探测目标主机的操作系统类型 2&#xff0e; 在Kali终端中输入命令“nmap –sV -n 192.168.2.2”&#xff0c;探测目标主机开启的网络服务类型 3.在Kali终端中输入命令“nmap –A -n 192.168.2.2…

vue3前端开发-小兔鲜项目-产品详情基础数据渲染

vue3前端开发-小兔鲜项目-产品详情基础数据渲染&#xff01;这一次内容比较多&#xff0c;我们分开写。第一步先完成详情页面的基础数据的渲染。然后再去做一下右侧的热门产品的列表内容。 第一步&#xff0c;还是老规矩&#xff0c;先准备好接口函数。方便我们的页面组件拿到对…

掌握互联网路由选择协议:从基础入门到实战

文章目录 路由选择协议的基本概念路由选择算法的分类分层次的路由选择协议路由信息协议&#xff08;RIP&#xff09;内部网关协议&#xff1a;OSPF外部网关协议&#xff1a;BGP互联网中的实际应用总结 互联网的路由选择协议是网络通信的核心&#xff0c;它决定了数据包如何在网…

Sentinel初步了解

概念 Sentinel面向分布式、多语言异构化服务框架的流量治理组件。 相关文档https://github.com/alibaba/Sentinel/wiki/ 服务雪崩 多个微服务之间调用的时候&#xff0c;假设微服务A调用微服务B和微服务C,微服务B和微服务C又调用其它的微服务&#xff0c;这就是所谓的“扇出…

【YashanDB知识库】yac修改参数后关闭数据库hang住

【标题】yac修改参数后关闭数据库hang住 【问题分类】性能优化 【关键词】YashanDB, yac, shutdown hang 【问题描述】修改yac参数后执行shutdown immediate&#xff0c;数据库hang住。 【问题原因分析】 Shutdown操作时&#xff0c;线程在获取gInstance->trigger->s…

Spring Boot 接口访问频率限制的实现详解

目录 概述为什么需要接口访问频率限制常见的实现方式 基于过滤器的实现基于拦截器的实现基于第三方库Bucket4j的实现 实际代码示例 基于过滤器实现Rate Limiting基于拦截器实现Rate Limiting使用Bucket4j实现Rate Limiting 最佳实践 选择合适的限流算法优化性能记录日志和监控…

Manticore Search(es轻量级替代)

概念&#xff1a; Manticore Search 是一个使用 C 开发的高性能搜索引擎&#xff0c;创建于 2017 年&#xff0c;其前身是 Sphinx Search 。Manticore Search 充分利用了 Sphinx&#xff0c;显着改进了它的功能&#xff0c;修复了数百个错误&#xff0c;几乎完全重写了代码并保…

MySQL第四次作业

1.修改student表中年龄字段属性&#xff0c;数据类型由int改变为smallint 2.为course表中cno课程学号设置索引&#xff0c;并查看索引 &#xff08;3&#xff09;为SC表建立按学号(sno)和课程号(cno)组合的升序的主键索引&#xff0c;索引名为SC_INDEX &#xff08;4&#xff0…

PHP框架详解-symfony

一、介绍 Symfony是一个用于构建Web应用程序的PHP框架。它是一个开源框架,由Fabien Potencier于2005年创建。 Symfony框架具有许多特性和优势,以下是一些重要的特性: 可重复使用的组件:Symfony框架基于一系列可重复使用的组件,这些组件可以独立于框架使用,并且可以被其…

mysql对数据库的增删改

目录 DML语句&#xff1a; 增加数据&#xff08;insert语句&#xff09; 增加数据&#xff08;insert into select&#xff09; 修改数据&#xff08;update语句&#xff09; 【where 子句条件】 删除数据&#xff08;delete语句&#xff09; 删除数据&#xff08;trunca…

Spring, Spring Boot 和Spring MVC的关系以及区别

一、Spring 简单来说, Spring 是一个开发应用框架&#xff0c;主打轻量级、一站式、模块化&#xff0c;其目的是用于简化企业级应用程序开发。 Spring 的主要功能&#xff1a;管理对象&#xff0c;以及对象之间的依赖关系&#xff0c;面向切面编程&#xff0c;数据库事务管理, …

NO.1 Hadoop概述

1.1 Hadoop是什么 1.2 Hadoop优势 1.3 Hadoop组成 1.3.1 HDFS架构概述 1.3.2 YARN架构概述 1.3.3 MapReduce架构概述 1.3.4 HDFS、YARN、MapReduce三者关系 1.4 大数据技术生态体系 1.5 推荐系统框架图