华为的仓颉,这一次是MoonBit(月兔)。

MoonBit由中国开发者团队创建的编程语言(类似 Rust,支持 GC),由粤港澳大湾区数字经济研究院(IDEA 研究院)基础软件中心负责人张宏波领导的团队开发,目标是打造下一代智能开发平台。

  • 官网:MoonBit | moonbitlang.cn

更确切地说,MoonBit 是一个用于云计算和边缘计算的 WebAssembly 端到端编程语言工具链,集开发、编译、测试、部署于一体 —— 涵盖了通用程序语言设计、编译器、构建系统、编辑器和语言服务器、IDE、部署工具等。

国产编程语言MoonBit(月兔)发布!_错误处理

MoonBit 去年发布了 alpha 版本,经过一年的迭代开发,MoonBit 现已到达了 beta 预览版的里程碑,其团队表示,在核心语言特性上,MoonBit 媲美、甚至超越了大部分主流语言的 1.0 版本。

据介绍,MoonBit beta 预览版比大部分主流语言更早推出现代化泛型、精准错误处理和高效迭代器等重要特性。

MoonBit 核心特性:

现代化的泛型系统

现代语言复杂性的很大一部分在于类型系统的设计,很多主流工业语言,比如 Java,Go 在 1.0 版本推出很多年以后才会渐渐完善泛型的支持,但是这会对生态造成撕裂。

MoonBit 在 beta 预览版本已经完成了泛型和 ad-hoc polymoprhism,而且 MoonBit 在保持极快的编译速度的同时,提供了零开销的泛型支持。

准确的错误处理

错误处理是现代语言设计中的重要组成部分,大部分编程语言在静态分析中,彻底放弃错误处理的支持,这意味着任何函数都可以抛出异常,很难写出高可靠性的代码。

MoonBit 通过准确的控制流分析,可以完全在编译时期跟踪函数的错误。这一过程几乎完全由编译器自行推导,且不像 Java checked exception 那样过于繁琐,降低用户的心智负担。

高效的迭代器

传统的编程语言的迭代器会产生频繁的装箱操作,导致其性能比普通的循环要糟糕很多。

MoonBit 创新地使用了零开销的迭代器设计,可以让用户写出优雅代码的同时保持程序的性能。


据介绍,MoonBit 的编译性能和运行时性能具有出色表现。

通过专为多级中间表示(IR)定制的全局优化,不仅改善了内存布局,减少了缓存未命中率,还为数据和控制流分析提供了一个优越的环境,从而确保了编译和运行时的高性能。

从编译速度来看,MoonBit 编译 626 个包(package)只需 1.06 秒,比 Rust 快了近 9 倍,运行时间仅为 Go 的 35 分之一

国产编程语言MoonBit(月兔)发布!_编程语言_02

此外,MoonBit 在输出 Wasm 代码体积上相较于传统语言有显著优势。

MoonBit 通过 WebAssembly(Wasm)组件模型,在生成代码时实现了显著的体积优化。相比其他编程语言,MoonBit 编写的 Wasm 组件代码体积大幅减少。

例如,在编译一个简单的 “Hello World” HTTP 服务器时,MoonBit 的输出文件大小仅为 27KB,而 WasmCloud 提供的 http-hello-world 模板中 Rust 的输出为 100KB,TypeScript 为 8.7MB,Python 更是高达 17MB。

国产编程语言MoonBit(月兔)发布!_泛型_03

借助前文提到的创新错误处理机制,MoonBit 有效解决了传统编译技术在错误处理机制转换中遇到的适用范围有限和内存开销大的问题。

通过静态分析源程序中的错误处理代码,并根据目标编程语言的特性进行转换,MoonBit 扩大了适用语言范围,减少了内存开销,同时提升了代码的安全性和稳定性

MoonBit 作为一门多范式编程语言,在保持语言简单性的同时,也侧重于提供数据处理的最佳体验。

MoonBit 通过原生支持 JSON 处理、Iter 类型和模式匹配实现高效数据处理,在语法设计上兼具动态语言的灵活性和静态语言的安全高效,直观而简洁地进行对数据的解析和转换。

国产编程语言MoonBit(月兔)发布!_泛型_04

JSON 处理

 MoonBit 在数据处理上的语法设计旨在优化常见的数据处理场景,解决传统方法中由于生成多个中间数组而导致的性能问题。

在 Iter 性能对比中,MoonBit 的数据处理速度达到了 JavaScript 的 25 倍之多

国产编程语言MoonBit(月兔)发布!_错误处理_05

目前,MoonBit 已支持 Wasm 与 JS 后端。

未来,MoonBit 计划支持 native 后端。这意味着无论是 UI、客户端、边缘计算还是系统编程,用户都能在 MoonBit 平台上找到适合自己的使用场景,从而使生态能够覆盖所有可能的应用场景。

国产编程语言MoonBit(月兔)发布!_泛型_06