转用国产编程语言!MoonBit进入北大计算机学院研究生课程,LLVM后端编译器同步发布

MoonBit 投稿
量子位 | 公众号 QbitAI

国产编程语言MoonBit月兔,进入北大研究生课堂!

在人工智能驱动全球技术竞赛的当下,国产基础软件的自主化进程正迈向深水区。

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

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

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)

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

原生后端调试支持

在面向虚拟机的JS后端,借助Chrome Debugger,MoonBit真正实现了调试体验的”开箱即用”。

然而,对于面向原生平台的C后端,调试体验却并不完全尽如人意。在C后端中,用户可以调试编译后生成的C文件,但是C文件与输出的原始文件的映射信息在这一过程中依然是缺少的。

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

基于该调试信息生成机制,MoonBit工具链支持开发者使用标准调试工具(如LLDB)对编译产物进行源码级调试。
具体而言,调试器能够自动解析符号映射关系,当执行流到达预设的源码位置时准确触发断点中断。比如,可以在lldb调试器中插入断点,以将程序在指定的位置暂停。

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

未来展望:

LLVM的引入带来的最显著的改进是,MoonBit语言自身编译到原生二进制文件的过程可以完全脱离C编译器进行,避免了C编译器带来的各种兼容性问题。在预编译运行时库的分发支持实现后,MoonBit程序将彻底脱离对C编译器的依赖,仅通过链接器生成原生程序。

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

Part2:进入北大研究生课堂,替代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:类型驱动的代码建模

  • 从源代码生成抽象语法树(AST),随后通过类型推断生成带类型标注的AST(TAST),为后续优化提供语义基础。

  • 关键价值:类型信息指导优化决策(如拆箱优化、内联阈值判断)。

2、TAST→Core IR:高层优化引擎

  • 将TAST降级为Core IR(基于ANF形式的中间表示),执行包级优化

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

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

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

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

1、全局IR融合

  • 将各包的Core IR链接为统一中间表示,启动跨包优化:

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

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

2、IR降级管线

  • MCore IR:通过单态化移除泛型,生成类型特化代码。

  • CLambda IR:闭包消除与GC桩代码插入,为后端生成做准备。

3、多后端代码生成

—  —


学术投稿请于工作日发邮件到:

ai@qbitai.com

标题注明【投稿】,告诉我们:

你是谁,从哪来,投稿内容

附上论文/项目主页链接,以及联系方式哦

我们会(尽量)及时回复你

一键关注 👇 点亮星标

科技前沿进展每日见

一键三连「点赞」「转发」「小心心」

欢迎在评论区留下你的想法!

(文:量子位)

欢迎分享

发表评论