nature 是一款较新的编程语言,其轻量简单,易于学习。在设计理念和运行时架构上参考了 golang ,同时有着更丰富的语法特性,更适用于业务开发,并在持续探索更广泛的应用领域。
性能是衡量编程语言核心竞争力的关键指标,接下来我们将从 IO 并发、CPU 计算、C 语言 FFI 、协程性能四个维度,并以 golang 作为基准对 nature 编程语言进行性能测试。
测试环境
配置项
详情
宿主机
Apple Mac mini M4 ,16GB 内存
测试环境
Linux 虚拟机( Ubuntu 6.17.8 ,aarch64 架构)
编译器 / 运行时版本
Nature:v0.7.0 ( release build 2025-12-15 )Golang:go1.23.4 linux/arm64Rust:cargo 1.85.0Node.js:v20.16.0
所有测试均采用相同的代码逻辑实现,文中代码示例均以 nature 编程语言为例。
IO 并发
IO 并发是网络服务的核心能力,本测试通过 HTTP 服务端压力测试,综合考察语言的 IO 调度、CPU 利用率与 GC 稳定性。
nature 代码示例
import http
fn main() {
var app = http.server()
app.get('/', fn( http.request_t req, ptr<http.response_t> res):void! {
res.send('hello nature')
})
app.listen(8888)
}
ab 工具测试命令
ab -n 100000 -c 1000 http://127.0.0.1:8888/
-n 100000: 总请求数 10 万次
-c 1000: 并发数 1000
测试结果
可以看到 nature 在 HTTP 并发性能上超越了 golang ,这对于早期版本的编程语言来说可以说是不错的成绩。
由于 nature 和 node.js 均使用 libuv 作为 IO 后端,所以 node.js 也参与到基准测试中(libuv 线程不安全,node.js 和 nature 的事件循环均在单线程中运行),但 nature 作为编译型语言其并发处理能力远胜过 node.js 。
CPU 计算
使用经典的递归斐波那契数列计算 fib(45) 来测试语言的 CPU 计算与高频函数调用开销。
nature 代码示例
fn fib(int n):int {
if (n <= 1) {
return n
}
return fib(n - 1) + fib(n - 2)
}
测试方法
time ./main
1134903170./main 2.50s user 0.01s system 101% cpu 2.473 total
测试结果:
nature 和 golang 均采用自研的编译器后端,性能上也相差无几。而耗时高于 rust 的主要原因之一是两者在函数运行前进行了额外处理。
golang 采用了抢占式调度,不需要关注 GC safepoint ,但仍需要关注协程栈是否需要扩容,也就是下面的汇编指令
# more stack
f9400b90 ldr x16, [x28, #16]
eb3063ff cmp sp, x16
540002a9 b.ls 7869c <main.Fib+0x5c> // b.plas
nature 采用了协作式调度,所以需要处理 GC safepoint 。但 nature 采用共享栈协程,所以不需要关心栈扩容问题。
# safepoint
adrp x16, 0xa9d000
add x16, x16, #0xeb0
ldr x16, [x16]
cmp x16, #0x0
b.ne 0x614198 <main.fib.preempt>
nature 的 safepoint 实现仍有优化空间,若后续采用 SIGSEGV 的触发模式,函数调用性能将会得到进一步提升。
nature 和 golang 采用了截然不同的调度策略和协程设计方案,这会带来哪些不同呢?不妨看看后续的测试 👇
C 语言 FFI
通过调用 1 亿次 C 标准库中的 sqrt 函数,测试与 C 语言的协作效率。
nature 代码示例
import libc
fn main() {
for int i = 0; i < 100000000; i+=1 {
var r = libc.sqrt(4)
}
}
测试结果
可以看到在 C FFI 方面,nature 相较于 golang 有着非常大的优势,这是因为 golang 的 CGO 模块有着非常高的性能成本,独立栈协程和抢占式调度设计与 C 语言难以兼容,需要经过复杂的处理。
而 nature 的共享栈和协作式调度设计与 C 语言更兼容,不仅仅是 C 语言,只要符合 ABI 规范的二进制库,nature 都能直接进行调用。
在高性能计算、底层硬件操作等场景中,nature 可无缝集成 C / 汇编编写的核心模块,弥补 GC 语言在极致性能场景下的不足,兼顾开发效率与底层性能。
协程
协程是现代并发编程的核心组件,本测试通过 “百万协程创建 + 切换 + 简单计算” 场景,评估 Nature 与 Golang 的协程调度效率、内存占用与响应速度。
nature 代码示例
import time
import co
var count = 0
fn sum_co() {
count += 1
co.sleep(10000) // ms, Remove this line if no sleep
}
fn main() {
var start = time.now().ms_timestamp()
for int i = 0; i < 1000000; i+=1 {
go sum_co()
}
println(time.now().ms_timestamp() - start) // create time
int prev_count = 0
for prev_count != count {
println(time.now().ms_timestamp() - start, count)
prev_count = count
co.sleep(10)
}
println(time.now().ms_timestamp() - 10 - start) // calc time
co.sleep(3000) // ms
}
测试结果
语言
创建耗时(ms)
计算耗时(ms)
无 sleep 计算耗时(ms)
占用内存
Nature
540
564
170
900+M
Golang
1000
1015
140
2500+M
nature 的协程在综合性能上非常优秀,内存占用更是远低于 golang 。而这是建立在 nature 的协程调度器未进行优化的前提下,预计在后续的版本中 nature 的协程调度器会进一步优化,届时将会有更加亮眼的表现。
总结
这是一次非专业的性能测试,但在粗略的测试中,nature 编程语言展现出了超越预期的能力与潜力。作为早期的编程语言,其运行时和编译器还有着非常大的优化空间,在正式版本发布时性能将进一步提升。
以现在的性能表现来看,nature 无疑是值得关注和尝试的编程语言,尤其是在云原生、网络服务、API 开发等服务端开发领域。
这是 nature 编程语言的官网 https://nature-lang.