新闻动态

听见我们的声音

由 IDEA 研究院基础软件中心自主研发的 MoonBit 编程语言推出异步编程与网络库,正式迈入能够支撑大规模云服务、AI Agent 平台和高并发应用的新阶段,结合语言自身优势,MoonBit 将为 Agent 应用提供更高效、稳定的开发解决方案。

大多数主流语言的发展历程中,异步能力往往是经历多年迭代后才逐步完善的成果。作为一门仅诞生三年的新语言,MoonBit 在 Beta 版本发布后的短短半年内,实现异步能力,补齐了关键特性的“最后一块拼图”,这也标志着 MoonBit 完成从语言演进到生态成熟的重要跨越。

异步网络库的发布,让开发者能够构建高并发、低延迟的网络服务,使开发者能够在 Web、原生、嵌入式等不同环境中保持一致的并发编程体验,极大简化了复杂系统的开发。

拥有异步能力的 MoonBit 直接解锁大量智能体相关的端到端应用场景,打开从对话代理到分布式服务、从实时数据处理到多智能体协作的全新可能。

结合 MoonBit 在类型系统、编译性能和 AI 驱动的开发体验的独特优势,MoonBit 将为 Agent 应用提供更高效、稳定的开发解决方案。

与此同时,MoonBit 生态正快速成长,现已有数十万用户加入实践,社区积累 2000+ 个包,涵盖编译、测试、可视化、系统编程等多个领域。在语言特性、工具链与生态的合力推动下,MoonBit 正加速成长为 AI 时代的软件基础设施,稳步走向面向 AI 时代的软件交付平台

本文将结合智能体开发的实际案例,展示异步能力如何在实践中落地,开启 MoonBit 在应用层面上的新篇章。

 MoonBit 中的异步编程 

一、无需 await 的简洁语法
在 MoonBit 中,可以用 async 关键字声明异步函数,异步函数之间可以相互调用,并支持 async fn main 作为程序入口,以及 async test 来测试异步逻辑。

与许多语言不同,MoonBit 在调用异步函数时无需额外使用 await。编译器会根据类型自动推断调用方式,而 IDE 会以斜体高亮异步调用,让代码在保持简洁的同时仍具可读性。

因此,在 MoonBit 中进行异步编程几乎与同步编程一样自然:

二、结构化并发设计
在异步编程中,任务之间的切换使控制流远比同步程序复杂,加之网络通信等场景常常伴随不可预期的错误,使得健壮的错误处理成为一项长期挑战。传统的非结构化模型将任务视为全局独立的实体,除非显式取消,否则会在后台持续运行。当一组并行任务中的某一分支出现异常时,其余分支若未被及时终止,就会形成孤儿任务(orphan task),长期占用资源,甚至影响系统稳定性。

MoonBit 的解决方案是结构化并发。在这一模型下,任务呈现嵌套的树状结构:父任务的生命周期依赖于所有子任务,只有当子任务全部结束时父任务才会终止;若某一子任务失败,系统会自动取消其他子任务,并将错误逐级向上传递。这使得异步程序的错误处理在语义上更接近同步程序,既提升了可预测性,也大幅降低了开发复杂度。

下面的例子是 RFC 8305 中描述的 happy eyeball 算法【1】 ,它能很好演示结构化并发理念的优越性。一个网络域名可能对应多个 IP 地址,而 happy eyeball 就是一个自动的 IP 选择算法,它会依次尝试列表中的每个 IP,尝试发起连接。在每次连接尝试后,如果 250 毫秒内连接没有成功,就继续尝试下一个 IP。任何时候,只要有任何一个连接成功,就关闭其他连接,选择成功的那个连接。

MoonBit 中,happy eyeball 算法的实现如下:

MoonBit 中的 happy eyeball 实现非常简洁,几乎就是对算法描述的直接翻译,但它能自动照顾到算法中的所有细节:作为对比,Python 的 asyncio 库中的 需要约 200 行代码,可读性也不如 MoonBit 版本。

 

 性能对比 

