go 写的 fzf 如何做到用比 rust 重写版快几倍 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
cj323
V2EX    程序员

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

  •  
  •   cj323 54 天前 4136 次点击
    这是一个创建于 54 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    性能极致的地方,还是需要一些 unsafe 之类的操作。
    wangtian2020
        11
    wangtian2020  
       53 天前
    语言决定上下限,耐不住操作工水平不够
    horou
        12
    horou  
       52 天前
    只能说明他不会 rust
    itakeman
        13
    itakeman  
       15 天前
    @horou 想想看,现在 ai 社会,一个不会 go 语言和 rust 语言的人,问 ai ,用 go 语言重构就能比 rust 快,还有谁学习 rust 。ai 真的把好多缺点补上赶上优点了
    itakeman
        14
    itakeman  
       15 天前
    这么说来不优化情况下,rust 不一样有 go 快,对于我这种写了编程语言的就用,没啥优化能力的,果断选择 go
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     4333 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 22ms UTC 04:05 PVG 12:05 LAX 21:05 JFK 00:05
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86