当前位置: 首页
AI教程
Nolang与Rust全方位对比评测

Nolang与Rust全方位对比评测

热心网友 时间:2026-06-07
转载

Nolang采用静态编译直接生成LLVMIR,以最小运行时开销获得接近原生代码的效率。在AppleM1上运行fib(40)千万次基准测试,与C、Rust、Go对比,其性能表现优异,接近C语言水平,优于Go和Rust。

在编程语言领域,每当有新兴语言宣称“性能媲美 C 语言”时,开发者往往抱持审慎态度。Nolang 恰是这样一门语言——它采用静态编译方案,直接生成 LLVM 中间表示(LLVM IR),核心目标是以极小的运行时(runtime)开销换取接近原生代码的执行效率。本文将 Nolang 与 C、Rust 以及 Go 放到同一个 Fibonacci 基准测试中进行对比,以下呈现完整的实测数据与分析。

Nolang 对决 Rust

Nolang VS Rust

测试环境

项目
CPU Apple M1 (ARM64, 3.2GHz)
RAM 16 GB
OS macOS 15.x
C 编译器 zig cc 0.16.0(-O2 -target aarch64-macos
Rust 编译器 rustc 1.91.0(-O
Go 编译器 go 1.22.x(go build -ldflags="-s -w"
Nolang nolang-build --target llvmzig cc -O2

测试代码

四种语言采用完全相同的逻辑结构:通过引用传值输出参数,计算 fib(40) × 10,000,000 次。

Nolang (test/bench/fib.no)

fib(n i64, o i64) {a = 0b = 1i = 2for i <= n {c = a ba = bb = ci = i 1}o = b}for iter = 0; iter < 10000000; iter {result = 0fib(40, result)println-i64(result)}

C (test/bench/fib.c)

#include void fib(long n, long *o) { long a = 0, b = 1, c, i;for (i = 2; i <= n; i ) { c = a b;a = b;b = c;}*o = b;}int main() { for (int iter = 0; iter < 10000000; iter ) { long result;fib(40, &result);printf("%ld", result);}return 0;}

Rust (test/bench/fib.rs)

fn fib(n: i64, o: &mut i64) { let mut a = 0;let mut b = 1;let mut i = 2;while i <= n { let c = a b;a = b;b = c;i = 1;}*o = b;}fn main() { for _ in 0..10000000 { let mut result: i64 = 0;fib(40, &mut result);println!("{}", result);}}

Go (test/bench/fib.go)

package mainimport "fmt"func fib(n int64, o *int64) { var a, b, c int64 = 0, 1, 0var i int64 = 2for i <= n { c = a ba = bb = ci }*o = b}func main() { for iter := 0; iter < 10000000; iter { var result int64 = 0fib(40, &result)fmt.Println(result)}}

测量工具

macOS /usr/bin/time -l,记录以下指标:

  • real — 真实执行时间
  • user — 用户态 CPU 时间
  • sys — 系统态 CPU 时间
  • instructions retired — 硬件计数器中的退休指令数
  • peak memory footprint — 峰值内存占用

测试结果

可执行文件体积

语言 编译器 大小 相对 C
C zig cc -O2 49K 1.0×
Nolang zig cc -O2 49K 1.0×
Rust rustc -O 456K 9.3×
Go go build -s -w 1.5M 31×

执行效能

fib(40) × 10,000,000 次,包含输出 I/O:

语言 real user sys 指令数 峰值 RSS
C (zig cc) 4.88s 0.62s 0.04s 11.0B 935KB
Nolang (zig cc) 5.38s 0.61s 0.04s 11.1B 935KB
Rust (rustc -O) 5.44s 1.61s 3.78s 54.6B 935KB
Go (go build) 6.25s 2.52s 3.72s 60.9B 8.8MB

指令数对比

C : 11.0B████Nolang: 11.1B████ ← 仅多 1%Rust: 54.6B████████████████████Go: 60.9B██████████████████████

关于静态链接的说明

macOS 限制

在 macOS 平台上,所有程序都必须动态链接 /usr/lib/libSystem.B.dylib(核心系统库)。这并非语言选择,而是操作系统层面的限制——macOS 不提供静态版本的 libSystem

# 所有语言的链接状况完全相同otool -L fib_nolang→ /usr/lib/libSystem.B.dylibotool -L fib_c → /usr/lib/libSystem.B.dylibotool -L fib_rust→ /usr/lib/libSystem.B.dylibotool -L fib_go→ /usr/lib/libSystem.B.dylib

Go 额外链接了 /usr/lib/libresolv.9.dylib,但这同样是系统动态库。

实际静态内容

由于 libSystem.dylib 在运行时由所有程序共享,可执行文件的大小比较实际反映的是语言 runtime 加上标准库带来的额外体积:

语言 文件大小 包含的静态内容
C / Nolang 49K printf + 启动代码(无 runtime)
Rust 456K Rust 标准库(格式化、panic处理器、哈希等)
Go 1.5M Go runtime(GC、goroutine调度器、fmt 反射)

Linux 静态链接(仅作参考)

若需在 Linux 上进行完全静态比较,可使用 zig cc 的 musl 目标:

# 静态编译(x86_64 Linux + musl libc)zig cc -O2 -target x86_64-linux-musl -static -o fib_c_static fib.c

这种方式生成的二进制完全静态,不依赖任何系统 .so。但性能数据因 OS / libc 不同无法与 macOS 直接对比。

编译链

Nolang: .no → lexer + parser → LLVM IR → zig cc -O2 → 可执行文件C:.c → zig cc -O2 → 可执行文件Rust: .rs → rustc -O → 可执行文件(含 std)Go: .go → go build → 可执行文件(含 runtime)

对比脚本

# 编译zig cc -O2 -target aarch64-macos -o test/bench/fib_c_zig test/bench/fib.czig cc -O2 -target aarch64-macos test/bench/fib_nolang.ll -o test/bench/fib_nolang_zigrustc -O -o test/bench/fib_rust test/bench/fib.rsgo build -ldflags="-s -w" -o test/bench/fib_go test/bench/fib.go# 执行 + 测量/usr/bin/time -l test/bench/fib_c_zig/usr/bin/time -l test/bench/fib_nolang_zig/usr/bin/time -l test/bench/fib_rust/usr/bin/time -l test/bench/fib_go# 或使用自动化脚本bash test/bench/run.sh

来源:https://developer.aliyun.com/article/1739770

游乐网为非赢利性网站,所展示的游戏/软件/文章内容均来自于互联网或第三方用户上传分享,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系youleyoucom@outlook.com。

同类文章
更多
Claude Code 必知的14个高效工作流,让你的开发效率提升300%

Claude Code 必知的14个高效工作流,让你的开发效率提升300%

Claude Code 常用工作流 先分享几项核心判断:Claude Code 真正强大的地方,并非仅仅在于它能编写代码——而是它让“编码”这件事本身变得更加高效且可控。你大概率遇到过这类场景:接手一个陌生项目,花了一整天才能理清架构;线上出现报错,翻遍日志也找不到根本原因;想要重构遗留代码,又担心

时间:2026-07-09 17:49
阿里云通义AIGC平台完全指南:设计师AI生产力革命

阿里云通义AIGC平台完全指南:设计师AI生产力革命

一、写在前面:为什么设计师需要关注AIGC? 如果你还在手动一张一张制作海报、反复修改客户口中“感觉不对”的配色方案、为电商详情页准备几十张不同场景的产品图——那么你一定经历过这些痛点: 创意瓶颈:脑海中有画面,但手绘无法呈现 重复劳动:调整尺寸、更换背景、批量生成变体消耗了大量时间精力 成本焦虑:

时间:2026-07-09 16:48
零基础毕设代码二次开发:3文件定位法及Vue/Java修改对照表

零基础毕设代码二次开发:3文件定位法及Vue/Java修改对照表

每年一到毕业季,计算机专业的同学总会陷入一个共同的怪圈:从 GitHub 上扒下来一套代码,或者用 AI 生成一个项目,看起来挺完整的,可导师一句“加个筛选条件”或“换个页面颜色”,瞬间就懵了——不敢改,不会改,怕改崩。是不是很熟悉? 一、为什么AI生成的毕设代码你 "不敢改 "? 1 1 毕业生的三大

时间:2026-07-09 16:46
反向海淘订单系统:状态机与分布式事务实战设计

反向海淘订单系统:状态机与分布式事务实战设计

先分享一个反直觉的结论:反向海淘订单管理的真正挑战,往往不在于业务逻辑本身,而在于状态流转。一个订单的生命周期拉长到跨国运输,中间涉及的环节多、系统多、参与者多,状态稍有错乱就可能引发连锁事故。Taocarts团队在实践中踩了不少坑,最终沉淀下来的这套状态机与分布式事务方案,成功解决了这一复杂难题。

时间:2026-07-09 16:46
AI并未抢走程序员饭碗而是更新了编程菜单

AI并未抢走程序员饭碗而是更新了编程菜单

AI并未大规模替代程序员,而是改变了职业结构。重复性编码岗位需求下降35%至15%,而AIAgent开发等岗位需求激增187%。开发者焦虑从“被替代”转向“跟不上变化”,60%程序员已使用AI辅助编程。人的核心价值转向架构设计、技术决策和审查AI生成代码,AI技能带来16%薪资溢价。

时间:2026-07-09 16:46
热门专题
更多
刀塔传奇破解版无限钻石下载大全 刀塔传奇破解版无限钻石下载大全
洛克王国正式正版手游下载安装大全 洛克王国正式正版手游下载安装大全
思美人手游下载专区 思美人手游下载专区
好玩的阿拉德之怒游戏下载合集 好玩的阿拉德之怒游戏下载合集
不思议迷宫手游下载合集 不思议迷宫手游下载合集
百宝袋汉化组游戏最新合集 百宝袋汉化组游戏最新合集
jsk游戏合集30款游戏大全 jsk游戏合集30款游戏大全
宾果消消消原版下载大全 宾果消消消原版下载大全
  • 热门数据榜