MoonBit 的异步运行时 moonbitlang/async 目前已支持 Linux 与 macOS 的 native 后端,底层基于线程池并结合 epoll/kqueue 实现。虽然仍处于早期阶段,这一运行时已经展现出出色的性能表现。

其设计思路与 Node.js 类似:采用单线程、多任务模型。在这一模式下,异步程序中的同步部分始终在同一线程上执行。对开发者而言,这带来显著的简化效果——只要不涉及异步调用,程序的行为就与单线程应用一致,无需额外加锁,也不必担心竞争条件(race condition)等并发错误。

这种架构的代价是无法同时利用多个 CPU 核心进行计算。然而,异步程序往往以 I/O 密集型为主,计算开销相对有限。在这种场景下,即便只依赖单核,依然能够发挥出不俗的性能。这也意味着,MoonBit 在保证开发体验简洁性的同时,能够满足高并发 I/O 应用的性能需求。

为了检验 MoonBit 异步运行时的性能,我们搭建了一个简单的 TCP 服务器:它会把收到的数据原样返回给客户端。这个测试几乎没有计算成分,因此能够直接反映运行时在高并发场景下的处理能力。

在测试中,我们同时维持多个连接,不断收发数据,并记录吞吐量和响应延迟。结果显示,MoonBit 在并发连接数不断增加的情况下,依然保持了优异的吞吐表现和极低的响应延迟,充分体现了其运行时系统的高效性和稳定性。

对比的对象是 Node.js 和 Go 语言。性能测试的结果如下:


测试结果显示,MoonBit 在 200 到 1000 个并发连接下始终保持最高吞吐量,在高并发场景中明显优于 Node.js 和 Go。这表明其异步运行时具备出色的扩展性。


在高并发场景下,MoonBit 的平均延迟始终保持在个位数毫秒,即便在 1000 个连接时也只有 4.43ms;相比之下,Node.js 延迟超过 116ms。这意味着 MoonBit 的异步运行时能够在大规模连接下依然保持快速响应。

