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

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

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

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


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

    既想要没有性能损失,还想要高级的抽象能力,,那肯定要损失点儿什么,,总不能只有好处、没有代价吧,,天下哪有这么好的事儿
    h82258652
        12
    h82258652  
       262 天前   ❤️ 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  
       262 天前   ❤️ 6
    再难能有 c++难?
    c++编译那一堆莫名其妙的 compile or linking errors,那才是让人崩溃呢......
    araaaa
        14
    araaaa  
       262 天前
    难的原因其实就是把原来 C 运行期的问题提前到了编译期,然后就会产生非常多的写法上的限制。
    SuperMild
        15
    SuperMild  
       262 天前   ❤️ 1
    Rust 不难,难的是 rust 想解决的问题。

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

    然而,想尽可能提高效率节省资源,哪种语言不难呢?可见难的不是语言,是现实问题。
    levelworm
        16
    levelworm  
       262 天前
    话说如果写 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  
       262 天前   ❤️ 1
    看到楼主附言说 “学 Rust 虽然可以理解,但是学完一点生产力都没有,看别人的源码还是不知所云”,可见 rust 本身不难,而是一般需要用到 rust 的地方,多数是想解决难题,“看别人的源码不知所云”不是不理解 rust,而是不理解别人在解决的问题。
    DearMark
        18
    DearMark  
       262 天前
    通过编译,世界和平。为了无 GC,加上了无数特性。但确实很规范的语言,Result 处理真的优雅。
    gygesm123
        19
    gygesm123  
       262 天前
    h82258652
        21
    h82258652  
       262 天前
    @gygesm123
    https://www.zhihu.com/question/50779086/answer/122684586
    垠神这篇早就被干烂了

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

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

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

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

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

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

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

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

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

    我隐约记得以前 v2 官方支持几个图床链接的自动加载了, 后来好像是把支持砍了???
    xarthur
        44
    xarthur  
       262 天前
    Scala 也不好理解啊(逃
    说正经的。我最近在把 Rust 的语法过了一下,大部分的概念没什么特别新奇的(包括 trial ),主要还是内存管理部分比较新奇,乍一看上挺难的,实际上手写感觉还行(也可能我没接触比较大的项目)
    我写 Rust 目前遇到最大的问题是不知道写什么,大部分项目不需要 Rust 这种 zero-cost abstractions (大部分项目也不延时敏感、内存敏感)。而如果单论语法 Rust 的语法其实在一堆现代语言里算不错(相比 Go 就好多了),但是不是最好的( Rust 各种符号用的太多了,乍一眼看上去会很复杂,个人观点)。
    想来想去,Rust 可能对于我来说适合写一些关于网络编程的小工具。
    Justin13
        45
    Justin13  
       262 天前 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  
       262 天前
    @cmdOptionKana 但是 rust 能编译成 2 进制呀
    gggxxxx
        47
    gggxxxx  
       262 天前   ❤️ 1
    我始终有个观点就是,这个时代来说,c++和 rust 这种语言是非常糟糕的语言。
    就跟汽车发展一样,最早是手动挡,对驾驶员操作要求蛮高的,还得略懂一些汽车机械原理。
    然后自动挡取代手动挡,用过都说好。什么费油不费油都是穷人思维,工具就是拿来用的,用不重要开销换便利才是对的思维。
    再然后就是自动驾驶,人以后只需要乘车就是。

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

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

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

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


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

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

    而且也不环保。
    libook
        81
    libook  
       262 天前
    越简单的语言对开发者要求越高,比如 C 、JavaScript,稍不注意就可能写出有缺陷的代码,而且这些代码中大部分是可以运行的。

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

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

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

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

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

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