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

news2024/9/22 15:50:39

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 package
  build     Build the current package
  check     Check the current package, but don't build object files
  run       Run WebAssembly module
  test      Test the current package
  clean     Clean the target directory
  fmt       Format moonbit source code
  doc       Generate documentation
  info      Generate public interface (`.mbti`) files for all packages in the module
  add       Add a dependency
  remove    Remove a dependency
  install   Install dependencies
  tree      Display the dependency tree
  login     Log in to your account
  register  Register an account at mooncakes.io
  publish   Publish the current package
  update    Update the package registry index
  coverage  Code coverage utilities
  bench     Generate build matrix for benchmarking (legacy feature)
  upgrade   Upgrade toolchains
  version   Print version info and exit
  help      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.coloradmin.cn/o/1943269.html

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

相关文章

内网隧道——HTTP隧道

文章目录 一、ReGeorg二、Neo-reGeorg三、Pivotnacci 实验网络拓扑如下&#xff1a; 攻击机kali IP&#xff1a;192.168.111.0 跳板机win7 IP&#xff1a;192.168.111.128&#xff0c;192.168.52.143 靶机win server 2008 IP&#xff1a;192.168.52.138 攻击机与Web服务器彼此之…

Unity 之 【Android Unity 共享纹理】之 Android 共享图片给 Unity 显示

Unity 之 【Android Unity 共享纹理】之 Android 共享图片给 Unity 显示 目录 Unity 之 【Android Unity 共享纹理】之 Android 共享图片给 Unity 显示 一、简单介绍 二、共享纹理 1、共享纹理的原理 2、共享纹理涉及到的关键知识点 3、什么可以实现共享 不能实现共享…

越权与逻辑漏洞

目录 越权漏洞 1、越权原理概述 2、越权分类 2.1、平行越权 2.2、垂直越权 3、越权防范&#xff1a; 逻辑漏洞 1、常见的逻辑漏洞 2、逻辑漏洞概述 3、逻辑漏洞防范&#xff1a; 越权漏洞 1、越权原理概述 如果使用A用户的权限去操作B用户的数据&#xff0c;A的权限…

静态路由技术

