go 写的 fzf 如何做到用比 rust 重写版快几倍

2025 年 8 月 17 日
 cj323

skim 作者说 fzf 虽然是用 GC 语言 go 写的,但是数据量上去后比自己的 rust 实现快 2-3+倍,而且占用一半的内存。还说 rust 在 share memory 上能优化的地方受限。

这是如何做到的,rust 又有哪些地方不好优化内存?纯好奇

https://github.com/skim-rs/skim/issues/317#issuecomment-652492431

fzf 源码: https://github.com/junegunn/fzf

5002 次点击
所在节点    程序员
14 条回复
mayli
2025 年 8 月 17 日
因为重写版优化不够
wuruxu
2025 年 8 月 17 日
rust 实现还有优化空间,带 GC 的语言,明显会有额外的性能损耗
BeiChuanAlex
2025 年 8 月 17 日
不可能,如果是这样的话,rust 版本就是没写好
DefoliationM
2025 年 8 月 17 日
不知道区别在哪,但能猜到几个原因。大量使用存在堆上的临时对象,因为所有权的原因离开作用域内存即释放,大量重复销毁和申请内存,rust 可能需要使用内存池进行优化。
w568w
2025 年 8 月 17 日
没有人说 Rust 一定比 Go 快啊,GC 语言一定比 GC-free 慢是刻板印象,得改。准确的说法是「 GC-free 的语言,性能上限比 GC 语言高」。

也就是说,如果肯优化,Rust 一定能做到比 Go 快。

只不过 Rust 默认的编程范式不鼓励池化管理,在 I/O 和 Memory Burst 场景下,延迟比较吃亏。通俗地说就是 GC 语言鼓励「积极分配,一次性全部释放」,GC-free 鼓励「用完立刻释放」。

对了,按这个 issue 下引用的链接,你这个是 2020 年的 issue ,2022 年 skim 就已经优化到和 fzf 一样快了,且内存占用更少: https://github.com/skim-rs/skim/issues/509
CatCode
2025 年 8 月 17 日
现在什么猫啊狗啊都写 Rust 。
遇到生命周期、所有权之类的问题一言不合就 Clone ,甚至在一些广泛使用的 crate 里面都有类似的问题。
见啥都 Clone ,Rust 开了 Release 都不一定能比纯 Python 快。
R18
2025 年 8 月 17 日
rust 要会写,最近遇到一个项目,用 rust 写的一塌糊涂,内存占用奇高。
suruiran
2025 年 8 月 17 日
这种软件的性能瓶颈在磁盘 IO 吧,而且都是短时间执行的 gc 也没有影响。
visper
2025 年 8 月 18 日
大概是 rust 里面 clone 太多了。而 go 里面都自动共享了。
justdoit123
2025 年 8 月 18 日
clone clone clone~

性能极致的地方,还是需要一些 unsafe 之类的操作。
wangtian2020
2025 年 8 月 18 日
语言决定上下限,耐不住操作工水平不够
horou
2025 年 8 月 18 日
只能说明他不会 rust
wojiugaiming
2025 年 9 月 25 日
@horou 想想看,现在 ai 社会,一个不会 go 语言和 rust 语言的人,问 ai ,用 go 语言重构就能比 rust 快,还有谁学习 rust 。ai 真的把好多缺点补上赶上优点了
wojiugaiming
2025 年 9 月 25 日
这么说来不优化情况下,rust 不一样有 go 快,对于我这种写了编程语言的就用,没啥优化能力的,果断选择 go

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://v2ex.xtra.eu.org/t/1152926

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX