今天小编分享的科学经验:转用国产编程语言!MoonBit进入北大计算机学院研究生课程,LLVM后端编译器同步发布,欢迎阅读。
国产编程语言MoonBit 月兔,进入北大研究生课堂!
在人工智能驱动全球技术竞赛的当下,国产基础軟體的自主化进程正迈向深水区。
作为这一进程中的代表性力量,MoonBit 月兔以 " 快速、简单、可拓展 " 为核心特质,逐步构建起跨越学术与产业的技术生态。自 2022 年诞生以来,MoonBit 通过多后端架构设计,在编译速度、运行效率和代码体积等关键指标上实现对传统编程语言的超越,覆盖从嵌入式设备到云端服务的全栈开发场景,成为极少数能在工业级性能与教学实践价值间取得平衡的编程语言及开发者工具链。
MoonBit 团队近期双线告捷:LLVM 后端编译器发布,初步测试显示其性能超过主流语言水平,实验性的支持原生后端调试功能;几乎同一时间,该语言被纳入世界顶尖高校的编程语言课程。
MoonBit 的优势
Part1:LLVM 后端发布:场景化分工,双轨编译架构实现能力跃迁
MoonBit 的核心目标是通过性能突破与开发者体验革新,解决现有编程语言在关键场景(如高并发、资源受限环境)中的效率瓶颈。MoonBit 认识到若一门新语言无法在核心性能与易用性上创造代际优势,开发者便不会承认其存在价值。
MoonBit 同步完善 C 后端并推出 LLVM 后端,分别针对嵌入式设备优化与跨平台高性能场景,通过统一工具链实现从硬體层到服务端的全场景覆盖。
性能维度:LLVM 后端复用与 Rust/Swift 相同的工业级优化管线(如自动向量化、LTO),为 MoonBit 提供与现代语言同级的优化潜力。
体验维度:原生集成 DWARF 调试信息,支持 GDB/LLDB 源码级调试,并计划实现运行时数据结构可视化。
生态扩展:基于 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、多后端代码生成
— 完 —
学术投稿请于工作日发邮件到:
标题注明【投稿】,告诉我们:
你是谁,从哪来,投稿内容
附上论文 / 项目主页链接,以及联系方式哦
我们会(尽量)及时回复你
一键关注 点亮星标
科技前沿进展每日见
一键三连「点赞」「转发」「小心心」
欢迎在评论区留下你的想法!