分享

国产MoonBit语言,数字运算速度比 Java 快 15 倍!下一个黑神话?

我们知道黑神话也是一家很小、默默无闻的公司,后来黑神话.悟空发布,一鸣惊人。

如果我们是其中公司的一名成员,那么实现财务自由就不远了。

今天又发现了一家很有潜力的小公司,能否成为黑神话一样的公司,只能由时间来验证。

但是我看到了他的理想和抱负。

对于开发语言,99%都说国外语言,我们只能学习的份。

然而国内能冒出这样的语言,看到后,还是很兴奋的。

除了华为、阿里这样的大厂,能开发出新的语言或者组件,对于小公司来说,这是很大的挑战,然而确实有人在挑战。

这是一个好的开始。

如同黑神话一样,打破了以往大家对国内技术失望的想法。

MoonBit目前由40多位贡献者,如果做的不错,可以成为合作者、职员。

对于有精力、想做副业的同学,这也是一个很好的项目。

当然,如果我们抱着想发财的想法,可能也是不太合适的,毕竟这个谁也说不准。

下面是关于MoonBit的详细介绍和相关文档等。  


MoonBit 于 2023 年 8 月推出,是一款具有多后端支持的 AI 和云原生语言工具链,在WebAssembly和JavaScript上均提供卓越的性能。

10月17日,MoonBit 原生后端的发布,该后端可将 MoonBit 直接编译为机器代码。MoonBit 原生后端允许在硬件上进行原生编译和直接执行,而无需虚拟机。我们还很高兴地看到,MoonBit 原生后端比传统语言具有显著的性能优势,在某些情况下,其运行速度比 Java 快 15 倍。

为什么使用原生
编程语言一般分为虚拟机语言和原生语言两大类。虚拟机语言,比如 Java、Kotlin 和大多数脚本语言,运行时都需要虚拟机来动态解释程序。原生语言,比如 C/C++、Rust、Go,则直接编译为机器码,可以直接在硬件上执行,不需要虚拟机。大多数情况下,编程语言的性能和开发体验很大程度上取决于编译器的好坏。原生编译提供了更大的性能潜力,但也给编译器的实现带来了更多挑战。

扩大
目前,MoonBit 支持 WebAssembly 和 JavaScript 后端,这两者都拥有广泛的生态系统支持。然而,在高性能至关重要的场景中,这些后端可能会面临限制。通过支持原生后端,MoonBit 可以满足高性能应用程序的需求,进一步增强其性能并扩展其应用场景。

平衡性能与开发者
平衡性能和开发者体验是原生语言设计中的常见挑战。在典型的原生语言(如 C、C++ 和 Rust)中,用户必须投入大量精力管理内存等资源,手动控制许多底层细节,这降低了开发体验和效率。一些托管语言(如 Java、Kotlin 和 Swift)也提供编译为原生的选项,但它们的执行时间和内存消耗仍然远远落后于真正的原生语言。在 MoonBit 原生后端中,我们采用了更现代的顶层设计,实现了性能和开发者体验的双重优势。



是时候展示数据了。在实际的性能比较中,MoonBit 原生后端在数值计算和内存管理性能上明显优于 Java、Swift 等编程语言,同时有效地平衡了性能优势和开发者体验。


数值计算:比Java

由于本机语言能够优化内存布局并利用硬件加速指令,因此本机语言相对于基于虚拟机的语言的性能优势在数字计算中尤为明显。

以下是使用 Cooley-Tukey 算法对 MoonBit 和 Java 实现的 FFT(快速傅里叶变换)的比较。FFT 广泛用于信号处理和压缩。在基准测试中,MoonBit 的性能比 Java 提高了15 倍以上,比最先进的商业 AOT Java 编译器 GraalVM 提高了4 倍以上。该算法涉及大量数值计算和数组操作,使其成为语言性能基准的良好指标:


5.png

MoonBit 在不牺牲开发体验的情况下实现了显著的性能提升。MoonBit 像 Java 一样自动管理内存,因此用户无需手动管理内存。此外,MoonBit 的现代语言设计提供了比 Java 更高级的功能,以增强开发人员的体验。

