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

再见 Golang, 你好 Rust

  •  
  •   proxyai · 13 天前 · 3607 次点击

    原因: 不想考虑数据竞争的问题了, 因为人永远考虑不周全, 所以让机器处理才是合理的

    19 条回复    2024-05-14 08:46:55 +08:00
    thinkm
        1
    thinkm  
       13 天前
    不用 Golang 的人,注定只能度过一个相对失败的人生
    williamshan
        2
    williamshan  
       13 天前 via Android
    @thinkm 怎么讲
    sherlockwhite
        3
    sherlockwhite  
       13 天前
    有什么数据竞争的实例吗
    sherlockwhite
        4
    sherlockwhite  
       13 天前
    想不通从一个相对简单的语言转到一个复杂的语言就是因为数据竞争,不太懂是什么逻辑
    march1993
        5
    march1993  
       13 天前
    让机器处理太简单了,所有数据加个锁就完事儿了,但是这样做性能太差了。golang 的套路是让你通过 chan 去通信、同步,而不是靠 sync.*。并且 rust 也没有在语法层面提供同步的办法啊。
    proxyai
        6
    proxyai  
    OP
       13 天前
    @march1993 加锁当然可以, 但是我觉得 golang 的处理方案很凑合, 而且你能保证你永远都会在有需要的时候把锁都加全吗? 是不是感觉非常别扭?
    chaleaochexist
        7
    chaleaochexist  
       13 天前
    这种帖子吧。。。 就是收币的, 得,5 铜币奉上, 不谢!
    minami
        8
    minami  
       13 天前
    这么不喜欢锁怎么不去写单线程的 js ,是不喜欢吗
    smallboy19991231
        9
    smallboy19991231  
       13 天前
    @williamshan 有句原話是 不用 Mac 的人,注定只能度过一个相对失败的人生
    march1993
        10
    march1993  
       13 天前
    @proxyai 所以 golang 套路是让你用 chan 而不是让你加锁啊
    standchan
        11
    standchan  
       13 天前
    用 chan 去通信,而不是传统的锁。
    xwhxbg
        12
    xwhxbg  
       13 天前   ❤️ 1
    冷知识,chan 内部自带一个锁
    lsk569937453
        13
    lsk569937453  
       13 天前
    @proxyai
    rust 不是银弹。
    我在用 rust 实现 redis 的过程中对比了 mpsc::channel 和 Arc::Mutex 的性能。
    单线程下,两者性能差不多的。
    多线程下,全局 Arc::Mutex 对数据加锁的性能还比 mpsc::channel(多生产者单消费者)好一点

    https://github.com/lsk569937453/rcache/tree/main:全局锁
    https://github.com/lsk569937453/rcache/tree/0.0.1:mpsc::channel 实现的多生产者单消费者模型
    ShuWei
        14
    ShuWei  
       13 天前
    你确定自己能受得了 rust 的折磨?
    fregie
        15
    fregie  
       13 天前
    这有什么好选的,本身就是为了不同场景而设计的不同语言,在不同领域各有优势
    nebkad
        16
    nebkad  
       12 天前
    欢迎新的 Rustacean~!

    Rust 是否能够有效减少锁使用,对这个问题有怀疑的程序员朋友们,可以尝试挑战一下实现这个。
    在假定使用者不能使用 unsafe 或者别的魔法的情况下,设计一个既可用于多线程,又可以用于单线程的支持异步操作的 ring buffer ,其隐含的约束或者需求是:只允许有一个写入端和一个读取端
    我用 C# golang C++ Rust 都试过。
    结论就是 Rust 确实不需要额外加锁,仅仅依靠类型系统在编译时就能保证使用者一定满足上述约束。
    其他语言只能通过额外对 ring buffer 加锁保证,或者只能靠文档保证。
    qianjian
        17
    qianjian  
       12 天前
    我纯纯什么都不懂,翻了挺多帖子和讨论,但还是不了解 rust 主攻的场景是什么,感觉什么都能写,但感觉没有哪一块领域属于提起它就想到 rust 。
    nebkad
        18
    nebkad  
       12 天前
    @qianjian #17

    如果不考虑开发成本、维护成本、沟通成本的话,确实是什么都能写啊。
    哪个领域可以用 C++ 几乎都可以用 Rust ,没人提起,是因为 Rust (的名声)积累还不够深。
    theshy2025
        19
    theshy2025  
       4 天前
    rust is not that good but a lot more better than c++ thats for sure
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2407 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 35ms · UTC 14:54 · PVG 22:54 · LAX 07:54 · JFK 10:54
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.