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


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

MoonBit 的构建系统 moon 启动于 2023年5月,今天正式在 GitHub 平台上开源!遵循 AGPL 开源协议。

开源信息:https://github.com/moonbitlang/moon 

值得一提的是,发布近一年来 MoonBit 不仅在国内获得用户青睐,更在海外引起广泛关注,获得海外知名科技媒体专题报道,并于开发者论坛屡次引发热议。

moon : MoonBit 构建系统

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

moon 用 Rust 开发,得益于 Rust 语言的内存安全、高性能和并发处理能力、跨平台等特性,确保构建过程的稳定性和速度。moon 的并行与增量构建功能得益于 n2 项目,(n2 与 ninja 都是由 Evan Martin 创建,n2 相比 ninja 更加轻量,并且在增量构建方面更出色),对其修改部分将保持原项目的开源协议 

 

为什么选择 moon ?

  • 速度

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

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

  • 并行增量构建

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

  • 集成和测试支持

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

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

Benchmark

构建矩阵性能测试

我们测试了 moon 在编译构建具有复杂依赖关系的项目时与 Rust cargo、Go 的性能差异。测试包括生成 DR * DC 目录,即目录矩阵,每个目录包含 MR * MC 模块,即模块矩阵。模块矩阵 r 行 c 列中的模块依赖于同一目录前一行中的所有模块。一个目录中的第一行模块依赖于前一行目录中的所有模块。这种依赖关系便于测试并行性,同一行中的模块可以并行编译,同一行中的目录也可以并行编译。

进一步了解测试准则👇

http://blog.camlcity.org/blog/omake1.html

项目生成器代码👇

https://github.com/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 check 与 cargo 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年7月3日,它共有 38177 行代码,46 个包,195 个 .mbt 文件件,2576 个测试。对项目进行类型检查仅需 0.28 秒,执行全部测试仅需 1.27 秒。

马上使用 moon

  • 可通过 https://www.moonbitlang.cn/download/#moonbit-cli-tools 安装脚本下载 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
testTest the current package
clean Clean the target directory
fmt Format moonbit source code
doc Generate documentation
infoGenerate public interface (`.mbti`) files for all packages in the module
add Add a dependency
removeRemove a dependency
install Install dependencies
treeDisplay the dependency tree
login Log in to your account
registerRegister an account at mooncakes.io
publish Publish the current package
updateUpdate the package registry index
coverageCode coverage utilities
bench Generate build matrix for benchmarking (legacy feature)
upgrade Upgrade toolchains
version Print version info and exit
helpPrint 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, --quietSuppress output
-v, --verboseIncrease verbosity
--traceTrace the execution of the program
--dry-runDo not actually run the command
-h, --help Print help

如何贡献?

 

我们欢迎来自社区各种形式的贡献,如文档、测试以及 issue 等。

详细内容请参考下方贡献指南👇https://github.com/moonbitlang/moon/blob/main/docs/dev/README.md

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 编译器核心部分将正式开源。敬请期待!

 


相關推薦

2024-08-20

MoonBit beta 预览版比大部分主流语言更早推出现代化泛型、精准错误处理和高效迭代器等重要特性,在云计算、边缘计算、人工智能和教育等领域快速实现落地应用。Beta 预览版标志着 MoonBit 生态进入全新阶段,为用户提供更稳定

2023-08-30

模型与底层技术 >>> 由中国开发者团队创建的编程语言 MoonBit(月兔)最近登上了 Hacker News 头条。 根据介绍,MoonBit (月兔)专为云计算、边缘计算设计,是一个用于云计算和边缘计算的 WebAssembly 端到端编程语言工具链,集

2024-07-05

近日,MoonBit 团队负责人张宏波接受海外知名科技媒体 The New Stack 专访。采访文章《MoonBit:针对 Wasm 优化的语言,代码量少于Rust》(MoonBit: Wasm-Optimized Language Creates Less Code Than Rust)一经发出,即登顶the new stack的热门文章榜首。

2023-12-02

MoonBit(月兔)是中国开发者团队创建的编程语言,由粤港澳大湾区数字经济研究院(IDEA 研究院)基础软件中心负责人张宏波领导的团队开发。 张宏波本人不仅为多种编程语言做出了贡献,包括 OCaml、ReScript(原 ReasonML/BuckleScri

2023-01-16

、优化软件生产模式、赋能产业转型升级具有重要作用。相信openKylin社区将在各位共建伙伴的协力支持下,逐步走向同国际顶尖开源社区比肩的星辰大海。 openKylin社区生态委员会主任 李震宁 开源创新已经成为数字化转型、

2023-02-24

OSS Compass 旨在帮助开源生态向着更加健康的方向发展,相信 OSS Compass 的问世,对于推动我国开源与软件产业发展会起到十分积极的作用;同时,也相信它将在促进国际技术交流合作方面,以及提升中国国际影响力上贡献重要力

2024-08-01

、用户和开源爱好者提供一个共同成长共建的舞台。我们相信,通过集思广益、共同努力,如意玲珑社区定能成为推动Linux生态技术进步发展的重要力量。 现在,就让我们一同走进如意玲珑社区官网,开启一段新的旅程。  

2023-06-21

开源开放的,代码质量和架构设计优质的潜力项目。我们相信开源、相互信任,鼓励所有的开发者、用户和贡献者积极参与我们的社区、共同合作,创新创造,建设一个更加强大的开源社区。 我们准备了一批优质的项目,等待

2023-05-05

有着十分积极的响应,主动联系我们,做出了妥善处理,相信之前出于对开源合规和相关知识的欠缺和疏忽,没有对代码进行审查,相信非恶意为之。 我们本意是为了开源得到更好发展,得到应有的尊重,既然赤兔实时计算团

2023-09-08

为 Wasm 领域真正的一等公民。该类别中的两个佼佼者是 Moonbit 和 Grain,它们的设计采用了 Go 和 Rust 中的现代语言特性,并针对高效的 Wasm 编译和执行进行了优化。Moonbit 虽然还处于早期阶段,但已经配备了从动态代码自动补

2024-06-26

注入了源源不断的活力。随着openKylin西安用户组的成立,相信未来将有更多本地爱好者相聚,共同参与到社区共建的队伍中来,书写属于大家的辉煌篇章。   持续招募 合作咨询:openKylin社区 范娇:13693170082

2023-05-16

Prompt 工程师最喜爱的产品。 No waiting list. No copy to China. 相信社区的力量! Dify.AI 是一款开源且易用的 LLMOps 平台,旨在帮助开发者更简单、更快速地构建 AI 应用。Dify 提供了可视化的 Prompt 编排、运营、数据集管理等功能。

2023-04-28

项目 copy StreamPark 的代码并且没有声明版权,起初我们不相信,以 Apache 项目的知名度和 Apache 开源协议的宽松程度一般不会有项目这么干,毕竟直接在代码中注明引用即可,协议对代码分发没有任何限制。带着疑惑和不解,我们

2024-08-10

,信创海河实验室协办的2024操作系统产业大会—openKylin开源创新论坛在北京举行。活动汇聚多位产业领袖、院校专家和开发者,聚焦当下创新技术,共同探讨开源操作系统的未来发展。   论坛致辞 开放原子开源基金会秘