MoonBit 原生后端完成了 MoonBit 生态的最后一块拼图,可以满足绝大多数场景需求。
在已有 WebAssembly 和 JavaScript 后端的基础上,粤港澳大湾区数字经济研究院(简称“IDEA研究院”)基础软件中心开发的 MoonBit平台新增原生后端支持。代码能直接被编译为机器码在硬件上运行,摆脱了虚拟机的限制,显著提升了性能。
特别是对 RISC-V 开源指令集的支持,MoonBit 未来将在嵌入式系统、物联网(IoT)以及系统编程等领域有广阔的应用前景。
MoonBit 诞生于2022年。作为一款专为云计算与边缘计算设计的 AI 云原生编程语言及其完整工具链,融合了 Rust 和 Go 等现代语言的优秀设计理念。2024年9月,MoonBit 正式进入Beta 预览版。相比许多主流语言,MoonBit更早引入了现代化泛型系统、精准错误处理机制以及高效的迭代器设计,带给开发者全新的编程体验。
MoonBit 自发布伊始就具备出色的 IDE 支持,其在线 IDE 是目前工业级编程语言中唯一允许离线运行的集成开发环境,具备与本地开发环境一致的快速响应性能。此外,MoonBit 逐步推出了原生的调试工具(Debugger)以及 AI 代码生成助手,提供完善的工具链支持。
为什么支持原生后端?
编程语言的运行时实现方式主要分为两类:基于虚拟机的(如 Java、Kotlin 等)和直接在硬件上执行的(如C/C++、Rust等)。原生后端虽然具备更大的优化空间和更高的性能上限,但开发难度也相应增加。近年来,备受瞩目的系统编程语言 Zig 经过近十年的研发,仍处于 Beta 阶段,足以说明原生后端的开发复杂性。
MoonBit 的原生后端能将代码编译为目标机器的可执行二进制文件,避免解释开销,充分利用硬件资源,如 CPU、内存和存储,从而显著提升性能。对视频处理、机器学习和大规模数据分析等计算密集型应用,原生后端提供了必要的性能支持。
通过实际的性能数据对比,根据不同应用场景,MoonBit 原生后端在数值计算领域以及内容管理性能方面领先于传统编程语言 Java 以及 Swift。
数值计算:
比 Java 快一个数量级
原生语言相比于基于虚拟机的编程语言的性能优势在数值计算领域尤为明显。这得益于原生编程语言很大程度上能更好地优化内存布局,和利用硬件加速指令。
在经典的FFT算法 benchmark 中,同样的Cooley-Tukey算法, MoonBit 比 Java 有15倍以上的性能提升,比最先进的商业版本的 Java AOT 编译器 GraalVM 也有4倍以上的性能提升。
FFT(快速傅里叶变换)是一个计算序列的离散傅里叶变换的高效算法,在信号处理、压缩等许多领域有重要应用。FFT 算法涉及大量数值运算和数组操作,可以很好地体现语言的基础性能。
与传统的 C/C++ 等底层语言不同,MoonBit 在实现显著性能提升的同时,保留了极佳的开发体验。MoonBit 与 Java 一样,采用自动内存管理,避免了手动管理内存的复杂性。同时,MoonBit 通过更现代化的语言设计,提供了比 Java 更丰富的现代语言特性,进一步提升了开发者的使用体验。
在数值计算类程序中,性能主要由两方面决定:对计算的优化程度和语言本身的运行开销。C/C++ 在数值计算领域表现出色,不仅得益于编译器优化,还在于语言本身几乎没有额外开销。对于自动内存管理的高级语言来说,如何消除高级语言功能带来的额外开销,是提升性能的关键。加上现代 CPU 的缓存机制,数据布局对性能也有重要影响。
MoonBit 性能与开发体验的双重优势,归功于其科学、现代的顶层设计:
• MoonBit 语言设计简洁,额外开销极小,数据结构布局紧凑,能够更好地利用现代 CPU 的缓存架构。
• MoonBit 采用多层中间表示(IR)和全局优化编译架构,能有效消除泛型等高级功能的开销,并对数据布局进行全局优化,以最大化性能。
内存管理性能:
优于 Java 和 Swift
在应用类程序中,更常见的是对内存中数据结构的各种操作。得益于定制的内存管理系统,MoonBit 的原生后端在内存操作性能与内存占用上表现优秀,优于拥有高性能 GC 的 Java、和同样编译到二进制、自动管理内存的语言 Swift。
上述 benchmark 来自论文Perceus: Garbage Free Reference Counting with Reuse*。通过比较语言在大量动态内存分配操作时的运行时间和内存占用情况,反映语言内存管理系统的性能差异。
在嵌入式与 IoT 设备上,计算资源与内存资源都非常紧张。因此编程语言的运行性能与内存占用表现都必须足够好,才能胜任嵌入式、IoT 开发的场景。
实践中,受制于硬件资源,嵌入式、IoT 开发者往往不得不使用 C/C++ 等底层语言来获得足够的性能。但这会极大增加开发者的心智负担、降低开发效率。而 MoonBit 原生提供了一种新的可能性:使用 MoonBit 原生开发程序,能同时兼顾开发体验、运行性能与内存占用。
深度硬件集成
接入嵌入式与 IoT 生态
原生后端的另一个优势就是深度硬件集成。原生应用能直接访问设备的硬件功能,如摄像头、GPS、传感器等,对后端服务至关重要。且深度硬件集成可以提供更快速的响应时间和更丰富的功能,增强用户体验。
除了生成开发机器的原生二进制,MoonBit 的原生后端还能交叉编译到所有 C 支持的平台,在第一时间实现了对 RISC-V 平台的原生支持,拥抱嵌入式与 IoT 生态。
MoonBit 的原生后端能生成只有少量 libc 依赖的可执行二进制。因此,MoonBit 的原生后端非常适合用于编写嵌入式、IoT 程序。此外,由于 MoonBit 原生生成的二进制高度self-contained,部署 MoonBit 原生程序到各类边缘设备上非常便捷。
复用底层生态:
安全可靠的系统编程体验
以C/C++语言为核心的原生生态在整个软件体系中占据着至关重要的地位。操作系统的底层API、各类高性能计算库、以及AI张量库,均通过C ABI(应用二进制接口)提供服务。MoonBit的原生后端能无缝与基于C ABI的第三方库进行交互,解锁更多开发场景。
MoonBit 原生后端采用多层IR(中间表示)设计,其中最底层的IR是C语言的一个子集。这一设计确保了MoonBit与C语言之间的良好互操作性,避免了昂贵的FFI(外部函数接口)开销,充分利用现有的各类高性能C语言库资源。
未来,MoonBit 将提供规范化的C语言调用约定,进一步扩展其生态,便捷地集成现有的开源AI推理库,应用于高性能计算和AI边缘推理领域,或用于开发直接调用操作系统API的高性能应用与服务。
相较于C/C++等系统编程语言,MoonBit 在保持高性能的同时,尤为注重内存安全与可靠性。与Rust的内存安全机制不同,MoonBit 通过编译器自身的优化策略,在不影响开发者体验的前提下,在大多数开发场景中移除垃圾回收(GC)带来的开销。
同时,针对部分核心场景,MoonBit 将逐步引入如“modality”等业界最新的研究成果,以提升程序的确定性。这一机制有效降低了学习曲线,使更多开发者能够轻松上手并从 MoonBit 生态中获益。
培养编程语言在
基础领域的后备人才
2024 MoonBit全球编程创新挑战赛(简称“MGPIC”)自 9 月 1 日启动以来,已吸引了逾2000名选手报名。参赛选手来自清华大学、北京大学、浙江大学、中山大学、香港科技大学(广州)等多所顶尖高校。
服务国家基础软件与计算机人才培养的战略目标、“以赛促学、以赛促教”,MoonBit 编程挑战赛组委会正在以“编程新时代,创新赢未来”为主题进行全国校园宣讲活动。团队已走访了中山大学、香港科技大学(广州)、清华大学、北京大学等全国十余所高等院校,吸引了逾千名校园开发者参与现场宣讲活动,体现了新一代发者们创新的热情。
通过赛事的举办,我们旨在帮助新一代优秀开发者加入基础软件研究队伍。助力打造国内基础研究的高水平支撑平台,为国内基础软件学者和工业开发者提供自主可控的基础软件生态。
评委寄语
大赛的荣誉评委为美国国家工程院外籍院士沈向洋博士,中国科学院院士、中国科学院软件研究所学术委员会主任林惠民教授,香港科技大学(广州)创校校长、IEEE终身会士、香港工程科学院院士倪明选教授,以及中国科学院软件研究所所长赵琛教授。
发展自己的编程语言是一件非常有意义的事情,编程语言是最能够体现计算机软件底层逻辑的学科分支。可以毫不夸张地讲,“懂语言者得天下”。
很多困难的事情,一旦有勇气,善于思考,就不是难题。而这次比赛,就是一个绝佳的起点和锻炼。
—— 美国国家工程院外籍院士 沈向洋
这代年轻人是数字原生的一代,也是面对 AI 原生的一代,而创造一门属于这个时代的编程语言显得尤为重要。编程的基本理念就是为了解决问题,而 MoonBit 为大家提供了一个非常好的解题工具。
—— 香港科技大学(广州)创校校长 倪明选
发展我们自己的编程语言,对于建立自主创新体系、在国际竞争中争取主动地位具有重要意义。通过本次比赛,大家可以深入理解编译技术,同时还能为 RISC-V 生态贡献智慧和力量。
—— 中国科学院软件研究所所长 赵琛
目前,MoonBit编程挑战赛正处于初赛作品提交阶段,感兴趣的小伙伴报名!
未来展望
仅用两年时间,MoonBit 已吸引了全球关注,包括美国开发者在内的用户将其应用于商业项目。当前,全球去重用户数量已达数万人次,这对于一个年轻的编程语言来说,是极大的鼓舞。
MoonBit 原生后端完成了 MoonBit 生态的最后一块拼图。通过原生后端、WebAssembly和JavaScript 后端的支持,可以满足绝大多数开发者的多场景需求。得益于模块化设计,这三个后端共享了前面绝大部分基础框架,大部分前端的优化都会使三个后端的用户受益。
未来 MoonBit 团队将聚焦于开发者的用户体验,提高软件的可靠性,以及培养开发者生态。
在开发者生态建设方面,MoonBit 早早推出了包管理工具,推动了社区的活跃与成长,让更多用户能分享和共建 MoonBit 生态库。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。