V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
red13
V2EX  ›  Rust

有人使用 Rust 重构过旧项目吗?

  •  
  •   red13 · 17 天前 · 3803 次点击

    原来的一个数据分析引擎,使用 C 开发的,C 开发效率太低了,debug 程序更是让人头大,打算使用 Rust 重构一下,学习了三四天,感觉 Rust 绝不是像 Python 那样看一上午就能开始项目然后边学边做的语言。 有没有用 Rust 重构过旧项目的朋友,来说说呗

    49 条回复    2025-07-28 16:18:03 +08:00
    Geon97
        1
    Geon97  
       17 天前
    自信一点把感觉去掉
    也不像 go 一样,看一天就可以边学边写
    rqzrqh
        2
    rqzrqh  
       17 天前
    空闲时间重构过之前用 C 写的项目,大概 1500 行。学习了一个月,然后开始写,中间遇到复杂的数据所有权管理,也是思考+走了狗屎运才解决,大概写了一个月完成。golang 是可以看一上午就能上手,rust 不行,遇到复杂的数据所有权没高手帮忙很难解决。
    imes
        3
    imes  
       17 天前
    你要是 C++的 10 年老手可以这么干,新手不建议用 rust 重构任何东西。你花在理解 rust 本身的时间比你写程序的时间要多得多,而且一段时间之后,你一定会忘记当时怎么设计的。你看一下我前几天写的本地版本快照程序,就知道我说的怎么回事了。
    https://github.com/uselibrary/rustory/tree/master/src
    baba8
        4
    baba8  
       17 天前
    建议用 go,rust 错误太奇葩,有次闪退解决一天没解决掉,最后 ai 给个了方案,延时 5 秒,真的解决掉闪退问题。
    NessajCN
        5
    NessajCN  
       17 天前   ❤️ 1
    我自己除了 gui 和网页前端之外的所有项目基本都用 rust 重构了
    不管之前用 cpp python 还是 go, 一旦 riir 之后就再也回不去了
    重构过后再看自己项目原本的代码是那么丑陋和低效
    所以就很能体会为啥 riir 如此的流行,因为确实会上瘾
    bli22ard
        6
    bli22ard  
       17 天前
    rust 的难度起码 go 的 5 倍以上
    iOCZS
        7
    iOCZS  
       17 天前
    rust 的难度在于内存管理吧?
    bigtan
        8
    bigtan  
       17 天前
    能用 rust 重构的,基本上都重构完了
    bugyaluwang
        9
    bugyaluwang  
       17 天前
    cccssss
        10
    cccssss  
       17 天前
    尝试过,很爽。有了再一次创造的快感
    lancelock
        11
    lancelock  
       17 天前
    要不用 zig
    kapaseker
        12
    kapaseker  
       17 天前   ❤️ 2
    所有权是座山。这个你得理解很长的时间才能比较熟练,我大概有几个问题你可以看看能懂不?

    1. Fn,FnMut,FnOnce 有什么区别?
    2. 跨线程的为什么需要实现 Send ?
    3. Box ,Mutex ,Arc ,RefCell ,Rc 有什么区别?

    在这三个问题的基础上,再问自己,为什么 Rust 中会有这些玩意儿,为什么会这么设计呢?
    noe132
        13
    noe132  
       17 天前
    rust 边学边写改了一个之前 C++ 写的切换输入法小工具
    也就 200 行不到代码,时间全用来查各种 api 文档了,好在最后 macos 的 rust api 库完善,硬是改下来了,全程 expect 一把梭,要不要 deref 边猜边写
    tinybaby365
        14
    tinybaby365  
       17 天前
    用 go 重构吧。才学习了三四天,对 Rust 来说远不够。
    memcache
        15
    memcache  
       17 天前
    这不叫重构吧~ 算重写了。
    学了一段时间后,写过一个小项目: https://github.com/chenqimiao/quarkdrive-webdav
    rust 入门需要一些耐心的,不是两三天就可以上手的,当然大佬除外
    xkeyC
        16
    xkeyC  
       17 天前
    可以先 export 出个 C header ,然后 rust-bindgen ,新需求和需要修改的需求,可以在 rust 端完成,实现逐渐迁移(
    Rickkkkkkk
        17
    Rickkkkkkk  
       17 天前
    C 开发效率太低,以我不多的经验,rust 是效率更低的。

    go 和 java 都还行(至少这两的语法合乎人类的自然语言的语法习惯)
    skiy
        18
    skiy  
       17 天前
    Rust 会让你知道什么叫开发效率低。所有权头很大。
    MacsedProtoss
        19
    MacsedProtoss  
       17 天前 via iPhone   ❤️ 2
    压根没有必要
    rust 开发效率其实更低,除了邪教爱好者基本上没啥人会 rust 重写东西
    Rickkkkkkk
        20
    Rickkkkkkk  
       17 天前
    试想这样的 case ,起两个线程/协程,并发分别从两个下游接口获取数据,执行完成之后,合并这两个接口的数据并返回。

    如此简单的逻辑你用 rust 写会头大的很
    istomyang
        21
    istomyang  
       17 天前 via Android
    rust 其实培养的是一种优秀的编程习惯,最好先写 rust ,再写 c ,你先自由,后约束,当然处处碰壁。一旦掌握了所有权的精髓,你写其他语言,自然而然使用所有权的思维方式,写出的代码更健壮。
    epiloguess
        22
    epiloguess  
       17 天前
    我们用 rust+pyo3 重构了原来 python+go 的项目,主要是视频流的处理,没怎么用异步 io ,确实比原来的那一套要稳定得多。边学边写应该是不可能的,我们基本上都是提前半年通知,每个人至少看完了 trpl ,以及常用的库,还要一边写一边查
    gullitintanni
        23
    gullitintanni  
       17 天前   ❤️ 1
    @istomyang #21 不认同。如果你经常用 C 做生产级别的项目的话,你会发现,合格的开发者在用 C 编程的时候,所有权是时刻牢记于心的,并非无拘无束地自由发挥。

    Rust 这个奇葩玩意对所有权做了蹩脚的抽象,把它显式地提到了语法层面,虽然避免了开发者因为不称职或者粗心大意所带来的内存安全问题,但同时也降低了代码的可读性和可维护性。

    或许在 security-critical 的领域(比如航空航天、军事等领域)这种妥协是必要的,但它在常规场景并不一定合适。
    就好比你在自家客厅走路,戴头盔、穿全身护具,提升安全性的价值远远无法弥补其带来的不便。
    yuandong
        24
    yuandong  
       17 天前
    开发效率低效,已放弃
    w568w
        25
    w568w  
       17 天前
    尝试过,很爽。但这里是 V 站,所以我要说

    Rust 是一坨屎,意义不明的垃圾发明,你只要碰了这语言就是魔怔人、教徒,并且对上面所有认为 Rust 好进行出警
    w568w
        26
    w568w  
       17 天前
    @w568w 漏了几个字,应为

    Rust 是一坨屎,意义不明的垃圾发明,只要碰了这语言就是「魔怔人」「教徒」。上面所有认为 Rust 好写的用户都应该被出警
    lasuar
        27
    lasuar  
       17 天前
    我曾花了 2 个月时间学 rs ,现在过去 2 年,也没能在项目中用上。我不想评价 rs 的上手难度,因为总有人说是我水平不够,但我相信会有一个比肩 rs 性能但上手难度接近 go 的语言出现。
    sxhxliang
        28
    sxhxliang  
       17 天前
    我写 rust 四年了,只要你学会了,效率并不低,这是我的例子 https://ex.noerr.eu.org/t/1144449#reply17 , 顺便说一下 tmux 也用 rust 重写了,https://github.com/richardscollin/tmux-rs
    codefun666
        29
    codefun666  
       17 天前
    Rust 的丑陋难以接受,如果需要内存安全,可以用 Go ,性能差一点但问题不大。

    重写的意义在哪里? 能创造什么“价值”?
    CatCode
        30
    CatCode  
       17 天前
    没有
    也不打算
    是 Rust 用户
    ajaxgoldfish0
        31
    ajaxgoldfish0  
       17 天前
    说实话喊了这么久的 rust 并没有觉得好在哪里,我身边没见过会 rust 的。
    midstream
        32
    midstream  
       17 天前 via Android
    如果空闲时间多,可以搞,完成了之后很有成就感和满足感。
    如果纯为了解决问题,可以但没必要
    DeWjjj
        33
    DeWjjj  
       17 天前
    写过几个以前 java 写的日志微服务,速度快了一点,重构之后很稳定。
    但是,收益不大,性能上收益很小。
    roundgis
        34
    roundgis  
       17 天前 via Android
    @gullitintanni 航空航天不是还有 ada 么
    zagfai
        35
    zagfai  
       17 天前
    都差不多 我什么都写 py c rust c# swift kotlin java 。。。。用着写得最快的还是 py 。。。
    cnbatch
        36
    cnbatch  
       16 天前
    @sxhxliang 准确来说,是有个爱好者尝试使用 Rust 重写 tmux
    ReadMe 内的两句话即可看出来:
    “This project is alpha quality and has many known bugs”
    “This a fun hobby project for me.”

    原版 tmux 依然与 Rust 无关:
    https://github.com/tmux/tmux
    buf1024
        37
    buf1024  
       16 天前
    有,python 重构为 rust ,总规模如下:
    find . -name '*.rs' -print | grep -Ev 'target|frontend' | xargs wc -l

    24280 total

    不要被上面负面情绪所影响,这些可能没几个真正写过 rust 代码,rust 就是上手难而已。但是等你熟悉它的编码思维,写过几个上规模的代码,编码效率也很快。

    不过 rust 编译很慢,需要你准备性能高点的电脑。
    wupher
        38
    wupher  
       16 天前
    数据分析感觉用 python 可能更合适?

    有 python 工具项目转 Rust ,图片处理类。确实不那么容易,当然效果也很显著。

    AI 时代了,其实当前应该比你想像的要简单多了。
    bluearc
        39
    bluearc  
       16 天前
    rust 开发效率高更多体现在多模块大项目上吧,相比其他语言写出来更可控也好审阅;而且 rust 入门也是很需要时间的。既然原项目是 C ,那我觉得用 cpp 重构更合适
    yannxia
        40
    yannxia  
       16 天前
    业务性质上的代码反而不难,我用 rust 在重构一个 API Proxy ,难度就变大了,很多抽象不太好写,因为所有权 + 泛型 变成了两座大山
    IamUNICODE
        41
    IamUNICODE  
       16 天前
    我,把原来老东家用 node 写的引擎重写了,性能提高不少
    我是用两周把语法熟悉了一遍,然后配合 cursor 和 chatgpt 重构的,每写一点就问 cursor 原理,尽量弄懂所有代码,;另外代码结构还是我自己来的,所以还是可控的,现在在折腾硬件 linux 了
    感觉最难受的就是生命周期,让 gpt 给我出了好几道题,做完又忘了,其余的还是很爽的。
    xdeng
        42
    xdeng  
       16 天前
    尝试了入门三次 都没入进去
    nebkad
        43
    nebkad  
       16 天前
    省流:
    能问出这个问题的,一概回答不建议用 Rust 重构。
    因为适合用 Rust 重构的人和项目不会问这个问题。

    不省流:
    用 rust 实现的数据引擎已经在哗哗地赚钱了
    Kumo31
        44
    Kumo31  
       15 天前
    Rust 还是主要替代 C/C++的场景,我们的存储引擎是用 Rust 开发的,比 C++省心多了
    bunny189
        45
    bunny189  
       14 天前
    @buf1024 大佬,能不能问问你学习 rust 的路线~
    Nugine0
        46
    Nugine0  
       13 天前
    有人已经在用 Rust 赚钱了,有人还在打语言口水仗。

    很多人学不会 Rust 完全是没有放下包袱,还在用其他语言的思维硬扭,那当然效率提不上去。
    反而一些学生上手 Rust 就飞快,就算现在有 AI 辅助,也能看出人和人之间的学习能力确实有区别。

    话说回来,重写旧项目总是有目标的,你的目标可以是提升性能、降低维护成本、练习新技术栈、吸引开源贡献等等,但不能是跟风。评估一下你是否能在合理的耗时内达成项目目标,就知道该不该重写了。
    buf1024
        47
    buf1024  
       13 天前 via Android
    @bunny189 # 45 不能,我是一个被职业淘汰的人,没资格回答。
    gufeng311
        48
    gufeng311  
       13 天前
    @lasuar 你的应用有多少并发,多少数据量,能让你觉得 go 性能还不够必须用 rust 的情况?
    Observer42
        49
    Observer42  
       11 小时 52 分钟前
    @Rickkkkkkk 没懂,协程/线程都能返回数据的,join 拿到以后合并不就行了,都用不到 channel / Arc&Mutex 之类的概念
    关于   ·   帮助文档   ·   自助推广系统   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   954 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 20:10 · PVG 04:10 · LAX 13:10 · JFK 16:10
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.