下面是一个 HTTP 服务器的例子。相比 TCP 服务器,HTTP 例子需要进行 HTTP 协议的解析,有更多的计算成分,不是单纯的 IO。得益于 MoonBit 语言本身的优秀性能,在这个测试中 MoonBit 依然表现良好。这个测试会使用 (https://github.com/wg/wrk) 工具,通过多个连接不断向 HTTP 服务器发送 GET / HTTP/1.1 的请求,服务器应当返回一个空的回复。测试会记录服务器每秒处理的请求数以及每个请求的平均延迟。测试的结果如下:

可以看到,MoonBit 在所有并发连接数下的请求处理效率和延迟都稳定高于 Node.js 和单线程的 Go。这里,Go 的 HTTP 服务器 net.http 可以使用多个 CPU 核心,为了和 MoonBit 及 Node.js 直接比较,测试时通过 GOMAXPROCS=1 限制了 Go 只使用一个 CPU 核心。上述两个测试中的代码都非常简单,因此 Node.js 测试中 javascript 代码的占比很小,更多反映的是它后端的 libuv,一个使用 C 编写的事件循环库的性能。

 

 实例:使用 MoonBit 编写一个 AI agent 

目前,MoonBit 的异步支持已经覆盖大部分基础应用,能够用于编写各种完整的异步程序。例如,下面是一个使用 MoonBit 编写的 AI agent 的例子。

例子只包含核心的循环部分,完整代码请参考【2】:

这个 AI agent 的例子看上去和普通的同步代码几乎没有区别,但这段代码其实是完全异步的。它可以模块化地和其他异步代码自由组合,例如监听用户输入、同时运行多个 agent 等等。当程序需要实现较为复杂的异步控制流时,MoonBit 的结构化并发设计也能极大地简化程序、提升程序的健壮性。因此,对于 AI agent 等典型异步应用,MoonBit 的异步编程系统是理想选择。

 


欢迎开发者们使用 MoonBit,探索 AI 时代下全新的应用构建之路。
点击深度探索MoonBit

reference
[1] happy eyeball 实现
[2] 代码实现

MoonBit 再添异步能力,实现 AI Agent 高效与稳定开发

日期:2025-09-28
  • 分享:
MoonBit推出异步编程与网络库,正式迈入可支撑大规模云服务、AI Agent平台和高并发应用的新阶段

由 IDEA 研究院基础软件中心自主研发的 MoonBit 编程语言推出异步编程与网络库,正式迈入能够支撑大规模云服务、AI Agent 平台和高并发应用的新阶段,结合语言自身优势,MoonBit 将为 Agent 应用提供更高效、稳定的开发解决方案。

大多数主流语言的发展历程中,异步能力往往是经历多年迭代后才逐步完善的成果。作为一门仅诞生三年的新语言,MoonBit 在 Beta 版本发布后的短短半年内,实现异步能力,补齐了关键特性的“最后一块拼图”,这也标志着 MoonBit 完成从语言演进到生态成熟的重要跨越。

异步网络库的发布,让开发者能够构建高并发、低延迟的网络服务,使开发者能够在 Web、原生、嵌入式等不同环境中保持一致的并发编程体验,极大简化了复杂系统的开发。

拥有异步能力的 MoonBit 直接解锁大量智能体相关的端到端应用场景,打开从对话代理到分布式服务、从实时数据处理到多智能体协作的全新可能。

结合 MoonBit 在类型系统、编译性能和 AI 驱动的开发体验的独特优势,MoonBit 将为 Agent 应用提供更高效、稳定的开发解决方案。

与此同时,MoonBit 生态正快速成长,现已有数十万用户加入实践,社区积累 2000+ 个包,涵盖编译、测试、可视化、系统编程等多个领域。在语言特性、工具链与生态的合力推动下,MoonBit 正加速成长为 AI 时代的软件基础设施,稳步走向面向 AI 时代的软件交付平台

本文将结合智能体开发的实际案例,展示异步能力如何在实践中落地,开启 MoonBit 在应用层面上的新篇章。

 MoonBit 中的异步编程 

一、无需 await 的简洁语法
在 MoonBit 中,可以用 async 关键字声明异步函数,异步函数之间可以相互调用,并支持 async fn main 作为程序入口,以及 async test 来测试异步逻辑。

与许多语言不同,MoonBit 在调用异步函数时无需额外使用 await。编译器会根据类型自动推断调用方式,而 IDE 会以斜体高亮异步调用,让代码在保持简洁的同时仍具可读性。

因此,在 MoonBit 中进行异步编程几乎与同步编程一样自然:

二、结构化并发设计
在异步编程中,任务之间的切换使控制流远比同步程序复杂,加之网络通信等场景常常伴随不可预期的错误,使得健壮的错误处理成为一项长期挑战。传统的非结构化模型将任务视为全局独立的实体,除非显式取消,否则会在后台持续运行。当一组并行任务中的某一分支出现异常时,其余分支若未被及时终止,就会形成孤儿任务(orphan task),长期占用资源,甚至影响系统稳定性。

MoonBit 的解决方案是结构化并发。在这一模型下,任务呈现嵌套的树状结构:父任务的生命周期依赖于所有子任务,只有当子任务全部结束时父任务才会终止;若某一子任务失败,系统会自动取消其他子任务,并将错误逐级向上传递。这使得异步程序的错误处理在语义上更接近同步程序,既提升了可预测性,也大幅降低了开发复杂度。

下面的例子是 RFC 8305 中描述的 happy eyeball 算法【1】 ,它能很好演示结构化并发理念的优越性。一个网络域名可能对应多个 IP 地址,而 happy eyeball 就是一个自动的 IP 选择算法,它会依次尝试列表中的每个 IP,尝试发起连接。在每次连接尝试后,如果 250 毫秒内连接没有成功,就继续尝试下一个 IP。任何时候,只要有任何一个连接成功,就关闭其他连接,选择成功的那个连接。

MoonBit 中,happy eyeball 算法的实现如下:

MoonBit 中的 happy eyeball 实现非常简洁,几乎就是对算法描述的直接翻译,但它能自动照顾到算法中的所有细节:作为对比,Python 的 asyncio 库中的 需要约 200 行代码,可读性也不如 MoonBit 版本。

 

 性能对比 

MoonBit 的异步运行时 moonbitlang/async 目前已支持 Linux 与 macOS 的 native 后端,底层基于线程池并结合 epoll/kqueue 实现。虽然仍处于早期阶段,这一运行时已经展现出出色的性能表现。

其设计思路与 Node.js 类似:采用单线程、多任务模型。在这一模式下,异步程序中的同步部分始终在同一线程上执行。对开发者而言,这带来显著的简化效果——只要不涉及异步调用,程序的行为就与单线程应用一致,无需额外加锁,也不必担心竞争条件(race condition)等并发错误。

这种架构的代价是无法同时利用多个 CPU 核心进行计算。然而,异步程序往往以 I/O 密集型为主,计算开销相对有限。在这种场景下,即便只依赖单核,依然能够发挥出不俗的性能。这也意味着,MoonBit 在保证开发体验简洁性的同时,能够满足高并发 I/O 应用的性能需求。

为了检验 MoonBit 异步运行时的性能,我们搭建了一个简单的 TCP 服务器:它会把收到的数据原样返回给客户端。这个测试几乎没有计算成分,因此能够直接反映运行时在高并发场景下的处理能力。

在测试中,我们同时维持多个连接,不断收发数据,并记录吞吐量和响应延迟。结果显示,MoonBit 在并发连接数不断增加的情况下,依然保持了优异的吞吐表现和极低的响应延迟,充分体现了其运行时系统的高效性和稳定性。

对比的对象是 Node.js 和 Go 语言。性能测试的结果如下:


测试结果显示,MoonBit 在 200 到 1000 个并发连接下始终保持最高吞吐量,在高并发场景中明显优于 Node.js 和 Go。这表明其异步运行时具备出色的扩展性。


在高并发场景下,MoonBit 的平均延迟始终保持在个位数毫秒,即便在 1000 个连接时也只有 4.43ms;相比之下,Node.js 延迟超过 116ms。这意味着 MoonBit 的异步运行时能够在大规模连接下依然保持快速响应。

下面是一个 HTTP 服务器的例子。相比 TCP 服务器,HTTP 例子需要进行 HTTP 协议的解析,有更多的计算成分,不是单纯的 IO。得益于 MoonBit 语言本身的优秀性能,在这个测试中 MoonBit 依然表现良好。这个测试会使用 (https://github.com/wg/wrk) 工具,通过多个连接不断向 HTTP 服务器发送 GET / HTTP/1.1 的请求,服务器应当返回一个空的回复。测试会记录服务器每秒处理的请求数以及每个请求的平均延迟。测试的结果如下:

可以看到,MoonBit 在所有并发连接数下的请求处理效率和延迟都稳定高于 Node.js 和单线程的 Go。这里,Go 的 HTTP 服务器 net.http 可以使用多个 CPU 核心,为了和 MoonBit 及 Node.js 直接比较,测试时通过 GOMAXPROCS=1 限制了 Go 只使用一个 CPU 核心。上述两个测试中的代码都非常简单,因此 Node.js 测试中 javascript 代码的占比很小,更多反映的是它后端的 libuv,一个使用 C 编写的事件循环库的性能。

 

 实例:使用 MoonBit 编写一个 AI agent 

目前,MoonBit 的异步支持已经覆盖大部分基础应用,能够用于编写各种完整的异步程序。例如,下面是一个使用 MoonBit 编写的 AI agent 的例子。

例子只包含核心的循环部分,完整代码请参考【2】:

这个 AI agent 的例子看上去和普通的同步代码几乎没有区别,但这段代码其实是完全异步的。它可以模块化地和其他异步代码自由组合,例如监听用户输入、同时运行多个 agent 等等。当程序需要实现较为复杂的异步控制流时,MoonBit 的结构化并发设计也能极大地简化程序、提升程序的健壮性。因此,对于 AI agent 等典型异步应用,MoonBit 的异步编程系统是理想选择。

 


欢迎开发者们使用 MoonBit,探索 AI 时代下全新的应用构建之路。
点击深度探索MoonBit

reference
[1] happy eyeball 实现
[2] 代码实现