摘要:四十多年来,C 和 C++ 因其性能爆炸快,接近硬件极限的优势,一直被用于编写操作系统、游戏引擎等“工业级项目”,但随着时间的流逝,因其复杂、内存安全和编译慢等问题,它们正在逐渐被打上落后的标签。
前言
四十多年来,C 和 C++ 因其性能爆炸快,接近硬件极限的优势,一直被用于编写操作系统、游戏引擎等“工业级项目”,但随着时间的流逝,因其复杂、内存安全和编译慢等问题,它们正在逐渐被打上落后的标签。
在此背景下,Rust 作为一门兼顾性能与安全性的系统级语言迅速崛起,被许多开发者视为“面向未来的系统语言”。但值得注意的是“性能天花板”并非只有 Rust 才能触及。
最近,国产编程语言 MoonBit 引起了我的注意,这一门新的国产编程语言于今年 6 月达到 Beta 正式版,标志着它从“实验性技术”演进为适用于企业正式场景的先进工具。根据公开数据( openvsx 和 vscode) 显示 MoonBit 全球用户数已接近 10 万;来自 GitHub 数据显示 MoonBit 积累代码行数超1000 万;生态上配套包收录近两千个。
本文将通过具体示例展示的应用场景与性能收益,尝试解答核心问题:是否存在一种编程语言,兼具 Rust 的安全性与性能优势,又能在易用性、AI 友好度以及开发效率上更进一步?
性能表现:MoonBit 超越 Rust 约33%
数值计算性能对比结论:
Rust 则通过 SIMD 指令优化(如 AVX2)实现接近 C++ 的性能,通用场景下与 Rust 和 C++ 差异通常小于 5%。
MoonBit 在快速傅立叶变换(FFT)等数值计算中,性能优于 Rust 约 33%,对比 Swift 提升 133%。相比于此前 MoonBit 中的复合类型只能进行堆分配,新引入的值类型(Value Type)特性允许了复合类型被分配在栈上,相比此前明显提升效率。
MoonBit 的性能突破主要来自语言引入的两个新特性:Bits Pattern与Value Type。这两项改进不仅提升了语言的表达能力,同时在 Wasm 和 Native 后端带来了显著的效率优化。
1、Value type(值类型)通过 标注,MoonBit 允许 struct 和 tuple struct 以值类型的方式存储,从而避免了额外的堆分配和 GC 开销,显著提高运行速度。以复数结构体为例,加上 之后就能在无需动态分配的前提下实现高效的快速傅立叶变换(FFT)。
pub(all) struct Complex { real : Double imag : Double}在基准测试中,这种实现方式比未使用 value type 的情况快得多。对比 Rust 与 Swift 的同类实现,MoonBit 在数值计算任务上分别取得了 33%与133%的性能优势。
所有实验均在一台 Apple M1 Pro(10 核 CPU,含 8 个性能核与 2 个能效核)、32 GB 统一内存的 MacBook Pro 上完成,操作系统为macOS 14.5(Darwin 23.6.0)。
软件环境包括 Rustc 1.89.0(2025-08-04)、Swift 6.1.2(swift-6.1.2-RELEASE,arm64-apple-macosx14.0)以及MoonBit 0.6.26。
FFT 的核心代码示例如下,完整的基准程序地址:https://github.com/moonbit-community/benchmark-fft
左 Rust、中 Swift 、右 MoonBit
2、Bits pattern:像写协议规范一样解析字节序列Bits Pattern则面向字节级协议解析场景。它允许在模式匹配中直接抽取任意长度的比特片段,并支持大小端拼接。代码的写法与协议文档几乎一致,开发者无需再手写移位、掩码和端序处理逻辑,这样一来便于编写与检查,又能让注意力集中在协议本身的语义上。
1. 解析 IPv4 报文头
pub fn parse_ipv4(ipv4 : @bytes.View) -> Ipv4 { match ipv4 { [ // version (4) + ihl (4) u4(4), u4(ihl), // DSCP (6) + ECN (2) u6(dscp), u2(ecn), // Total length u16(total_len), // Identification u16(ident), // Flags (1 reserved, DF, MF) + Fragment offset (13) u1(0), u1(df), u1(mf), u13(frag_off), // TTL + Protocol u8(ttl), u8(proto), // Checksum (store; we'll validate later) u16(hdr_checksum), // Source + Destination u8(src0), u8(src1), u8(src2), u8(src3), u8(dst0), u8(dst1), u8(dst2), u8(dst3), // Options (if any) and the rest of the packet .. ] => { let hdr_len = ihl.reinterpret_as_int * 4 let total_len = total_len.reinterpret_as_int guard ihl >= 5 guard total_len >= hdr_len guard total_len ipv4.length let header = ipv4[:hdr_len] // checksum must be computed with checksum field zeroed guard ipv4_header_checksum_ok(header, hdr_checksum) let options = ipv4[20:hdr_len] let payload = ipv4[hdr_len:total_len] Ipv4::{ ihl, dscp, ecn, total_len, ident, df: df != 0, mf: mf != 0, frag_off, ttl, proto, hdr_checksum, src: Ipv4Addr(src0, src1, src2, src3), dst: Ipv4Addr(dst0, dst1, dst2, dst3), options, payload, } } ... }}这种模式化的表达还为协议解析器的自动生成提供了可能。由于代码结构与协议规范高度一致,AI 工具可以直接根据 RFC 或 IDL 描述生成匹配代码,开发者只需提供协议说明,即可得到高效且可读性强的实现,从而降低了协议开发与验证的成本,并减少了人工编码出错的风险。
2. 高效的字节序列比较
在性能方面,Bitstring Pattern 也能带来优势。例如在代码示例中,我们一次性从字节序列中提取 8 字节并进行比较,结合 le 后缀标注小端模式,这种写法在小端架构的机器上运行更快。与传统逐字节比较相比,它能更好地发挥底层指令的能力,显著提升执行效率。
pub fn equal(bs1 : @bytes.View, bs2 : @bytes.View) -> Bool { if bs1.length != bs2.length { return false } loop (bs1, bs2) { ([u64le(batch1), .. rest1], [u64le(batch2), .. rest2]) => { // compare 8 bytes at a time if batch1 != batch2 { return false } continue (rest1, rest2) } (rest1, rest2) => { for i in 0.. if rest1[i] != rest2[i] { return false } } return true } }}综上,MoonBit 引入的 Value Type与Bits Pattern分别针对数值计算与协议解析两大核心场景,为语言带来了更强的表达力和更高的执行效率。二者的结合,使得 MoonBit 在处理底层数据和计算密集型任务时,保持语法简洁的同时展现出媲美甚至超越主流编程语言的潜力。
总的来说 MoonBit 和 Rust 都具备安全,高效,可靠的特性,甚至出人意料的是国产的 MoonBit 相比“舶来品”在一些方面更为出色。
编译速度:在对比 MoonBit 与 Rust 编译器的性能时,可以看到在相同条件下编译 626 个包,MoonBit 用时 1.06 秒,而 Rust 用时9.01 秒,差距近8.5 倍。
数据来源:https://github.com/moonbitlang/moonbit-docs/tree/main/legacy/benchmark/fibonacci
安全性:两种语言均实现了内存安全,但MoonBit通过编译优化和渐进式GC对应用开发更友好,而 Rust 在需要零开销和绝对控制权的底层开发上根基更深。
作为现代系统编程语言的代表,MoonBit 和 Rust在设计理念和学习曲线方面存在显著差异:MoonBit 作为新兴语言,特别注重降低学习门槛;而 Rust 学习曲线相对陡峭,以往 C 被吐槽最多的就是难学难写,现在 Rust 竟然获得比 C 还难入门的共识。
引用:
「83 岁的 Unix 联合创始人 &《C 程序设计语言》作者 Brian Kernighan 上月在 “Vintage Computer East” 节上演讲时被问到:“您觉得 Rust 有可能取代 C 吗?还是说这只是一场迟早要退潮的炒作泡沫?”
Kernighan 听到问题后大笑,并回答: 1、「自己只写过一个 Rust 程序,所以意见仅供参考,但那次经历令他印象深刻,写 Rust 的过程让我觉得很痛苦,我实在没法理解那些为了内存安全设计的机制,而我的程序里根本没有内存问题!”」
2、Rust 最大的问题还是性能!它的支持体系所谓的 crate、barrel 之类的东西庞大得难以理解,而且运行缓慢。”
3、“它的编译器很慢,生成的代码也很慢……”
4、“写一个在其他语言里只需要五分钟的程序,却花了我好几天……”Kernighan 也承认这可能是他“过于苛刻”,但仍强调:“至少我不认为 Rust 会马上取代 C。”」
总的来说 Rust 的问题源于缺乏垃圾回收系统,在底层开发中保障内存安全,要求开发者一开始就要考虑精确控制变量的生命周期和内存使用。
相较而言,MoonBit 通过内置垃圾回收GC实现自动内存管理使编程变得更容易,这使得它与 Rust 区别开来。适用于以业务开发为主的应用环境。它还提供了丰富的安全特性,包括模式匹配、代数数据类型和特设多态性,以支持面向数据的编程。
MoonBit 相较 Rust 的易学性可以通过一个简单的 Palindrome 示例来说明:
pub fn is_palindrome_codepoints(s : String) -> Bool { loop s [:] { | [ _ ] => true [a, ..rest, b] => if a == b { continue rest} else {false} }}MoonBit
Bool {\n loop s [:] {\n | [ _ ] => true\n [a, ..rest, b] => if a == b { continue rest} else false\n }\n}"},"attribs":{"0":"*0|2+1y*0+e*1+1*0|3+28*0+1"}},"apool":{"numToAttrib":{"0":["author","7350964049179885572"],"1":["author","7482706800303931420"]},"nextNum":2}},"type":"text","referenceRecordMap":{},"extra":{"channel":"saas","isEqualBlockSelection":true,"pasteRandomId":"d82fa7d7-9a93-4096-aa96-73f2f6bf842b","mention_page_title":{},"external_mention_url":{}},"isKeepQuoteContainer":false,"isFromCode":true,"selection":[{"id":68,"type":"text","selection":{"start":0,"end":166},"recordId":"CS0edpMlmobwx5xRXo6cY4fpneg"}],"payloadMap":{},"isCut":false}" data-lark-record-format="docx/text">
pub fn is_palindrome_codepoints(s: &str) -> bool { let mut it = s.chars; loop { match (it.next, it.next_back) { (None, None) => return true, (Some(_), None) | (None, Some(_)) => return true, (Some(a), Some(b)) if a == b => continue, (Some(_), Some(_)) => return false, } }}Rust
bool {\n let mut it = s.chars;\n loop {\n match (it.next, it.next_back) {\n (None, None) => return true,\n (Some(_), None) | (None, Some(_)) => return true,\n (Some(a), Some(b)) if a == b => continue,\n (Some(_), Some(_)) => return false,\n }\n }\n}"},"attribs":{"0":"*0|a+9v*0+1"}},"apool":{"numToAttrib":{"0":["author","7350964049179885572"]},"nextNum":1}},"type":"text","referenceRecordMap":{},"extra":{"channel":"saas","isEqualBlockSelection":true,"pasteRandomId":"b90faaf6-d544-4d3b-a0ab-887e3040821e","mention_page_title":{},"external_mention_url":{}},"isKeepQuoteContainer":false,"isFromCode":true,"selection":[{"id":121,"type":"text","selection":{"start":0,"end":356},"recordId":"Z2cGdNM6boHPBcx5CGOc32IRn5d"}],"payloadMap":{},"isCut":false}" data-lark-record-format="docx/text">
目前软件行业成为被 AI 大模型影响最快、最深的领域。据 Stack Overflow 年度报告数据显示,约7成的开发者使用AI编程助手提升个人生产力。
随着 AI 时代的加速发展,也带来一个疑问,未来随着大模型之间能力的抹平,是否软件公司之间的壁垒被完全抹除?又如何再提升 AI 编程助手的效率呢?
我似乎从 MoonBit 的身上找到了答案。
MoonBit 相较其他编程语言有一个明显的优势,以团队形式驱动(非基金会&社区),灵活高效的体质让他抓住了这波 AI的机遇,官方透露在 MoonBit 编程语言设计之初就考虑未来如何更好的 AI 大模型交互,MoonBit 从底层设计一整套 AI 原生的开发者工具,包括编程语言的设计、编译器、调试器、包管理等。在各个环节给予大模型最有效的反馈。
还有最近亮相的 MoonBit 专属的代码智能体 MoonBit Pilot ,目前看这也是全球首个自底向上为单个编程语言打造的专属代码智能体。
MoonBit Pilot 在现有大模型能力之上展现出强大的潜力:不仅能零人工干预的生成完整软件库,并附带结构化文档与高质量测试用例,还在软件工程中最关键的环节之一「大规模代码重构」中展现出领先优势。在这一点上,它的表现甚至超过了“主流编程语言 + 最强大模型”的组合。
1、真实场景测试:零人工干预合成高质量软件库引用 一个实测案例, MoonBit Pilot 一键生成 TOML 语法解析器作为示例来展示其软件合成能力:
TOML 是一种配置文件格式,设计初衷是简单易读、易写,并且能清晰表达嵌套的数据结构。它常用于项目配置文件,特别是在 Rust 生态中被广泛使用。
我们观察到,在初始阶段,由于主流大模型尚未接触过 MoonBit 语料,生成的代码存在明显偏差,无法直接产出有效结果。然而,借助 MoonBit 自研工具链的自动反馈与精确修复机制,模型无需人工干预,便能逐步优化并修正自身输出,最终成功生成语义正确的代码,并自动补全测试用例,整个过程耗时仅约 6 分钟。
不只是 TOML,MoonBit Pilot 在很短时间零人工干预合成了 ini-parser(https://github.com/bobzhang/ini-parser),lisp 解释器(https://github.com/bobzhang/lisp-machine-MoonPilot)等更多示例,而这些合成的软件库也将用于下一代基模的训练,更好的提升 MoonBit Pilot 的软件合成能力。
值得一提的在学习了 IPv4 的解析示例后,MoonBit Pilot 能够以同样的模式匹配风格自动生成 IPv6 解析器的实现。换句话说,上文提到的 Bitst Pattern 不仅提升了人工编写的效率,还为 AI 驱动的代码生成打开了更高层次的应用空间。
MoonBit 作为新兴的国产编程语言,在特定领域已展现出超越包括 Rust 的主流编程语言的潜力,在数值计算和协议解析等特定领域,MoonBit 通过设计级优化(如值类型)实现性能突破。
MoonBit 能否实现全面超越,还需时间检验。但可以明显看到其在 Wasm 模块开发、AI 原生应用等新兴方向已有明显的差异化布局;而在传统系统编程领域,预计仍有 3–5 年的追赶周期。值得关注的是,MoonBit 团队提出的「AI 原生工具链」战略,或许将成为撬动新一代开发范式的关键变量。
2025 MoonBit 全球编程创新挑战赛已开赛,推荐想要快速了解学习这门编程语言的同学,参与报名~
参考:
Brian Kernighan “Vintage Computer East” 节演讲:https://www.youtube.com/watch?v=WEb_YL1K1Qg&t=3473s
来源:CSDN一点号