国产编程语言的进击:MoonBit 发布 LLVM 后端,同步入驻世界一流高校课程体系

在人工智能驱动全球技术竞赛的当下,国产基础软件的自主化进程正迈向深水区。作为这一进程中的代表性力量,MoonBit 月兔以 “快速、简单、可拓展” 为核心特质,逐步构建起跨越学术与产业的技术生态。自2022年诞生以来,MoonBit通过多后端架构设计,在编译速度、运行效率和代码体积等关键指标上实现对传统编程语言的超越,覆盖从嵌入式设备到云端服务的全栈开发场景,成为极少数能在工业级性能与教学实践价值间取得平衡的编程语言及开发者工具链。

 MoonBit 团队近期双线告捷:LLVM 后端编译器发布,初步测试显示其性能超过主流语言水平,实验性的支持原生后端调试功能;几乎同一时间,该语言被纳入世界顶尖高校的编程语言课程。

在此过程中,MoonBit 月兔逐渐找到了自己的位置—— “做引领者而非追随者,和全球开发者并肩,重新定义编程语言的未来规则。"

MoonBit  的优势

Part1:LLVM 后端发布:场景化分工,双轨编译架构实现能力跃迁

MoonBit 的核心目标是通过 性能突破 与 开发者体验革新,解决现有编程语言在关键场景(如高并发、资源受限环境)中的效率瓶颈。MoonBit认识到 若一门新语言无法在核心性能与易用性上创造代际优势,开发者便不会承认其存在价值

MoonBit同步完善 C 后端并推出 LLVM 后端,分别针对嵌入式设备优化与跨平台高性能场景,通过统一工具链实现从硬件层到服务端的全场景覆盖。

  1. 性能维度:

     LLVM 后端复用与 Rust/Swift 相同的工业级优化管线(如自动向量化、LTO),为 MoonBit 提供与现代语言同级的优化潜力。
  2. 体验维度:

     原生集成 DWARF 调试信息,支持 GDB/LLDB 源码级调试,并计划实现运行时数据结构可视化。
  3. 生态扩展:

     基于 LLVM 对 RISC-V 向量扩展等新硬件的原生支持,MoonBit 可快速适配前沿架构。

性能实测: LLVM  后端的工业级表现

LLVM 后端的 MoonBit 在性能方面也有着不俗的成绩。比如使用经典的 FFT 算法  benchmark,让 MoonBit 和 Java 运行同样的 Cooley-Tukey 算法。MoonBit 相比 Java 有8倍以上的性能提升,比将 Java 静态编译的编译器 GraalVM 也有3倍以上的性能提升。

下面是 MoonBit 与 Java 实现的 FFT 算法的性能对比。FFT(快速傅里叶变换)是一个计算序列的离散傅里叶变换的高效算法,在信号处理、压缩等许多领域有重要应用。FFT 算法涉及大量数值运算和数组操作,可以很好地体现语言的基础性能:

