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

Rust 它凭啥这么难?学习路线这么陡峭。。。。

  •  
  •   nickyang897897 · 2021-03-19 09:22:41 +08:00 · 19515 次点击
    这是一个创建于 1105 天前的主题,其中的信息可能已经有所发展或是发生改变。
    第 1 条附言  ·  2021-03-19 10:17:46 +08:00
    我是 Java 出身,scala ,js,dart,python,这些都会,c/c++也学过基础,但是我学 Rust 虽然可以理解,但是学完一点生产力都没有,看别人的源码还是不知所云,不知道是别人写的太深还是我自己的基础没有学好。
    第 2 条附言  ·  2021-03-19 10:22:10 +08:00
    按理说,我即有 c 这种手动内存管理的理解能力,也见过 scala 这种函数式语言强大的语法表现力,也有 java 工程话的思想,怎么到了 Rust 这里却不能形成生产力,难道我太菜了?
    102 条回复    2021-04-26 04:27:48 +08:00
    1  2  
    typetraits
        1
    typetraits  
       2021-03-19 09:44:08 +08:00   ❤️ 1
    Rust 适合有 C++基础的人学

    第一天用的时候各种报错,到第二天突然感觉豁然开朗,有种语言就该这么设计的感觉。昨天写 JavaScript 时顺手写了个 const x = if {} 一直报错,看了半天才发现问题


    对我个人来说最大的缺点是还需要写分号
    yamasa
        2
    yamasa  
       2021-03-19 09:47:36 +08:00
    那要看你之前主要用的啥。
    no1xsyzy
        3
    no1xsyzy  
       2021-03-19 09:53:39 +08:00   ❤️ 8
    Rust 是给原本写 C/C++ 的人用的。
    既不想放弃 C/C++ 手动管理内存的性能优势,又想要避免手动管理内存的风险
    结果就很简单:编译器帮你作内存管理的 Code Review
    而为了实现这一目的,填充了大量的让编译器能理解的标注。
    missdeer
        4
    missdeer  
       2021-03-19 10:00:06 +08:00
    几年前 Rust 刚出来的时候我看了一下,也觉得挺难的,直接被劝退了
    前些天偶然在 B 站看到一个微软 MVP 做的入门教程,发现也不难,除了语法糖多,也就多了个内存管理和生命周期的新概念
    abcbuzhiming
        5
    abcbuzhiming  
       2021-03-19 10:07:36 +08:00
    我个人对 Rust 的看法是,它其实并没有降低复杂性(因为它要操作内存,并且需要极致性能),它只是把复杂性从开发者那里,移动到了编译器的变异阶段,所以 rust 的编译速度特别慢,而且它的特性不比 C++少多少
    xzh654321
        6
    xzh654321  
       2021-03-19 10:09:34 +08:00
    @missdeer 可以分享一下课程吗
    solaya
        7
    solaya  
       2021-03-19 10:12:29 +08:00   ❤️ 1
    搞过 C++的学起来还好
    676529483
        8
    676529483  
       2021-03-19 10:12:56 +08:00   ❤️ 1
    我以前也这么觉得,后来看了 c++,发现 rust 就是 c++的 move+RILL+引用,就没那么难了。当然,放弃了指针也带来了很多不便,最关键找工作没用。。。
    anonydmer
        9
    anonydmer  
       2021-03-19 10:13:20 +08:00   ❤️ 1
    春节时候学习了一下 Rust,发现难就难在它那个内存管理和生命周期的概念上;但是编译器都帮你搞定了几乎;所以基本上只要代码能通过编译,就没问题了
    yannxia
        10
    yannxia  
       2021-03-19 10:13:59 +08:00
    Rust 的 lifetime 属于好理解,写起来就有点脑壳痛。学习曲线复杂还是得看 Haskell 。Rust 学习的背景大多数是因为之前不是搞 CPP 的,如果从 Java / Go 转过来会在内存管理上卡一下,如果是从 C 转过来,就会在复杂的语言特性卡一下。说起来还是 CPP 本身的复杂度换了个马甲。
    XIVN1987
        11
    XIVN1987  
       2021-03-19 10:14:38 +08:00   ❤️ 2
    因为有且仅有它和 C++追求“zero cost abstraction”

    既想要没有性能损失,还想要高级的抽象能力,,那肯定要损失点儿什么,,总不能只有好处、没有代价吧,,天下哪有这么好的事儿
    h82258652
        12
    h82258652  
       2021-03-19 10:16:37 +08:00   ❤️ 3
    确实是很难,生命周期这东西我就没一次可以一次性写对的,总是被编译器教做人
    宏定义这玩意到现在还是学不会
    然而我觉得 Rust 这种才是未来语言的发展方向,完整的 tool chain ( cargo 、rustfml 、rustdoc ),ownership 使得不需要 GC 的存在,不存在 null 也就不存在 NullPointerException,灭掉 Exception 改为 Result 这样就不会像 C#、Kotlin 这种调用第三方不知道里面会扔什么异常的情况( Java 有显式异常所以还好)。
    trait 我目前还是保留意见,没有其它语言中 extends 这种感觉还是怪怪的,但数据字段与方法实现的完整分离是个好设计。
    目前对于 Rust 来说最大问题就是生态,async 、await 标准确定下来才没多久,可用的 GUI 框架也没有( iced 试过,离实际生产差太多了)。再过个 5 年或者 10 年应该就会好很多,现在学完全就是投资未来。

    PS:个人想法,要是 Rust 能加上 C# 的表达式树那就完美了
    yazoox
        13
    yazoox  
       2021-03-19 10:21:46 +08:00   ❤️ 6
    再难能有 c++难?
    c++编译那一堆莫名其妙的 compile or linking errors,那才是让人崩溃呢......
    araaaa
        14
    araaaa  
       2021-03-19 10:34:45 +08:00   ❤️ 1
    难的原因其实就是把原来 C 运行期的问题提前到了编译期,然后就会产生非常多的写法上的限制。
    SuperMild
        15
    SuperMild  
       2021-03-19 10:41:57 +08:00   ❤️ 1
    Rust 不难,难的是 rust 想解决的问题。

    我试过不管效率不管资源消耗,一切对象都复制复制,这样写 Rust 非常爽,不难学。但如果想尽量提高效率节省资源,就难写了。

    然而,想尽可能提高效率节省资源,哪种语言不难呢?可见难的不是语言,是现实问题。
    levelworm
        16
    levelworm  
       2021-03-19 10:42:41 +08:00
    话说如果写 C++严格按照一个子集来写,会不会也很好?之前在知乎看到一个帖子,说是大家讨论 C++里面哪些特性应该小心使用,不知道大家怎么看这个?

    > 能做到对 C++语言的特性基本分类,然后根据分类正确使用它们我对 C++特性的四大分类为了兼容 C 语言,不得不继承下来的特性,比如#include,强制类型转换,直接内存操作,基础类型和函数系统,宏为了零开销实现 OOP 而设计的特性,比如 class 继承和派生,虚函数,函数重载为了开发效率而设计的特性,比如 template 以及一些列 stl,算符重载,auto 为了解决实际问题不得不向现实妥协而设计的特性,比如 explicit,mutable,xxxxx_cast,register,volatile,inline,asm,template 特化,friend 第一种特性在真正需要和 C 语言打交道是要小心使用,第二种特性才是主要使用的,第三种特性只在遇到开发效率问题时使用,第四种特性要尽量避免使用,尽量不要制造需要这些特性才能解决的问题

    作者:姚冬
    链接: https://www.zhihu.com/question/444555079/answer/1754123101
    SuperMild
        17
    SuperMild  
       2021-03-19 10:45:03 +08:00   ❤️ 1
    看到楼主附言说 “学 Rust 虽然可以理解,但是学完一点生产力都没有,看别人的源码还是不知所云”,可见 rust 本身不难,而是一般需要用到 rust 的地方,多数是想解决难题,“看别人的源码不知所云”不是不理解 rust,而是不理解别人在解决的问题。
    DearMark
        18
    DearMark  
       2021-03-19 10:45:07 +08:00
    通过编译,世界和平。为了无 GC,加上了无数特性。但确实很规范的语言,Result 处理真的优雅。
    gygesm123
        19
    gygesm123  
       2021-03-19 10:53:11 +08:00
    rust
        20
    rust  
       2021-03-19 10:56:41 +08:00
    h82258652
        21
    h82258652  
       2021-03-19 11:04:31 +08:00
    @gygesm123
    https://www.zhihu.com/question/50779086/answer/122684586
    垠神这篇早就被干烂了

    反正我觉得王垠这篇完全就只是看了下语法然后写出来的,return 那个简化我一开始也很不习惯,但没这个 lambda 表达式就没法简洁了
    HiShan
        22
    HiShan  
       2021-03-19 11:05:44 +08:00
    你确定你会 Scala ? 逃)

    Rust 难,因为你计算机基础不够,你对操作系统内存变量这些东西理解不足。
    cco
        23
    cco  
       2021-03-19 11:08:23 +08:00
    Scala - -。头皮发麻,自己写的代码时间长不看都看不懂。
    gygesm123
        24
    gygesm123  
       2021-03-19 11:08:40 +08:00   ❤️ 2
    @h82258652 语言的精髓在于简洁是没错,但如果因为简洁而失去了可读性,那真的得不偿失。
    coolmenu
        25
    coolmenu  
       2021-03-19 11:11:09 +08:00
    还是要做一个小项目才能熟练起来。
    h82258652
        26
    h82258652  
       2021-03-19 11:11:43 +08:00
    @gygesm123 是的,有时候我真的不介意写多一点,例如 Rust 中同名变量覆盖这种,没有我觉得可能更好更严谨。
    nbndco
        27
    nbndco  
       2021-03-19 11:13:10 +08:00 via iPhone
    @gygesm123 wangyin 那个解读真的太肤浅了。大概就是大家在评红楼梦,他说章节标题没加粗大家不容易找到的感觉。

    可读性当然很重要,但是 wangyin 那些东西对 rust 的可读性完全没有意义,如果写过 rust 的人就知道反而会显著降低可读性,因为 rust 里匿名类型太多了。
    fakeshadow
        28
    fakeshadow  
       2021-03-19 11:14:22 +08:00
    从 GC 语言转到 Rust 一般都会有类似感觉。
    fengjianxinghun
        29
    fengjianxinghun  
       2021-03-19 11:16:37 +08:00
    @h82258652 哪有什么生态问题,去年写了一年 async/await smol/tokio 一堆实现还不够你用?
    fengjianxinghun
        30
    fengjianxinghun  
       2021-03-19 11:18:07 +08:00
    @fengjianxinghun 去年用 smol 的 async/await 实现了一个 2 层 tap/vpn 一个 tcp/udp 代理
    tairan2006
        31
    tairan2006  
       2021-03-19 11:19:20 +08:00
    Rust 主要还是写起来太费劲…

    老实说我不觉得这是未来语言发展方向
    gygesm123
        32
    gygesm123  
       2021-03-19 11:22:39 +08:00
    @h82258652 不好说,但我不是很喜欢那种混淆不清的语言。就像我喜欢读通俗易懂的小说,不喜欢文言文一样。
    h82258652
        33
    h82258652  
       2021-03-19 11:24:25 +08:00
    @fengjianxinghun async-std 和 tokio 的问题啊。。。当你发现一个 lib 依赖 async-std,然后另一个 lib 依赖 tokio 的时候。。。反正我心里是崩溃的,虽然 tokio 说会靠近 async-std 就是了。
    另外 GUI 这块生态就是真的不行。
    fengjianxinghun
        34
    fengjianxinghun  
       2021-03-19 11:27:20 +08:00   ❤️ 1
    @h82258652 啥,smol 早就兼容 2 种写法了,你在 smol 里即可用 async-std 也可以用 tokio,async-std 内部用得 smol 更没问题。

    smol::block_on(Compat::new(async move {
    //三种都兼容

    }));
    h82258652
        35
    h82258652  
       2021-03-19 11:28:43 +08:00
    @fengjianxinghun 感谢,smol 还没用过,有空看一下
    fengjianxinghun
        36
    fengjianxinghun  
       2021-03-19 11:29:36 +08:00
    @h82258652 三种实现源码我全看了,现在生态成熟得不行。sj 大神得 smol 兼容一切得弄法完全修补了分裂。
    SuperMild
        37
    SuperMild  
       2021-03-19 11:35:13 +08:00
    @tairan2006 C/C++写起来也费劲啊,不是未来发展方向,但要压榨硬件性能也没有更好的办法。rust 不是用来取代 GC 语言的。
    chenqh
        38
    chenqh  
       2021-03-19 11:41:34 +08:00
    因为 rust 无 gc 呀,如果 rust 有 gc 的话,估计不会这么难
    fffang
        39
    fffang  
       2021-03-19 11:45:07 +08:00   ❤️ 1
    cmdOptionKana
        40
    cmdOptionKana  
       2021-03-19 11:45:27 +08:00
    @chenqh 如果 rust 有 gc, 那就完全发展不起来了,单凭语法特点干不过 C#和 kotlin 。
    fffang
        41
    fffang  
       2021-03-19 11:45:50 +08:00
    这个 V2EX 的 markdown 闹哪样?
    chinvo
        42
    chinvo  
       2021-03-19 11:47:56 +08:00   ❤️ 1
    用过 C++ 的都说好.

    Rust 确实不是用来解决"互联网工程"相关的工业级问题的, 相比能快速开撸大工程 (CRUD, 笑) 的 PHP .Net Java, 缺少"工业级"轮子. 相比 Go Python 缺乏亲民性. 在简单用用的情况下相比 C/C++ 又太过复杂.

    但是如果深度使用过 C/C++, 总有一个内存管理的坑等着你, 这时候再用 Rust, 会发现它简直是"世界之光". 只要能编译,根本不怕跑飞.

    前段时间的同类讨论 /t/757796
    chinvo
        43
    chinvo  
       2021-03-19 11:49:03 +08:00
    @fffang #40 回复不支持 md. 贴图直接贴链接就好, 第三方客户端 /浏览器扩展都能自动加载.

    我隐约记得以前 v2 官方支持几个图床链接的自动加载了, 后来好像是把支持砍了???
    xarthur
        44
    xarthur  
       2021-03-19 11:58:22 +08:00
    Scala 也不好理解啊(逃
    说正经的。我最近在把 Rust 的语法过了一下,大部分的概念没什么特别新奇的(包括 trial ),主要还是内存管理部分比较新奇,乍一看上挺难的,实际上手写感觉还行(也可能我没接触比较大的项目)
    我写 Rust 目前遇到最大的问题是不知道写什么,大部分项目不需要 Rust 这种 zero-cost abstractions (大部分项目也不延时敏感、内存敏感)。而如果单论语法 Rust 的语法其实在一堆现代语言里算不错(相比 Go 就好多了),但是不是最好的( Rust 各种符号用的太多了,乍一眼看上去会很复杂,个人观点)。
    想来想去,Rust 可能对于我来说适合写一些关于网络编程的小工具。
    Justin13
        45
    Justin13  
       2021-03-19 12:14:44 +08:00 via Android   ❤️ 4
    确实,我最近得空也在看 Rust 。有好的设计,也有让我很难受的地方,具体的有
    1. 可以通过不写分号来返回表达式的值,这可太隐晦了,可读性直接拉到底。
    2. lifetime 各种意义上的反人类,特别是那个语法,最烦的就是这种依附于特殊字符的语法了,代码堆到最后,那是人看的?
    比如下面这个函数声明
    fn longer<'a>(s1: &'a str, s2: &'a str) -> &'a str {
    直接把我劝退,这还是没加泛型呢。。。
    3. 没有三元运算符,本来还没什么,搜了一下把我看乐了,反对的原因多是,可读性差,有 if else 一种写法就够了,写这些的人怎么不看看那恶心的无分号返回值呢。

    这语言我是不喜欢,但是它的设计思路很有意义,把内存管理,变量生命期等痛点从运行时提前到编译时,但是带来的限制就是写起来束手束脚,并且额外的信息量得由程序员给出,这可太痛苦了。

    我比较倾向于 dependent type,让语言和编译器本身支持更高级的类型识别,从而真正解放程序员。
    chenqh
        46
    chenqh  
       2021-03-19 12:19:14 +08:00
    @cmdOptionKana 但是 rust 能编译成 2 进制呀
    gggxxxx
        47
    gggxxxx  
       2021-03-19 12:38:03 +08:00   ❤️ 1
    我始终有个观点就是,这个时代来说,c++和 rust 这种语言是非常糟糕的语言。
    就跟汽车发展一样,最早是手动挡,对驾驶员操作要求蛮高的,还得略懂一些汽车机械原理。
    然后自动挡取代手动挡,用过都说好。什么费油不费油都是穷人思维,工具就是拿来用的,用不重要开销换便利才是对的思维。
    再然后就是自动驾驶,人以后只需要乘车就是。

    编程语言朝着接近自然语言和超多辅助语法糖发展才是正道,但是偏扁现在的风气又有点反古,什么追求运行效率人人喊的朗朗上口......现在的计算机硬件算力早就过剩了好么,程序慢点又怎么了?换来的是易用啊。。。。
    当然我相信绝大多数程序员的思维跟手动挡车爱好者一样的,自己亲手解决一个已经有现成解决方案的问题,会非常有快感的......
    cmdOptionKana
        48
    cmdOptionKana  
       2021-03-19 12:40:27 +08:00
    @chenqh kotlin 也能编译成二进制 https://kotlinlang.org/docs/native-overview.html

    另外,Go 有 GC 也能编译成二进制。C#好像也可以或者有计划,这个我不太确定。
    SuperMild
        49
    SuperMild  
       2021-03-19 12:45:22 +08:00   ❤️ 1
    @gggxxxx 不是,你想想浏览器的渲染引擎,linux/Mac/Win 这些系统的底层,还有量化交易要求的超低 IO 延时,还有数据库,复杂的 office 文档,科幻电影场景渲染……慢了真的可以忍受吗?
    daysv
        50
    daysv  
       2021-03-19 13:13:33 +08:00   ❤️ 5
    @gggxxxx "计算机硬件算力早就过剩了" 这句话我认为永远都是错误的
    zomco
        51
    zomco  
       2021-03-19 13:15:38 +08:00
    @gggxxxx 低功耗场景还是要靠这些糟糕的语言
    ICU
        52
    ICU  
       2021-03-19 13:16:59 +08:00
    @missdeer 你看的这个 Up 主,是不是叫软件工艺师(手动狗头)
    missdeer
        53
    missdeer  
       2021-03-19 13:22:11 +08:00
    @ICU 确实是。。。20 楼那个链接。。
    iold
        54
    iold  
       2021-03-19 13:24:42 +08:00 via iPhone
    @missdeer #4 大家好 我是杨旭
    Jirajine
        55
    Jirajine  
       2021-03-19 13:26:30 +08:00 via Android
    @Justin13 lifetime 就是一种泛型啊,你在函数签名上声明了一个泛型'a,并提供给引用类型。
    类似于这样:
    fn longer<T>(s1:Ref<T,String>,s2:Ref<T,String>)->Ref<T,String>
    Justin13
        56
    Justin13  
       2021-03-19 13:34:51 +08:00 via Android
    @Jirajine 但是还有得 lifetime 的类型泛型啊,我说的是这个
    Justin13
        57
    Justin13  
       2021-03-19 13:37:26 +08:00 via Android
    @Jirajine 但是还有非 lifetime 的类型泛型啊,我说的是这个

    打错,得->非
    ppphp
        58
    ppphp  
       2021-03-19 13:39:35 +08:00
    我写个链表题搞了快三天了,心态是完全爆炸的
    pancl
        59
    pancl  
       2021-03-19 13:43:11 +08:00 via Android
    rust 降低语法复杂的话,还可以扩大适用范围
    Jirajine
        60
    Jirajine  
       2021-03-19 13:44:59 +08:00 via Android
    @Justin13 那就再加啊,生命周期就是通过泛型实现的,func<'a,'b,C,D> 凡是'开头的都是生命周期的泛型参数,其他的都是普通的泛型参数。
    除了命名方式不一样,别的没有区别。
    xzh654321
        61
    xzh654321  
       2021-03-19 13:47:37 +08:00
    @rust 感谢
    Nugine0
        62
    Nugine0  
       2021-03-19 13:48:37 +08:00 via Android
    最近完成了一个基于 io_uring 的 proactor,几百行一次过,刚写完就能跑起来
    litchinn
        63
    litchinn  
       2021-03-19 13:51:22 +08:00
    我比较期待 rust 在游戏开发领域的使用
    wellsc
        64
    wellsc  
       2021-03-19 13:55:57 +08:00
    @Nugine0 [给我看看]
    zsl199512101234
        65
    zsl199512101234  
       2021-03-19 14:03:08 +08:00
    rust 更适合系统编程(数据库,操作系统),其它感觉 java 或者 C#
    https://github.com/mit-pdos/noria
    https://github.com/redox-os/redox
    gBurnX
        66
    gBurnX  
       2021-03-19 14:12:24 +08:00
    如果有时间,可以试试从底层一步一步往上,这样什么语言都不难。
    gggxxxx
        67
    gggxxxx  
       2021-03-19 14:13:46 +08:00
    @SuperMild 我的意思是,慢的话提升硬件啊。
    等你花时间去优化代码重新发明更高效的编程语言......还不如等新硬件上市......
    sillydaddy
        68
    sillydaddy  
       2021-03-19 14:19:00 +08:00
    看了回复,决定给 Rust 种颗草。
    junkun
        69
    junkun  
       2021-03-19 14:19:35 +08:00
    @gggxxxx 不是效率的问题,你总得有个东西把底层的脏活干了。不然 java 这样的 gc 语言能自举自己吗,还不是要靠 c++来做解释器。而且像嵌入式、系统内核这种环境根本不可能用 gc 。
    silentt
        70
    silentt  
       2021-03-19 14:35:18 +08:00
    @junkun 轻杠一下,java 能自举
    nickyang897897
        71
    nickyang897897  
    OP
       2021-03-19 14:38:07 +08:00
    @HiShan 搞大数据的,不会 scala 说不过去吧
    Nugine0
        72
    Nugine0  
       2021-03-19 14:40:50 +08:00 via Android   ❤️ 1
    @wellsc 目前只有最简单的功能,但塞了不少优化。
    一般情况下,进行一次 IO 无需任何额外的堆分配。未来用上 io_uring 的最新特性后,可以做到进行一次 IO 连系统调用也不需要。
    有线程、协程、原子指令、互斥锁、信号量、对象池、状态机、小对象优化、自定义虚函数表等知识点,unsafe 自然也没少用。

    https://github.com/datenlord/datenlord/pull/193
    DonkeyBenjamin
        73
    DonkeyBenjamin  
       2021-03-19 14:44:18 +08:00
    1. rust 不是给大部分人用的,它的目标是 performance and safety, 不是 productivity; 适合大佬用来做系统编程或做底层的东西
    2. 我觉得就 rust 的目标而言,它的设计已经是尽力做到博采众长了
    zjsxwc
        74
    zjsxwc  
       2021-03-19 14:52:27 +08:00
    写 rust 怎么简单怎么来呗,
    28 原则大部分特性我不用,
    'static 一把梭


    liuxey
        75
    liuxey  
       2021-03-19 15:02:10 +08:00
    @silentt #70 自举虽然一直是可以的,但举的也只是字节码, 举 JVM 还是要靠 C++
    说到 JVM,我倒觉得 JVM 的部分代码可以考虑用 Rust 试试
    cmdOptionKana
        76
    cmdOptionKana  
       2021-03-19 15:10:01 +08:00 via Android
    @gggxxxx 市场不等人,你用舒服的语言做个浏览器出来,卡顿。别人用糟糕的语言做个浏览器出来,明显更流畅。

    这个世界是有竞争的,因此才有人愿意干脏活。有的人为啥凌晨四五点起来卖早餐,他不想睡觉吗,假如全世界一起等八九点的早餐,那大家都可以舒服。可惜有竞争啊。
    AX5N
        77
    AX5N  
       2021-03-19 15:37:39 +08:00
    @cmdOptionKana 你这个卖早餐的例子有点想当然,凌晨四五点起来不代表睡得少。
    Leviathann
        78
    Leviathann  
       2021-03-19 15:38:06 +08:00 via iPhone
    @silentt 好像的确没人关心 javac 是什么语言写的,都关注 jvm 了哈哈🐶
    Leviathann
        79
    Leviathann  
       2021-03-19 15:46:09 +08:00
    @AX5N 换个例子吧,webpack vs esbuild
    这种性能差距可以填平多少年的硬件发展了
    no1xsyzy
        80
    no1xsyzy  
       2021-03-19 15:47:59 +08:00
    @gggxxxx 不是说硬件水平已经接近物理瓶颈了么 —— 虽然上几次也是这么说的,一次用 FinFET 解决的发热极限,还有一次不清楚,但是你不能指望新技术的必然出现啊。
    Intel 的制程加号再多,性能没有被甩一整个时代…… 到 AMD 5000 系 CPU 才终于是桌面 CPU 头牌换位。

    而且也不环保。
    libook
        81
    libook  
       2021-03-19 16:32:39 +08:00
    越简单的语言对开发者要求越高,比如 C 、JavaScript,稍不注意就可能写出有缺陷的代码,而且这些代码中大部分是可以运行的。

    可以去 benchmarksgame 看看 Rust 的压测表现,性能和 C/C++相当,到这种程度又要规避很多 C/C++常见的开发痛点,于是就设计出了一些复杂的开发模式,以至于让 Rust 的学习曲线变得陡峭。

    可能习惯了就好了,特别是现在还带着很多其他语言的思维定式,比如 Rust 里的 Ownership 和 C 里的指针操作乍一看长得差不多,但实际上是完全不同的理念。

    当然看代码看不懂也不一定是自己的问题,代码是有可读性好坏之分的。

    作为一个大学英语四级都没过的人,原版 Book 已经看了一半了,打算看完后再看 Rust by Example,以及去 GitHub 上找找 coreutils_rs 之类的简单项目看看。
    xemtof
        82
    xemtof  
       2021-03-19 16:55:49 +08:00
    @no1xsyzy 下面该是 GAA 发挥威力的时候了
    HeapOverflow
        83
    HeapOverflow  
       2021-03-19 17:00:46 +08:00
    nim 跟 vlang 了解一下
    industryhive
        84
    industryhive  
       2021-03-19 17:10:07 +08:00
    @junkun 自举不是不可以,是没多大意义。不过像 java 这么庞大的用户群,虽然自举这个事没太有必要,但早晚还是会有人做的,比如 GraalVM,性能上相比于 Hotspot 还是有提升的,GraalVM 运行 java 应用性能提升 4%-10%,运行 Scala 应用性能提升 20%。以后 Oracle 的优化重点估计会越来越向 GraalVM 倾斜了。
    industryhive
        85
    industryhive  
       2021-03-19 17:12:58 +08:00
    @liuxey JVM 也是可以举的,比如 GraalVM,100%java 代码,估计以后某个版本会用 GraalVM 把 Hotspot 替换掉。
    fengjianxinghun
        86
    fengjianxinghun  
       2021-03-19 17:16:11 +08:00
    @Nugine0 tokio 有 io_uring 的实现包装
    maomaorun
        87
    maomaorun  
       2021-03-19 18:11:08 +08:00
    你如果用 Rust 的思路写 C++,会发现还是 C++简单
    Nugine0
        88
    Nugine0  
       2021-03-19 18:48:18 +08:00 via Android
    @fengjianxinghun 那个是低层封装,实际要用还得再封一个高层的 proactor 出来。
    io_uring 也提供了多种用户空间 API 的可能,完全可以拿 rust 重写 c 库,换一条路去尝试。
    HeliumTang
        89
    HeliumTang  
       2021-03-19 18:56:10 +08:00
    @ppphp 有个外国大佬专门写了一个怎么用 rust 写链表的教程
    1more
        90
    1more  
       2021-03-19 19:08:01 +08:00
    @ppphp 用 rust 写链表直接变成了 c 语言的书写方式,非常头疼
    KeepPro
        91
    KeepPro  
       2021-03-19 19:15:38 +08:00
    从 15 年就开始关注了,至今还不没学会的,感觉没救了。
    jianghu52
        92
    jianghu52  
       2021-03-19 19:34:27 +08:00
    @missdeer 看你头像,再看你说话,我就猜到了是杨旭。他的视频确实很好,go 开发 web 也很有用。
    impl
        93
    impl  
       2021-03-19 21:13:15 +08:00 via Android
    用 go 就行,简单性能也不错。除非你写浏览器,数据库这种,就需要学 rust
    FightPig
        94
    FightPig  
       2021-03-19 21:14:24 +08:00
    我学了五遍,这才感觉有点豁然开朗
    Wincer
        95
    Wincer  
       2021-03-19 22:16:38 +08:00
    学的语言越多,之前所具备的思维定势反而会误导你,就比如 Rust,变量的生命周期包括 Rust 的内存管理和其他的语言都不一样,如果带着其他语言的思维来尝试理解具备完全不同特性的编程语言,那还不如把自己当成一个编程新手,抛弃所有的思维定势。

    至于楼里大多数吐槽不写分号返回值的这点我倒是觉得还好,这一点明显是脱胎于函数式编程语言:以函数最后一个表达式作为函数的返回值,不过 Rust 还保留了 return 关键字。还有 async 生态问题,如果是 IO 敏感方面的需求我不会选择 Rust 的,Go 不香吗,Rust 就应该写底层、性能敏感型的程序。
    orannge
        96
    orannge  
       2021-03-19 22:52:55 +08:00
    1. Rust/C/C++性能一个梯队,难度也一个梯队
    2. 如果归类,Rust 一类,其它语言(C++/Golang/Java/Python/JavaScript 等)一类,其它语言纵使差距大,但起码概念是相通的
    3. 不追求极致性能、非 CPU 密集,用 Go 就行了,上手简单、编译快、容易出成果,各方面相对均衡
    jones2000
        97
    jones2000  
       2021-03-19 22:58:25 +08:00
    把你原来做的 java 项目全部移植到 Rust, 等你完成, 你就了解 Rust 了, 光看有什么用, 这有不是看小说, 实际运用才行.
    naoh1000
        98
    naoh1000  
       2021-03-19 23:31:21 +08:00
    你学了吗,学了才知道其实也就那样。
    icylogic
        99
    icylogic  
       2021-03-20 02:16:43 +08:00 via iPhone   ❤️ 3
    rust 是 c 艹用户想脱离苦海的一种愿景,没被 c 艹艹过可能感受不深,

    ✓没有头文件,直接就是 module 。
    ✓一个工具解决依赖,构建,测试,干翻 cmake
    ✓默认 const auto,以及把一大坨所谓 c++ best practice 直接做进语言 ,你不需要特别注意就会默认写成那样
    ✓trait 把 sfinae (的一部分)和 concept 以及多继承接口等 dynamic/static dispatch 手段统统干掉
    ✓把函数式编程以不那么恶心啰嗦的方式引入进来
    ✓宏比 c/c++ 的更安全和易用
    lqf96
        100
    lqf96  
       2021-03-20 04:12:23 +08:00   ❤️ 1
    @icylogic 等 GAT, specialization 和 const generics 都做完基本上就比 sfiane 更强大了(虽然是有生之年系列),另外我觉得 Haskell 和 OCaml 对 Rust 的深刻影响是不能忽视的,trait 和 typeclass 简直不要太像...
    1  2  
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   991 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 36ms · UTC 22:01 · PVG 06:01 · LAX 15:01 · JFK 18:01
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.