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/arm64 Rust:cargo 1.85.0 Node.js:v20.16.0 |
所有测试均采用相同的代码逻辑实现,文中代码示例均以 nature 编程语言为例。
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/
测试结果

可以看到 nature 在 HTTP 并发性能上超越了 golang ,这对于早期版本的编程语言来说可以说是不错的成绩。
由于 nature 和 node.js 均使用 libuv 作为 IO 后端,所以 node.js 也参与到基准测试中(libuv 线程不安全,node.js 和 nature 的事件循环均在单线程中运行),但 nature 作为编译型语言其并发处理能力远胜过 node.js 。
使用经典的递归斐波那契数列计算 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 采用了截然不同的调度策略和协程设计方案,这会带来哪些不同呢?不妨看看后续的测试 👇
通过调用 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.cn/ 如果你感兴趣的话也可以加入讨论组,v ➡️ nature-lang
1
craftsmanship 5 天前 via Android 🐮 又见大佬
|
2
zhanying 5 天前 不懂就问,新的编程语言 vibe coding 效果咋样
|
3
weiwenhao OP |
4
wweir 5 天前 gust
go 的文件头 + rust 的语法习惯 |
5
cmos 5 天前 从易用性和方便尝鲜的角度来看,我觉得可以实现一个类似 rust 的安装命令(安装在用户目录而不是系统目录),并考虑借鉴 cargo 的功能,填充 Golang 的实用性和 rust cargo 易用性之间的空白区域。
|
6
wfhtqp 5 天前 golang 也有被当作对手的一天
|
7
weiwenhao OP @cmos 很有道理,后续如果实现 install.sh 的话就默认安装在用户目录。
|
9
NoobPhper 5 天前
文档字体好看 是叫啥
|
11
Donahue 4 天前 大佬 太强了
|
13
dog82 4 天前 用 go 好几年,我依然钟爱 java
|
14
linky6565 4 天前 早期版本就能做到性能如此优秀的确了不起
|
15
hutoer 4 天前 语法比垃圾 Golang 好,预祝能火起来
|
16
gggggggg 4 天前 为什么所有语言都想来和 golang 比一下?
|
18
fregie 4 天前 我想问一下,这个语言,主要适用于什么场景,或者解决了什么问题呢?
|
19
brucedone 4 天前 像 rust ,又像 go ,算是二者的中间集?
|
20
coefu 4 天前 屌爆了,相当得劲儿。
|
22
irrigate2554 4 天前 感觉像是一个加了 gc 和协程的 rust
|
23
weiwenhao OP @fregie @brucedone nature 主要是受到了 golang 的启发而开发的编程语言,并且改进了 golang 的一些痛点,包括语法、错误处理、包管理、interface{}、内存安全、cgo 等等。
而定位上是 golang <--> java/php 之间,语法上有着更好的表达性,并且注重内存安全,所以比 golang 更加适合业务开发,比如 API 、Agent 、云原生等服务端领域开发。 nature 也继承了 golang 的优点,原生支持并发原语 go+select+channel ,在高并发 IO 应用上有着非常优秀的表现。所以 nature 同样可以用于网络中间件,IOT ,command 等领域开发。 当然这仅仅是现阶段展现出来的能力,nature 有着完全自研的编译器、汇编器、链接器、运行时,所以可以根据架构和技术发展进行高度定制,nature 下一阶段期望能够探索更多的可能性,能够进行超高性能需求的场景开发,比如操作系统,游戏引擎,GUI ,数据库等。 |
24
whyso 4 天前 大佬有了解过 vlang 吗? nature 和 vlang 比怎么样?
|
25
5261 4 天前 让子弹飞一会先!
|
26
weiwenhao OP @whyso vlang 完全继承了 golang 语法,然后正在朝 rust 发展,希望能够开发底层系统,作者好像也在开发操作系统。golang 的协程,GC 之类的在 vlang 中基本就是抛弃的状态。总结来说 vlang 就是 golang 语法 + rust 的内核。
nature 虽然是受到了 golang 的启发,但是抛弃了 golang 的语法进行重新设计,继承了 golang 的协程,GC 等 runtime 设计,并且进行了相当可观的改进,从性能测试就可以看出来。 这样一说你应该能感觉到区别是蛮大的。 |
27
irrigate2554 4 天前
大佬加油,是我想要的语言没错,但是现在看上去生态还有些简陋,希望有一天能用上。
|
28
x1aoYao 4 天前
大佬厉害。Go 除了丑,最不满意的就是 CGO 太拉了。
可以问几个问题么,Natrue 纯协作式的会有协程饥饿问题吗,似乎相对于无栈协程只是避免了函数染色? GC 是移动整理式的吗? |
29
weiwenhao OP @x1aoYao 有 safepoint 就也不算纯协作,但是插入的 safepoint 不算多,只是在函数开始时插入了。如果是 for 循环,循环里面也没有函数调用的纯计算就会有饥饿问题,当然也会有 GC 问题。对比过 rust 的协程,性能上确实是无栈协程性能更好一些。
GC 是 mark-sweep 模式的。 |
31
liuliuliuliu PRO |
32
kanakana 4 天前 via Android
> Golang 采用了抢占式调度,不需要关注 GC safepoint ,但仍需要关注协程栈是否需要扩容。
> Nature 采用了协作式调度,所以需要处理 GC safepoint 。但 nature 采用共享栈协程,所以不需要关心栈扩容问题。 好奇问几个问题。从 Go 的源码注释 [1] 看来,Golang 还是有 safe-point 的,这里的“不需要关注”具体是指什么?如果 Go 用 safepoint 切协程的话是不是就与 Nature 比较相像了? 另外,Go “关注协程栈是否需要扩容”的另一个理由是:不同携程需要的栈大小不同,通过动态扩容我们可以先分配小的栈,再给需要的携程分配大号栈,从而节省内存。Nature 是怎么处理的?会有栈溢出吗? [1] https://go.dev/src/runtime/preempt.go |
33
chennqqi 4 天前
@liuliuliuliu go/rust 没有开 SIMD 啊
|
34
supuwoerc 4 天前
大佬太牛了
|
35
weiwenhao OP @kanakana golang 注释里的 safepoint 应该是用来辅助抢占式调度的判断,我在 fib 的汇编里面没有看到 safepoint 的相关逻辑,应该只是在特定的代码中出现。
golang 即使分配最小的独立栈也是有 2KB ,所以难以节省内存。nature 每个 processor 一个栈,比如在 8 核 cpu 上一共就 8 个大的栈,每个栈都是 8M 大小。协程切换时将协程中的寄存器信息 copy 到这个大栈上就行,切出时将使用的栈按照精确使用大小切回到协程的存储空间中。 |
36
liuliuliuliu PRO @chennqqi rust nightly 就是 simd 的,go 好像是没有
|
37
BALDOOR 4 天前 看了眼,意义不大,直接跟 Go 竞争,开发效率没有质的差距,用 Go 的人也不会扣那点性能。
生态这个更是不可能有,除非有大公司推动。 Go 的“成功”其实很偶然,不值得参考。 《定位上是 golang <--> java/php 之间》 我觉得是位置很小甚至几乎没有空间了。 找准自己的生态位很重要。 像那个 MoonBit ,定位 WASM 语言,很少或者没有人去专门用一门语言去写。 事实是应该这样做,但实际上不会,哪怕是我,我也不会这样做。 我觉得未来语言会朝着 DSL 方向去,而不是 GPPL ,做一个事情,用一个合适的语言或者解决方案。 而不是做什么上来就是 Java(调侃)。 |
38
lixuda 4 天前
作者牛,就是生态怎么办,这个还是要多宣传宣传
|
40
K753255157 4 天前
建议标准库增加 Map 、Filter 、Reduce 函数能极大提升开发体验
|
42
kamahi 4 天前 via Android 或许有一天,可以看到:
science vs rust cell vs java 🤣🧐🤡 |
43
vultr 4 天前
我一直想给 c 加一个 defer 。
|
45
Huelse 4 天前
支持支持,语言发展最需要的就是包管理及其生态,希望能坚持下去
|
46
summerLast 4 天前
有一个言论,有了 AI ,小众语言因为训练样本太少,AI 写的并不好,因此小众语言比以前更小众了,大佬,您可以通过 AI 去多构建些应用,并找到一个领域这个领域和其他语言有代级的差异,去强化这个点,让 AI 遇到这个问题时优先推荐这个语言
|
47
millken 4 天前
最好是着力解决某个当前的痛点(比如跨平台 GUI ),这样推广才容易
|
48
burnsby 4 天前
支持, 并希望它能够流行起来
|
49
BALDOOR 4 天前 《实际上这个位置就是 golang+java+php+node.js 的总和中非常大的一部分中 nature 会是更好的选择。》
这个想法,那更加不可能了,只能想想玩玩可以的。 语言也好,解决方案也好。优化那几句 if/else 意义为 0 !!! 要解决问题!要解决问题!要解决问题! 你要有你的直击问题的杀手锏!杀手锏!杀手锏! 我不是对你人身攻击,只是说出大多数玩家的 PL 理论以及工程经验其实真的就只能造出玩具。 另外我建议你不要把 golang+java+php+node.js 混起来,有可能会让人觉得你只会那点 CRUD 一般情况下分类是《 C/C++/Rust/Zig 》《 C#/Java/Kotlin 》《 Go/PHP/Js/Python/Ruby 》 我关注的新生的语言,无论是研究型还是打算应用型的算是非常多的。 有属于它自己的核心杀手锏的不多,更多的是倾向 DLS 般的优化。 例如 rust 的“成功”,一部分是解决了“精通”c/c++的人(实际精通的人能有多少),另一部分是 cargo 太 TM 好用了 例如 Node 这种,就是吃了前端人员偷懒不想学语言的空,很多情况都是很偶然的。 而不是选择,更何况“更好”只存在于你自己那点领域的想法。 另外那些人,凭借“国产”什么的,如果你也有这样的想法,我劝你还是最好不要碰。 还有自研汇编不依赖 libc 实现 syscall 其实就是另一个领域的 CRUD ,不要太当回事 哪怕跟 pass 一样,写多了也没什么两样 我也算 PL 的老玩家了,偶尔也会有一些 PL 理论上的小“突破”,而经常沾沾自喜,但研究到最后还是发现了其实早就在多年前就有相关的理论出现了。理论尚且如此,工程界那就更难了。 每一个梦想都值得鼓励,加油骚年!!! |
50
swananan 4 天前
首先,我觉得这个蛮酷的,但是我感觉有的性能测试优势更多是技术方案选择不同导致的,比如抢占式和协商式,选了协商式,那抢占式的好处就捞不到了。
最近刚看了一篇 https://blog.cloudflare.com/how-we-found-a-bug-in-gos-arm64-compiler/ ,Go 社区这么好,大佬云集,还有金主,依然还会有隐蔽的 bug 。所以,我可能会体验一下(话说我 go 都没怎么写过),但是我很难会在生产项目里面使用新的语言,甚至我的玩具项目都不太可能会选择使用。 最后好奇问下,nature 后续生态和发展,是全靠 op 一个人吗,感觉这样会很艰辛啊,加油。 |
51
weiwenhao OP @BALDOOR 如果你真的关注的话,你就会知道编程语言比我们想象的要多的多,甚至到了每周一两个的程度,并且其中很多编程语言都不只是玩一玩,有的甚至维护了几年,数十年。
虽然我很少拿国产来推广,但是 nature 就是国产编程语言,没什么不耻的。 另外也不是我发了这个帖子,就是说 nature 的优势就是 if/else ,仅仅是完成了一次性能优化发了个评测而已。你过于激动了,其实你可以看我的发帖记录,我上一次发 nature 相关的帖子已经快接近一年了。至于是否有人需要这样的编程语言你可以看看我之前的发的关于 nature 编程语言的帖子的评论(其中加油呀,牛逼之类的你忽略就行了)。 |
52
BALDOOR 4 天前
我早就在知乎看过了。
不是激动,我是在鼓励每一个有梦想的人,孩子,对你们严格,其实就是想你们成材。 我几乎每一个我都“喷”,不是真“喷子”,因为 PL 领域真的真的非常非常艰难。 不管是谁,国产还是火星产,理论还是工程,我是真心想你们有突破的。 |
54
weiwenhao OP |
55
back0893 4 天前
宣传还事要等
我就完成个 lua 虚拟机都很吃力了 |
58
mightybruce 3 天前
看不出和现实有什么更贴合之处,或者说不可或缺的领域, 现实是搞 AI 原生语言,
AI 编译器 以及 推理引擎 有市场, 你这个说实话根本不符合经济学,所以基本做大不了。 国内做 TVM/Triton/TileLang 还有前途, 适配国产芯片专做 GPU 内核的领域专用语言,上层原生支持 PyTorch 、TensorFlow 及国产框架。 |
59
MrKrabs 3 天前
一定要叫 vec 吗
|
60
weiwenhao OP @fregie
1. 语法设计优化,更加符合直觉,参考语法文档 2. 错误处理优化,同上 3. 原生泛型支持,后加的泛型在基础上和原生的还是有一些区别的,比如创建 chan, chan_new<T>() 和 make(chan T) 的区别 4. 内存安全优化,包括 nullable(?),变量必须赋值,空指针优化等 4. 包管理方式调整,使用集中式包管理 5. interface{} 优化,使用 union type 6. C FFI 优化,性能更好 7. 协程优化,性能更好 --- 上面是已经完成的部分,当然这些问题属于仁者见仁,各有所爱吧。还在开发中的几个小点是 1. wasm 原生支持 2. 渐进式 GC 支持,通过手动处理内存的方式解决 STW 问题。 3. 测试重构 4. enum 支持 |
61
weiwenhao OP @MrKrabs 一开始叫 list, 但是 list 属于常用关键字,在变量起名中比较常见,容易冲突。所以尽量选取了偏一点的关键字。(nature 中的所有关键字都是小写,所以不能 List 和 list 区分)。
|
62
weiwenhao OP @mightybruce 什么是 AI 原生语言,或者说什么样的特性才能叫做 AI 原生语言🤔
|
63
Ipsum 3 天前
希望 3 年后整个社区能建立起来。
|
64
mightybruce 3 天前
@weiwenhao 用于神经网络的类 Python GPU 开源编程语言
|
65
Hudiebbk 3 天前
加油,最近写 rust 写的头疼
|
67
weiwenhao OP @MrKrabs 你是调用了很多次测试么,全调用的 mbedtls 的函数,每次调用 finish 输出结构都会调用 gc 分配了 32 字节的缓冲区进行生成,如果是慢的话,可能是这里的分配慢了。
``` fn sha256_t.finish():[u8] { var output = vec_new<u8>(0, 32) // SHA256 输出 32 字节 utils.mbedtls_sha256_finish(&self.mbed_ctx, output.ref()) // 清理上下文 utils.mbedtls_sha256_free(&self.mbed_ctx) return output } ``` |
68
MrKrabs 3 天前
@weiwenhao
我的代码: import fmt import fs import syscall import crypto.sha256 fn main() { var ctx = sha256.new() var buf = vec_new<u8>(0, 4096) var f = fs.open('./nature-v0.7.0-darwin-arm64.tar', syscall.O_RDONLY, 0) for true { var len = f.read(buf) if len == 0 { println('read completed') break } ctx.update(buf[..len]) } var dig = ctx.hex() println(dig) } 不管怎么样这行开启肯定没坏处 https://github.com/nature-lang/nature/blob/cf7c3f1e3002cc08508768c4afda2abd044e1515/include/mbedtls/mbedtls_config.h#L3475 |
70
kylesean 3 天前
作者有了解 rue 吗? high level than rust, low level than golang
|
71
weiwenhao OP @kylesean https://rue-lang.com/ 这个吗,还很简陋呀
|
72
ytmsdy 3 天前
希望生态能尽快发展起来吧!
编程语音拼的不单单是性能,更重要的是生态,各种各样的库,能让新手减少重复造轮子 |
73
Cloudust 3 天前
好家伙,吸取 go 和 rust 的优点了,赞
|
75
fz420 2 天前
@ytmsdy 他说的刚出来的这个 https://rue-lang.dev/
|
76
xgdgsc 2 天前 via Android
@liuliuliuliu 看好 Julia
|
77
humbass 1 天前 via Android
个人出的 Golang Like 的项目好几个,卷类似项目,不能说没有意思,简直是毫无意义。
|
78
lasuar 1 天前
如果要作为一个终生成就的话,至少要确保十年内都没有经济问题吧。然后才能专心开发这门语言以及生态。使其流行起来的方式我知道有几个:
1. 用它编写一个比较重量级的领域开源项目(参考 git/k8s/docker..) 2. 成立公司,并用它开发生产项目 3. 成立小团队,有专人负责开发标准库(还要拆分更细方向)、推广、布道等等。 其中任何一项都要您有足够的经济实力和时间精力。最后,非常期待看到 nature 发扬光大的那天! |
79
lasuar 1 天前
官网的 playground demo 报错了。
|
82
hutoer 1 天前
Golang 刚出来的时候,很多人也觉得毫无意义
|
83
archxm 23 小时 24 分钟前 via Android
AI boy 又来围剿
|