FFT  任务运行中位数时间( x86_64 Linux, Intel Core i7-12700

平台

时间 (ms)

MoonBit (LLVM 18)

19.08

Java (GraalVM @ Java 23)

65.21

Java (OpenJDK 23)

144.1

Swift?

TODO

由于 LLVM 后端涉及到更多的底层调整和优化,工具链还尚未能完全发挥 LLVM 所带来的性能优势。团队将会在未来的更新中继续优化 LLVM 后端生成的代码质量,进一步提升它的性能。

原生后端调试支持

在面向虚拟机的  JS  后端,借助  Chrome Debugger MoonBit 真正实现了调试体验的 " 开箱即用 " 。然而,对于面向原生平台的  C  后端,调试体验却并不完全尽如人意。在 C 后端中,用户可以调试编译后生成的 C 文件,但是 C 文件与输出的原始文件的映射信息在这一过程中依然是缺少的。

在 LLVM 的帮助下, 当前 MoonBit 编译器已具备向最终二进制文件注入 DWARF 格式符号表的能力。MoonBit 现在可以向输出二进制文件中插入调试信息,将二进制文件中的指令直接对应到源文件和行号列号。这一功能将很大程度上改善输出的文件与源代码映射信息缺失的问题。

基于该调试信息生成机制,MoonBit工具链支持开发者使用标准调试工具(如LLDB)对编译产物进行源码级调试。

具体而言,调试器能够自动解析符号映射关系,当执行流到达预设的源码位置时准确触发断点中断。比如,可以在 lldb 调试器中插入断点,以将程序在指定的位置暂停。

虽然目前 MoonBit LLVM 后端对调试信息支持仍处于初步阶段,但已经对开发调试有了一定的帮助。团队后续会加入对调试器更好的支持,比如在调试器中展示局部变量和数据结构当前的值,以及更好的 name mangling 等。

未来展望:

LLVM  的引入带来最最显著的改进是,用户将来不需要在系统中安装完整的  C  编译器也能生成原生程序。虽然仍然需要链接器,但链接器相比  C  编译器来说体积更小,分发起来也更加方便

有了 LLVM 处理底层的编译工作,团队可以将更多精力投入在在运行时系统的创新上,比如利用LLVM 对 异常处理的完整支持,将错误处理函数优化为性能更好的 try-catch 实现;LLVM 对 追踪式垃圾收集的原生支持能够考虑用追踪式 GC 来替代现有的 Perceus 和引用计数方案。

Par2 :进入北大研究生课堂,替代  OCaml  完成教学升级

在函数式编程教学领域持续深耕十余年的北京大学计算机系,近日对其研究生课程《编程语言的设计原理》。https://pku-dppl.github.io/2025/做出重要调整——自2025年春期学期起,MoonBit将全面替代OCaml成为该课程实践工具

为何选择  MoonBit

编程语言的发展通常较为漫长,像OCaml等经典语言经过30多年的学术验证,才逐步在教学中得到广泛应用。高校在选择教学工具时,通常对语言的成熟度和稳定性有着严格的要求。在这种背景下,北京大学率先将MoonBit引入其函数式编程教学体系。作为一所顶尖学府,选择一门仅诞生2年的编程语言,无疑是一次大胆的创新之举,同时也标志着世界顶尖计算机科学课程对MoonBit的认可。从学校发布的课程大纲来看,北京大学已经完成了大量的教学迁移工作,并计划在今年春季学期顺利实施MoonBit进行相关教学。

MoonBit在工具链和语言特性的支持上,相比传统编程语言具有更好的表达能力和开发体验。它不仅保留了函数式编程的核心范式,还通过现代化工具链、AI编程和内存安全机制的整合,为教学场景提供了从理论到实践的良好衔接。可以预见,随着MoonBit在教学中的应用不断深入,预计未来会有更多的高校采用这门语言。







Part3 MoonBit 月兔的发展历程

从过去一年的发展历程来看,MoonBit月兔获得了全球软件领域顶尖专家和权威机构的认可,年底全球用户数实现了1200%的指数级增长,且在国内外知名高校、海外云服务提供商、国家信息学竞赛组织等多个应用场景中已得到验证,根据MoonBit2024年度社区调查反馈,59.14%的用户已使用MoonBit月兔超过3个月并持续运用到日常开发工作中,在稳定的用户基础上,80%的用户评价MoonBit月兔性能为“优秀”。用户普遍认可其语言特性和平台规模生态,平台已实现从开发到部署的全流程自动化,尤其在微服务架构和云原生应用领域具有独特优势。

试用 MoonBit

https://marketplace.visualstudio.com/items?itemName=moonbit.moonbit-lang

Part4 :彩蛋: MoonBit 编译到  LLVM  的技术实现

MoonBit 的编译流程采用 “两阶段分层优化” 架构,兼顾开发效率与运行时性能。其核心思想是:在包级别进行轻量级即时优化,在链接阶段实施全局深度优化,既满足增量编译的敏捷性,又保障最终产物的性能。



第一阶段



 



第二阶段



 



链接和代码生成



 



第一阶段:包级增量编译( moonc build-package

  1. AST → TAST:类型驱动的代码建模
  2. 从源代码生成 抽象语法树(AST),随后通过类型推断生成 带类型标注的 AST(TAST),为后续优化提供语义基础。
  3. 关键价值:类型信息指导优化决策(如拆箱优化、内联阈值判断)。
  4. TAST → Core IR:高层优化引擎
  5. 将 TAST 降级为 Core IR(基于 ANF 形式的中间表示),执行包级优化:

▪异步函数同步化:消除协程开销,生成状态机代码。

▪逃逸分析:对非逃逸数据结构进行栈分配或拆箱。

▪死代码消除:静态移除未被引用的代码块,减小产物体积。

第二阶段:全局链接与深度优化( moonc link-core

  1. 全局 IR 融合
  2. 将各包的 Core IR 链接为统一中间表示,启动跨包优化:

▪激进内联:突破包边界内联高频调用函数。

▪跨模块死代码消除:识别未被主程序引用的库代码并移除。

  1. IR 降级管线
  2. MCore IR:通过单态化移除泛型,生成类型特化代码。
  3. CLambda IR:闭包消除与 GC 桩代码插入,为后端生成做准备。
  4. 多后端代码生成

工程 编程语言