• 请不要在回答技术问题时复制粘贴 AI 生成的内容
cj323
V2EX  ›  程序员

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

  •  
  •   cj323 · Aug 17, 2025 · 4929 views
    This topic created in 269 days ago, the information mentioned may be changed or developed.

    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

    14 replies    2025-09-25 03:37:35 +08:00
    mayli
        1
    mayli  
       Aug 17, 2025 via Android
    因为重写版优化不够
    wuruxu
        2
    wuruxu  
       Aug 17, 2025
    rust 实现还有优化空间,带 GC 的语言,明显会有额外的性能损耗
    BeiChuanAlex
        3
    BeiChuanAlex  
       Aug 17, 2025
    不可能,如果是这样的话,rust 版本就是没写好
    DefoliationM
        4
    DefoliationM  
       Aug 17, 2025
    不知道区别在哪,但能猜到几个原因。大量使用存在堆上的临时对象,因为所有权的原因离开作用域内存即释放,大量重复销毁和申请内存,rust 可能需要使用内存池进行优化。
    w568w
        5
    w568w  
       Aug 17, 2025   ❤️ 10
    没有人说 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
        6
    CatCode  
       Aug 17, 2025   ❤️ 1
    现在什么猫啊狗啊都写 Rust 。
    遇到生命周期、所有权之类的问题一言不合就 Clone ,甚至在一些广泛使用的 crate 里面都有类似的问题。
    见啥都 Clone ,Rust 开了 Release 都不一定能比纯 Python 快。
    R18
        7
    R18  
       Aug 17, 2025
    rust 要会写,最近遇到一个项目,用 rust 写的一塌糊涂,内存占用奇高。
    suruiran
        8
    suruiran  
       Aug 17, 2025 via Android
    这种软件的性能瓶颈在磁盘 IO 吧,而且都是短时间执行的 gc 也没有影响。
    visper
        9
    visper  
       Aug 18, 2025
    大概是 rust 里面 clone 太多了。而 go 里面都自动共享了。
    justdoit123
        10
    justdoit123  
       Aug 18, 2025
    clone clone clone~

    性能极致的地方,还是需要一些 unsafe 之类的操作。
    wangtian2020
        11
    wangtian2020  
       Aug 18, 2025
    语言决定上下限,耐不住操作工水平不够
    horou
        12
    horou  
       Aug 18, 2025
    只能说明他不会 rust
    wojiugaiming
        13
    wojiugaiming  
       Sep 25, 2025
    @horou 想想看,现在 ai 社会,一个不会 go 语言和 rust 语言的人,问 ai ,用 go 语言重构就能比 rust 快,还有谁学习 rust 。ai 真的把好多缺点补上赶上优点了
    wojiugaiming
        14
    wojiugaiming  
       Sep 25, 2025
    这么说来不优化情况下,rust 不一样有 go 快,对于我这种写了编程语言的就用,没啥优化能力的,果断选择 go
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   5913 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 58ms · UTC 06:21 · PVG 14:21 · LAX 23:21 · JFK 02:21
    ♥ Do have faith in what you're doing.