查看原文
其他

编程语言Moonbit开放内测:极快编译速度,极小Wasm体积

IDEA研究院 Moonbit 2023-08-30

点击蓝字

关注我们


作为所有上层软件应用的基石,基础软件支撑着计算机系统软件运行及网络环境。过去几十年,计算机性能飞速增长,但软件体验并未相应提升,优化软件性能的潜力仍然巨大。中国作为全球基础软件行业的后发者,应如何抓住机遇乘势而上,是业界持续努力解决的问题。


了解更多中国程序语言开发背景及行业洞察

推荐阅读:《观点|张宏波:ReScript语言成长启迪及中国程序语言发展机会》


借鉴了核心开发团队过去十几年在OCaml[2], BuckleScript[3], ReasonML[3], ReScript[4], Flow[5]等程序语言及其工具开发上的经验,IDEA研究院基础软件中心自主开发了一套全新的软件核心开发工具——Moonbit(月兔)开发平台[1],涵盖了通用程序语言设计、编译器、构建系统、IDE、部署工具等,在语言设计、编译器和构建系统上实现高度的垂直整合,为用户提供更佳的开发体验和性能,致力打造未来世界级的基础软件生态。


Moonbit IDE已正式对外开放测试

试用地址如下,欢迎前往体验

(桌面版效果最佳)

https://try.moonbitlang.com

(点击文末阅读原文跳转访问)


Moonbit阶段性成果


新一代标准指令集WebAssembly[6]的一等支持:“Wasm”目标代码体积最小仅约132字节,同样的功能在某些情况下,较传统语言如Go[7]语言,输出体积缩小近1万倍。


静态类型检查工具的性能突破:通过工具链的垂直整合,IDE性能得到了极大提升,比传统语言工具链快数个数量级,比如冷启动环境无缓存模式下只需要约几十毫秒就能检测6个package,传统语言工具链则需要几秒甚至几十秒。


可允许离线模式下运行的云IDE:得益于静态类型检查性能的极大提升和轻量化设计,Moonbit的CloudIDE与传统的云IDE采用了完全不同的架构,IDE响应大部分工作在边缘端执行,用户输入能快速反馈,不再依赖网络带宽。


Moonbit运行单文件的毫秒级速度


Moonbit实现重命名与跨文件交互功能



Moonbit:

WebAssembly平台上的最优解决方案


2017年推出的新一代标准指令集WebAssembly,因其高效、轻量、安全的特性,以及可以运行在服务端、边缘端、浏览器等任何计算设备的平台无关性,受到了广泛关注。但现在WebAssembly平台上主流的开发语言依然是C++、Rust[8]这些对程序员来说门槛较高的底层编程语言,而一些应用层的语言如Go语言在WebAssembly上输出的体积巨大,无法充分利用平台优势。因此,在WebAssembly生态内,虽然消费端已有几十种开源的运行时,但优质供给端的匮乏是目前最大的问题。 


为了弥补这一生态缺失,Moonbit平台作为一个后发者,可以更好地支持WebAssembly指令集。基于WebAssembly自底向上的架构,Moonbit为WebAssembly提供了原生支持,在保证输出的代码体积足够小的同时支持多后端(如JavaScript),为前后端开发提供一站式的解决方案。



Moonbit的创新架构


(一)首个为全局优化设计的编程语言工具链


传统编译器与Moonbit编译器优化对比


在进行大规模并行编译时的同时,Moonbit能够储存用于分离式编译的高层IR,在链接时保存完整的代码信息,从而在链接时实现更多优化,提升程序的运行性能。这一模式也能更好地进行无用代码剪枝,输出更小的代码体积。


传统意义上的全局优化在工程上存在很多问题,其中最大的问题是需要大量的内存和时间,并且不能充分利用多核处理器的性能。为了缓解这一问题,Moonbit在语言特性上能更好地支持无用代码删除(DCE),并可达到在多个编译阶段实现DCE,辅以强大的静态类型系统与代码静态分析能力减少无关代码,有效提高程序的整体运行性能,减少程序的体积。


(二)为程序语义分析并行和增量化设计的架构


Moonbit平台的云原生支持


借鉴以往IDE的架构经验,Moonbit在语言设计之初充分考虑了IDE、构建系统、语言设计的协同,实现类型检查和推断的高度并行化和增量化。


目前,业内大多数程序语言的IDE是为桌面操作系统所设计,未能充分考虑在云原生环境下与边缘端的交互。Moonbit通过高度并行化的架构以及对分离编译(separate compilation)的原生支持,能够实现CloudIDE在边缘端的直接运行。Moonbit快速语义分析的技术可以适配到海量的代码库,在更大的代码库也能在百毫秒级别完成IDE响应。初步测试结果显示,Moonbit在冷启动环境下只需要约30ms就能完成数个包的语义检测,而传统语言IDE则需要几秒甚至几十秒。


(三)为人工智能的交互而设计


随着人工智能在大模型领域取得突破,未来会有大量代码是在AI辅助下设计完成,然而这类代码的准确性需要进行验证。Moonbit平台将通过程序语言工具链的原生支持,提高AI代码的正确性和可维护性。Moonbit平台具有以下特性:


1. 强大的类型系统和内置静态检测工具:采用强大的类型系统,在编译期检查类型错误,并提供内置的静态检测工具,可以在编程时发现潜在问题和错误,从而进一步提高代码的正确性。

2. 快速的交互解释输出:帮助AI立即查看代码效果,进行快速迭代和修正。

3. 语言级别的内置expect测试和测试自动生成框架:自动检查输出是否符合预期,并生成测试用例。

4. 对形式化验证更好的工具支持:证明代码在所有情况下符合正确要求,进一步提高代码的正确性。



Moonbit与主流工业语言的比较


Moonbit平台的重要部分之一,是从2022年9月已启动开发的Moonbit语言,现处于高速发展阶段,语法特性和语义已趋于稳定。


Moonbit语言开发结合了多款主流工业语言的经验,在工程上借鉴了Go的简洁设计(如包管理等),在语义上借鉴了Rust和ReScript的类型安全特性,支持代数数据类型和复杂的模式匹配,同时支持一定程度的面向对象特性。而相较于已有语言,Moonbit也具备独特的优势:


(一)Moonbit相比于Go的主要优点


1. Moonbit的类型系统更强大,比如支持模式匹配、代数数据类型、不可变数据结构,以及更多的类型推导。

2. Moonbit是为WebAssembly设计的程序语言,设计之初就考虑全局优化和代码体积,编译出来的WebAssembly体积极小,在内部测试中,某些情况下Moonbit编译出的WebAssembly,能比Go语言编译的体积小1万倍以上。


(二)Moonbit相比于Rust的优点


1. 通过工具链的垂直整合,编译速度和IDE响应速度比Rust快数个数量级。

2. 提供自动内存管理,减轻开发者的心智负担,更适合面向应用开发。


Github Syntax[9]已同时上线

欢迎前往试用,期待社区更多反馈

https://github.com/moonbitlang/moonbit-syntax



展望未来:Moonbit路线图


Moonbit编程语言将以以下路线图为指导,致力于成为未来最具创新力和效率的编程语言。


参考网址:

[1] Moonbit月兔平台官方&Demo试用地址:https://try.moonbitlang.com

[2] OCaml:https://ocaml.org/

[3] BuckleScript/Reason/ReasonML:https://rescript-lang.org/blog/bucklescript-is-rebranding

[4] Rescript:https://rescript-lang.org/

[5] Flow:http://flow.org/

[6] WebAssembly:https://webassembly.org/

[7] Go:https://go.dev/

[8] Rust:https://www.rust-lang.org/

[9] Moonbit Github Syntax:https://github.com/moonbitlang/moonbit-syntax



官方平台账号,欢迎扫码关注


Moonbit


知乎|@张宏波 

Twitter丨@Moonbitlang

Bilibili丨张宏波的基础软件课程

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存