对于数值计算,性能主要取决于两个因素:计算本身的优化和语言本身的开销。C/C++ 在这方面表现出色,这不仅是因为编译器优化,还因为语言本身的开销很小。对于具有自动内存管理的高级语言,消除高级语言功能的开销是提高性能的关键。此外,由于现代 CPU 的缓存机制,数据布局对性能也至关重要。MoonBit 通过我们现代的顶层设计实现了高运行时性能和出色的开发体验:

  • MoonBit 的语言设计简洁,最大限度地减少了额外的性能开销,其数据结构更加紧凑且缓存友好。

  • MoonBit 采用多层 IR(中间表示)架构,并在其编译器中进行全局优化,从而能够消除泛型等高级功能的开销,并全局优化数据布局。



内存管理:优于 Java 和Swift
虽然数值计算任务反映了语言的性能基准,但实际应用通常涉及大量内存分配和对内存数据结构的操作。得益于定制的内存管理系统,MoonBit 原生后端在内存操作性能和使用率方面也表现出色,超越了具有高性能垃圾收集器 (GC) 的 Java 和另一种具有自动内存管理并编译为原生二进制文件的语言 Swift。



虽然数值计算任务反映了语言的性能基准,但实际应用通常涉及大量内存分配和对内存数据结构的操作。得益于定制的内存管理系统,MoonBit 原生后端在内存操作性能和使用率方面也表现出色,超越了具有高性能垃圾收集器 (GC) 的 Java 和另一种具有自动内存管理并编译为原生二进制文件的语言 Swift。


6.png


这里的基准测试来自论文《Perceus: Garbage Free Reference Counting with Reuse》。基准测试程序包含大量内存分配,很好地展示了内存管理性能。

自动内存管理系统通常分为两类:跟踪 GC 和引用计数。跟踪 GC 往往提供更好的吞吐量,但会消耗更多内存;而引用计数则具有更低的内存消耗和更好的响应能力,尽管其吞吐量通常较差。

由于 MoonBit 的多层优化和自定义的内存管理系统,MoonBit 在大多数情况下都能达到优于或接近 Java 的高性能跟踪 GC 的性能,并远远超过 Swift 的引用计数。此外,MoonBit 的内存消耗略优于 Swift,在某些基准测试中甚至比 Java 占用的内存更少。

在嵌入式和物联网设备中,计算和内存资源都非常有限。因此,编程语言需要在执行时间和内存消耗方面表现良好,才能很好地适应嵌入式/物联网开发。由于硬件限制,开发人员经常求助于 C/C++ 等低级语言来获得更好的性能。然而,这大大增加了认知负担并降低了开发效率。MoonBit Native 提供了一种平衡执行性能、内存消耗和开发体验的新可能性。

从以上两个任务可以看出,MoonBit 原生后端虽然还处于早期阶段,但未来充分释放硬件性能的潜力巨大。



整合安全性和可靠性

以 C/C++ 为主导的原生生态在整个软件生态中占据着至关重要的地位,操作系统底层 API、高性能计算库、llama.cpp、ggml 等 AI 张量库都依赖 C ABI 进行对接,MoonBit Native 可以使用 C ABI 与第三方库无缝对接,为 MoonBit 解锁新的应用场景。

MoonBit Native 采用多层 IR 设计,最后一层 IR 是 C 的子集。这使得 MoonBit 能够与 C 顺利互操作,而无需繁重的 FFI(外部函数接口)开销,从而充分利用现有的高性能 C 库。未来,MoonBit 将提供标准化的 C 语言调用约定,从而能够集成现有的开源 AI 推理库,以实现高性能计算和边缘 AI 推理,以及编写直接调用操作系统 API 的高性能应用程序和服务。

与 C/C++ 等系统编程语言相比,MoonBit 在保持高性能的同时,更注重内存安全性和可靠性。MoonBit 主要通过编译器优化来确保内存安全,从而消除 GC 开销,同时又不影响开发者的体验。在关键场景中,MoonBit 逐渐引入模态性等前沿设计来增强确定性。这种方法降低了 MoonBit 的学习曲线,让更多开发者能够从其生态系统中受益。



试用 MoonBit Native
下载MoonBit,或者在VS Code中安装MoonBit插件并按照提示进行一键安装。



github地址:
https://github.com/moonbitlang/



官网地址:
https://www.moonbitlang.com/

4.png


开发相关文档:
https://moonbitlang.github.io/moonbit-textbook/

1.png

https://moonbitlang.github.io/moonbit-textbook/program-design/

2.png


https://moonbitlang.github.io/mo ... ild-system-tutorial

3.png


最新经典文章,欢迎关注公众号

社区创作者介绍



没找到任何评论,期待你打破沉寂

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条