一、路由的概念 路由是指指导IP报文发送的路径信息。 二、路由表的结构 1、Destination/Mask:IP报文的接收方的IP地址及其子网掩码; 2、proto:协议(Static:静态路由协议,Direct:表示直连路由) 3、pref:优先级(数值和优先级成反比) 4、cost:路由开销(从源到目的…

jQuery下落撞击散乱动画

jQuery下落撞击散乱动画https://www.bootstrapmb.com/item/14767 在jQuery中实现一个下落撞击后散乱的动画效果&#xff0c;你可以结合CSS动画和jQuery的动画函数来完成。不过&#xff0c;由于jQuery本身并不直接支持复杂的物理效果&#xff08;如撞击后的散乱&#xff09;&a…

Nessus-M 暴力破解Nessus漏扫后台登录工具

项目地址:https://github.com/MartinxMax/Nessus-M Nessus-M Nessus漏洞扫描程序登录界面的暴力破解工具 帮助信息 $ python3 nessus-m.py -h 暴力破解 $ python3 nessus-m.py 192.168.101.156 8834 username.txt /usr/share/wordlists/rockyou.txt --protocol https

贪心系列专题篇二

增减字符串匹配 题目 思路 贪心策略&#xff1a;对于[0,n]&#xff0c;当遇到“I”时&#xff0c;把所剩的数中最小的拿来使用&#xff1b; 当遇到“D”时&#xff0c;把所剩的数中最大的拿来使用&#xff0c;最后还剩一个数&#xff0c;放末尾。 代码 class Solution { pu…

sbti科学碳目标倡议是什么

在科学界、工业界以及全球政策制定者的共同努力下&#xff0c;一个名为“科学碳目标倡议”&#xff08;Science Based Targets initiative&#xff0c;简称SBTi&#xff09;的全球性合作平台应运而生。这一倡议旨在推动企业和组织设定符合气候科学要求的减排目标&#xff0c;以…

Nginx 如何处理请求的限速?

&#x1f345;关注博主&#x1f397;️ 带你畅游技术世界&#xff0c;不错过每一次成长机会&#xff01; 文章目录 Nginx 如何处理请求的限速一、为什么需要对请求进行限速&#xff08;一&#xff09;服务器过载&#xff08;二&#xff09;资源竞争&#xff08;三&#xff09;服…

数据接入开放协议-GRPC接入

协议定义 一、接入认证 message VerifyRequest { string authToken 1; // 接入管理分配的UUID string endpointName 2; // 定义的接入设备名 string endpointIdentify 3; // 接入设备的ID int64 leaseValue 4; // 租约时间,接入侧申明数据上送间隔最大时间&…

JWT令牌在项目中的实战操作

一.什么是JWT令牌&#xff1f; JWT&#xff0c;全称JSON Web Token&#xff0c;官网&#xff08;https://jwt.io/&#xff09;&#xff0c;定义了一种间接的&#xff0c;自包含的格式&#xff0c;用于在通信双方以json数据格式安全的传输信息。由于数字签名的存在&#xff0c;…

【2024最新华为OD-C/D卷试题汇总】[支持在线评测] 卡牌游戏(200分) - 三语言AC题解(Python/Java/Cpp)

🍭 大家好这里是清隆学长 ,一枚热爱算法的程序员 ✨ 本系列打算持续跟新华为OD-C/D卷的三语言AC题解 💻 ACM银牌🥈| 多次AK大厂笔试 | 编程一对一辅导 👏 感谢大家的订阅➕ 和 喜欢💗 🍿 最新华为OD机试D卷目录,全、新、准,题目覆盖率达 95% 以上,支持题目在线…

哪些工具能分析反向链接?

这里推荐两个工具&#xff0c;Ahrefs以及SEMrush&#xff0c;Ahrefs 是一个全面的SEO工具&#xff0c;特别擅长反向链接分析。它可以显示谁在链接到你的网站&#xff0c;以及这些链接的质量和数量。Ahrefs 提供详细的报告&#xff0c;包括每个反向链接的锚文本、来源网站的权重…

内部函数和外部函数(例子为C语言)

​​​​ 怎么来的&#xff1f; 函数本质上是全局的&#xff0c;因为定义一个函数的目的就是这个函数与其他函数之间相互调用&#xff0c;如果不声明的话&#xff0c;一个函数既可以被本文件中的其他函数调用&#xff0c;也可以被其他文件中的函数调用。但是可以指定某些函数…

php 存储复杂的json格式查询(如:经纬度)

在开发中&#xff0c;有时我们可能存了一些复杂json格式不知道怎么查。我这里提供给大家参考下&#xff1a; 一、先上表数据格式&#xff08;location字段的possiton经纬度以逗号分开的&#xff09; {"title":"澳海文澜府","position":"11…

JSON 文件存储

JSON 全称为&#xff1a; JavaScript Object Notation 也就是 javaScript 对象标记&#xff0c;通过对象和数组的组合来表示数据&#xff0c; 虽然构造简洁&#xff0c;但是结构化程度非常高&#xff0c; 是一种轻量级的数据交换格式 对象和数组 在 JavaScript 语言中&#…

MAT使用

概念 Shallow heap & Retained Heap Shallow Heap就是对象本身占用内存的大小。 Retained Heap就是当前对象被GC后&#xff0c;从Heap上总共能释放掉的内存(表示如果一个对象被释放掉&#xff0c;那会因为该对象的释放而减少引用进而被释放的所有的对象&#xff08;包括…

用Docker来辅助开发

现在好像用Docker是越来越多了。之前其实也看过docker的原理&#xff0c;大概就是cgroup那些&#xff0c;不过现在就不看原理了&#xff0c;不谈理论&#xff0c;只看实际中怎么用&#xff0c;解决眼前问题。 用docker来做开发&#xff0c;其实就是解决的编译环境的差异&#…

解决kkfileview 使用https预览问题记录

场景&#xff1a;项目使用了开源的kkfileview进行文件在线预览&#xff0c;部署方式使用的是docker&#xff0c;使用IP进行访问&#xff0c;但是http协议直接访问有漏洞告警&#xff0c;现在需要调整为https&#xff0c;且仍然需要使用IP访问。 kkfileview官网kkFileView - 在线…

大数据架构体系演进

传统离线大数据架构 ​ 21世纪初随着互联网时代的到来&#xff0c;数据量暴增&#xff0c;大数据时代到来。Hadoop生态群及衍生技术慢慢走向“舞台”&#xff0c;Hadoop是以HDFS为核心存储&#xff0c;以MapReduce&#xff08;简称MR&#xff09;为基本计算模型的批量数据处理…