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

一年多 Rust 的了解,对蠢蠢欲动的同学一点建议

  •  
  •   VDimos · 2019-01-29 18:42:04 +08:00 · 29650 次点击
    这是一个创建于 2111 天前的主题,其中的信息可能已经有所发展或是发生改变。

    本来是前端,由于 webAssembly 的逐渐普及,从去年开始从 Rust 的那一本教程入手,看完以后又看了 Rust reference,接着看了 Rustnomicon,又大致浏览了一遍 Rust Doc,还有 cargo book。最后总结了以下:我觉得 Rust 应该是昙花一现的产物,因为它实在是太复杂了。

    如果你不需要做 FFI 之类的,我个人还是不建议深入学习 Rust,有兴趣当然是好的,但是 Rust 需要花费的时间不是一天两天,对比其他的语言,比如 C,Rust 显得更复杂和困难。

    Rust 保证的安全性的代价就是入门曲线很高,对于习惯了脚本语言或者 c 类语言的程序员而言,Rust 显得不是那么友善。我学这门语言更多的是因为学习兴趣很高,时间充沛,但是对于大多数人而言,时间以及语言( Rust 的文档除了教程以外几乎都是英文)问题,或许并不值得去学习。

    更为重要的一点是,Rust 标榜的是安全性,对于很多人而言,Rust 的这种安全性根本不知道用在哪里,因为它的实战场景太少了!!! Rust 的最大的开源后台开发库 Rocket.rs ,甚至现在也没发布 1.0 版本,而且更多的是 Rust 目前几乎没有像诸如 java 之类的,甚至是 golang 之类的新语言,一套完善的开发栈可供参考。更多的是自己踩坑,自己挖坑自己踩!

    Rust 是门从设计层面就假设你是个有很强逻辑以及经验的程序员,但是这个假设并不是什么时候都成立。Rust 的所有权系统有时候显得很“臃肿”,虽然有诸如 Rc 和 RefCell 之类的 struct 可以弥补。举个栗子来说,很多初学者在看完教程之后,基本的数据结构,诸如双向链表、二叉树之类的,都不能写出来,更糟糕的是,甚至完全没有头脑(我承认我就是这种人)。

    Rust 我最爱的是它的宏!如果你是 C 之类的开发者,对 C 的宏忍无可忍,那么 Rust 的宏是真的只能用“美丽”来形容!

    如果你是从事嵌入式、图形处理之类的,我强烈建议你深入了解 Rust 这门语言,它的安全性或许正是你所需要的!

    Rust 目前是 2018 版本,这个版本修复了很多饱受诟病的 Bug,我很期待这门语言的发展与未来。

    总结来说,如果你是一个初学者,或者时间不够,或者精力不够,或者语言(英语)能力不强,那么我建议还是不要碰这门语言了,如果有一天 Rust 发展得无比繁荣,那么 Rust 可以学一学,但目前看来,并不会(求打脸!!!)。

    如果你是从事底层开发,对 C 语言的内存泄漏的问题很头大,那么 Rust 很适合你!但同上,时间和精力是问题。

    85 条回复    2021-02-15 00:30:58 +08:00
    SuperMild
        1
    SuperMild  
       2019-01-29 18:51:40 +08:00
    大多数人学 rust 都是兴趣吧,毕竟明显不是很好找工作的语言。

    rust 语言本身蛮优秀的,功能强大,可玩性高。所有权、生命周期那一套东西是需要一点时间才能熟悉,但本质上并不是很难很复杂的东西,只是思维不习惯(与别的语言差异较大),耐心多做一些练习题就会熟悉。

    除了学习曲线这个缺点,别的特性优点还蛮多的,值得一学。
    secondwtq
        2
    secondwtq  
       2019-01-29 18:54:49 +08:00
    Rust 应该对标 C++,对比 C 复杂并不能说明什么 ...
    trait
        3
    trait  
       2019-01-29 18:54:55 +08:00   ❤️ 7
    > 更为重要的一点是,Rust 标榜的是安全性,对于很多人而言,Rust 的这种安全性根本不知道用在哪里,因为它的实战场景太少了!
    你真的理解了什么是安全性么?当然除了仅有的几所名校,中国各大计算机官方培训班没那个能力普及基本的 PL 知识,前端就更不用说了
    > Rust 的最大的开源后台开发库 Rocket.rs ,甚至现在也没发布 1.0 版本
    rocket 什么时候成了最大开源后台开发库,先了解一下生态再说
    >Rust 的所有权系统有时候显得很“臃肿”,虽然有诸如 Rc 和 RefCell 之类的 struct 可以弥补。举个栗子来说,很多初学者在看完教程之后,基本的数据结构,诸如双向链表、二叉树之类的,都不能写出来,更糟糕的是,甚至完全没有头脑(我承认我就是这种人)。
    这问题在 2017 年之前成立,现在还说写不出来只能说你官方 book 你没读进去,trpl 专门花了一章讲这几个智能指针,borrowchecker 原则更是明确列出来了
    hhhsuan
        4
    hhhsuan  
       2019-01-29 18:57:25 +08:00
    rust 能用来干什么?
    ChristopherWu
        5
    ChristopherWu  
       2019-01-29 18:57:44 +08:00   ❤️ 1
    @trait 能否分享一下 PL 的知识?或者讲 PL 的科普数据?最近想从 PL 的角度来喷 go 脑残粉,发现不知道怎么样学习。
    trait
        6
    trait  
       2019-01-29 19:00:59 +08:00   ❤️ 8
    @ChristopherWu 一般来说系统学习推荐看 TAPL https://www.cis.upenn.edu/~bcpierce/tapl/
    不过想了解一下基础这篇牛津大佬的论文就可以了 http://lucacardelli.name/papers/typesystems.pdf
    secondwtq
        7
    secondwtq  
       2019-01-29 19:09:05 +08:00   ❤️ 1
    @ChristopherWu 如果只是想喷 go 脑残粉的话建议不要入坑,如果真要入坑的话建议时刻谨记 “不忘初心 牢记使命”

    而且你跟 go 脑残粉说这些估计是没用的,如同对假“国学”受害者讲科普,和小粉红讲普世价值
    ChristopherWu
        8
    ChristopherWu  
       2019-01-29 19:11:41 +08:00
    @secondwtq 没事,图个爽快 XD
    其实了解一下 PL 的基础知识(常识)挺好的,不然这门语言跟那门语言的优劣这种都说不了,就没啥意思了。
    12101111
        9
    12101111  
       2019-01-29 19:12:39 +08:00 via Android
    前端看 rust,就跟写 c 的看 node js 那些工具链一样。你先写几个月 c++,比如看看 chromium,再看看 servo,尤其是已经 merge 进 Firefox 的 CSS 引擎 stylo,排版引擎 webrender
    adminsam
        10
    adminsam  
       2019-01-29 19:13:20 +08:00 via Android
    5G+物联网+区块链+Rust
    neoblackcap
        11
    neoblackcap  
       2019-01-29 19:18:32 +08:00 via iPhone
    @12101111 看那些那么复杂,不如看看 TiKV 算了
    misaka19000
        12
    misaka19000  
       2019-01-29 19:22:11 +08:00
    @neoblackcap #11 关键是 TiKV 也不简单啊。。。
    misaka19000
        13
    misaka19000  
       2019-01-29 19:23:23 +08:00
    我觉得学 Rust 的大部分是出于兴趣吧,既然是出于兴趣我觉得学习一下也是挺好的
    secondwtq
        14
    secondwtq  
       2019-01-29 19:35:27 +08:00
    说到轮子,我觉得 Rust 现在有点像几年前的 JS,我逛 GitHub 经常碰到各路神仙拿纯 Rust 重新发明各种基础的库和工具

    个人觉得 Rust 虽然没有 JS 渗透广泛,但是作为 native 语言发挥空间更大,在一干叫唤着要取代 C++ 的 PL 里面还算 userbase 比较扎实的,生态会慢慢好起来

    另外那些大仙们重造的轮子,很多还处于早期阶段,虽然不一定能用于 production,但是代码量不多,Rust 的代码组织方式,抽象能力都比 C 等要好,对我来说相比于那些已经搞了好多年的 C 库要易读,如果只是想知道“某某类型的库 /某某算法的基本实现原理”,还是挺值得看下的。不一定要看 servo 之类明星项目,我觉得像是浏览器引擎这种复杂度的东西,除非有明确的项目目标或者全职在做,只是没事看看很难搞出有用的成果

    讽刺的是,JS 圈现在正在风风火火地推广 WebAssembly 这个可以把他们自己灭掉的东西 ...
    pabupa
        15
    pabupa  
       2019-01-29 19:39:56 +08:00 via Android
    之前看过一点文档。没有 gc,也不用手动释放,那怎么做嘞?一个复合变量在一个作用域只能用一次,,,,其实也挺麻烦的,不过比手动释放要顺手一点。
    ps:在回家的车上,刷刷 v 站,随便 bb 两句,不知道对不对。
    secondwtq
        16
    secondwtq  
       2019-01-29 19:44:44 +08:00
    @secondwtq 噢对了忘了一条,如果按照 #14 中的逻辑,轮子该有的都会有的话,那 Rust 可能的最大的问题就如楼主所说,就是 智商兼容性 了 ...
    Chingim
        17
    Chingim  
       2019-01-29 19:45:48 +08:00 via Android   ❤️ 1
    看完基础,尝试写快排,编译的时候想撞墙
    现在我都不懂怎么自己实现 swap 函数
    VDimos
        18
    VDimos  
    OP
       2019-01-29 19:59:21 +08:00 via Android   ❤️ 1
    @trait 我还在了解,多谢指正
    trait
        19
    trait  
       2019-01-29 20:01:06 +08:00
    @Chingim std::mem::swap, vec 也自带 swap(_, _)
    Moming
        20
    Moming  
       2019-01-29 20:03:48 +08:00 via Android
    rust 后端觉得 actix 更有前景。
    拿来写点小工具也挺好玩的,各种命令行工具重新造轮子
    xfriday
        21
    xfriday  
       2019-01-29 20:26:00 +08:00
    不敢怼 rust 大佬,大多数脾气都不好(之前有见识过),rust 语言也是 2 年前接触过,陆陆续续地关注着它更新,但是对于编程哲学没有追求,只是把语言作为工具来生产 /挣钱,很大概率不适合你。
    Mohanson
        22
    Mohanson  
       2019-01-29 20:56:57 +08:00 via Android
    下午编 substrate 用了 2 小时, 生成 20 G 的中间文件, 而体量和功能差不多的 go ethereum 编译只用 10 秒, 700 兆中间文件
    wi
        23
    wi  
       2019-01-29 23:02:21 +08:00
    昙花一现是不可能的,Rust 开发者野心很大。
    secondwtq
        24
    secondwtq  
       2019-01-29 23:09:11 +08:00
    @Mohanson 找个 JS 的根本不需要编译
    trait
        25
    trait  
       2019-01-29 23:40:37 +08:00 via iPhone
    @Mohanson 迷之 subtrace 和 ethereum 功能体量一样,你还是先分清 protocol 和 platform 比较好
    Yoock
        26
    Yoock  
       2019-01-29 23:45:49 +08:00
    厉害呀
    LokiSharp
        27
    LokiSharp  
       2019-01-30 00:06:59 +08:00 via iPhone
    个人认为 wasm 用 TS 写才是未来的趋势吧
    Mohanson
        28
    Mohanson  
       2019-01-30 01:27:07 +08:00 via Android
    @trait 中文要学好,“差不多”和“一样”是一个词吗?迷之杠精,已拉黑
    Mohanson
        29
    Mohanson  
       2019-01-30 01:45:58 +08:00 via Android
    @LokiSharp 目前 rust 和 go 编译到 wasm 最大的问题是生成的模块过大,一个 hello world rust 在几十 k,go 在几 M(默认情况下),ts 用的 llvm 生成的模块质量目前远好于 rust 和 go, 但 rust 社区目前几乎将 rust 未来的希望全寄托在 wasm 上,挺期待他们会搞出什么名堂。
    Mohanson
        30
    Mohanson  
       2019-01-30 01:47:31 +08:00 via Android
    但目前编译到 wasm 质量最好的语言还是 c, 整个模块没有一字节没用的代码
    Mohanson
        31
    Mohanson  
       2019-01-30 01:50:19 +08:00 via Android
    对 wasm 感兴趣的话推荐 pywasm 这个 wasm 虚拟机实现。
    lrxiao
        32
    lrxiao  
       2019-01-30 02:12:52 +08:00
    Rust 确实太复杂了..
    而且社区太强了,进化太快了,什么时候开始学呢?
    很多很多的资料都是老版的,有时候见到+传引用,~表示递归类型一愣一愣的,很多名词只能从 issue/pull request/rfc 中知道意思。。
    不说别的,rust-lang/rust 里都用很多 deprecated 的 feature
    quinoa42
        34
    quinoa42  
       2019-01-30 05:05:41 +08:00 via Android   ❤️ 1
    对于像我这样半吊子的 PL 爱好者来讲 rust 简直就是理想语言,越用越开心
    quinoa42
        35
    quinoa42  
       2019-01-30 05:19:15 +08:00 via Android
    > 很多初学者在看完教程之后,基本的数据结构,诸如双向链表、二叉树之类的,都不能写出来,更糟糕的是,甚至完全没有头脑
    讲道理,写这些 rust 和 c++有什么区别? c++怎么写 rust 就怎么写,rust 提供了更严格的 compile time 和 runtime time check,我对这条观点不能认同
    trait
        36
    trait  
       2019-01-30 07:14:26 +08:00 via iPhone   ❤️ 1
    @Mohanson 连 subtrace 和 ethereum 基本功能都分不清,强行杠精,什么时候 protocol 能跟 framework 做比较了,感谢 block
    chai2010
        37
    chai2010  
       2019-01-30 09:15:36 +08:00 via iPhone
    glumess
        38
    glumess  
       2019-01-30 09:21:54 +08:00
    rust 的安全性和图像处理有什么关系啊?没搞懂这个地方
    VDimos
        39
    VDimos  
    OP
       2019-01-30 09:23:22 +08:00 via Android
    @glumess 并不是说 rust 的安全性适合,只是 rust 这门语言很适合偏底层的编程
    12101111
        40
    12101111  
       2019-01-30 10:16:07 +08:00 via Android
    @lrxiao 你看的资料是 rustc 没自举前的黑历史吗,+和~还有这种用法?
    kefengong
        41
    kefengong  
       2019-01-30 10:17:05 +08:00 via iPhone
    我比较想吐槽现在编辑器 vscode 的自动推导提示,iterator 多链几个函数就废了,这让我有点难受。
    Clion 也是一样
    MeteorCat
        42
    MeteorCat  
       2019-01-30 10:31:42 +08:00 via Android
    Rust 是门有趣的语言,特别在 c 性能和效率、跨平台选择、多范式编程之中选择,官方提供 std::net 库可以免除 c 之中选择 poll、epoll 或者 window 和 linux 区分
    quinoa42
        43
    quinoa42  
       2019-01-30 10:57:53 +08:00
    @kefengong
    rls 毕竟刚刚正式到 1.0 版本(社区里也有人觉得目前的质量还不足以称之为 1.0 ),但可以相信未来会变得更好
    官方选择维护 language server 而不是官方 IDE 也很涨我好感
    Eleflea
        44
    Eleflea  
       2019-01-30 11:26:51 +08:00
    想请问一下各位都用什么 IDE 写 Rust ?
    kefengong
        45
    kefengong  
       2019-01-30 11:35:26 +08:00 via Android
    @quinoa42 是啊,我也只能先自己多记文档了
    sad52hz
        46
    sad52hz  
       2019-01-30 11:39:40 +08:00
    哪个大佬能说说 rust 用于什么的吗?
    VDimos
        47
    VDimos  
    OP
       2019-01-30 11:50:01 +08:00 via Android   ❤️ 1
    @Eleflea 我用的是 idea,vscode 也还行,只是代码提示没 idea 那么强,而且还要自己配置,不怎么好用
    congeec
        48
    congeec  
       2019-01-30 11:55:02 +08:00   ❤️ 1
    @quinoa42 rls 还真不行,而且主要开发者 Nick Cameron 这个月初从 Mozilla 辞职了
    推荐 https://github.com/rust-analyzer/rust-analyzer
    alexmy
        49
    alexmy  
       2019-01-30 12:03:15 +08:00
    尝试学了一天,语言好复杂,入门就好复杂。最最最主要的是,不知道用来干嘛好,搭建网站?游戏服务器?然后就放弃了,等以后更成熟了再瞧瞧。
    mayne95
        50
    mayne95  
       2019-01-30 12:06:32 +08:00
    跟楼上差不多。学了一段时间,不知道写什么。再准备写点东西,发现生态不完善,找不到轮子,然后语法又忘了。总之很尴尬。
    danc
        51
    danc  
       2019-01-30 12:12:09 +08:00   ❤️ 1
    哈哈,既然大神在文中提到:“ Rust 是门从设计层面就假设你是个有很强逻辑以及经验的程序员......很多初学者在看完教程之后,基本的数据结构,诸如双向链表、二叉树之类的,都不能写出来,更糟糕的是,甚至完全没有头脑(我承认我就是这种人)。”, 这就说明,rust 本身就不是给新手小白玩的;“ Rust 的最大的开源后台开发库 Rocket.rs ”,是吗?。我从 1.10 开始搞到现在的 1.33,有 2 年半了吧,web 框架是自己写的,数据库驱动( mongodb )是自己写的,消息队列得自己写,一些更偏底层的库,比如异步 io 库,sctp 协议库,mpms_queue,blockingqueue,lru_cache,timer,等等,你都得打算自己写。-------你可以掌控一切的,只要你想。你说,如果一些基本的数据结构你都还没掌握的话,不如先去了解下这些基本数据结构。另外,rust 的语法什么的,所有什么的,生命周期什么,还真不臃肿,等你写熟了你就意识不到他们的存在了,然后再去写 golang 之类的语言,我艹,这个变量是在栈上还是堆上,这个变量到底传值呢还是传指针呢,这个变量什么时候可能会被回收掉.........
    trait
        52
    trait  
       2019-01-30 12:26:12 +08:00   ❤️ 2
    @congeec nrc 离开 mozilla 加入 pingcap 并没有退出 rust team,他还是 rust 工具组的 leader,matklad 的这个项目也是官方正在搭建的第二代 syntax 系统,提高了语言层面对 rls 和 ide 的支持,马上到来的 rust all hands 会集中讨论
    danc
        53
    danc  
       2019-01-30 12:29:18 +08:00
    至于 @Mohanson 大神所说 “ 但 rust 社区目前几乎将 rust 未来的希望全寄托在 wasm 上”,这是出自何处? Rust 团队目前有 4 个领域的工作组,wasm,嵌入式,网络,命令行工具。wasm 只是其中一块而已,正如 @wi 大神所说:“ Rust 开发者野心很大”。
    lrxiao
        54
    lrxiao  
       2019-01-30 12:47:50 +08:00
    @12101111 写'~'和'@'的在老 issue 里(<10000)看到不少
    https://news.ycombinator.com/item?id=7687351

    写'+'的我还真看过一篇找不到了,可能我记错了吧
    justfly
        55
    justfly  
       2019-01-30 13:00:05 +08:00   ❤️ 1
    巧了 我就是喜欢这种学习曲线陡峭学会之后又用着很爽的东西
    sdijeenx
        56
    sdijeenx  
       2019-01-30 13:05:45 +08:00
    @trait 说到 Rust 最先想到的就是上蝌大 233😂

    PingCAP 以前说有在用 Rust 开发,不知道现在怎么样了。
    trait
        57
    trait  
       2019-01-30 13:13:20 +08:00
    @sdijeenx tidb 的 key-value 系统 tikv 是 rust 写的,还有他们实现的 raft 协议之类。已经有两个 rust team 核心成员去 pingcap,pingcap 应该算是国内开源企业典范了
    davidqw
        58
    davidqw  
       2019-01-30 13:33:57 +08:00
    区块链是 Rust 可以发挥优势的领域,比如 Grin, Polkadot 和 Parity
    q397064399
        59
    q397064399  
       2019-01-30 14:12:06 +08:00
    @trait #3
    保证安全性? 缓冲区溢出吗? 如果是这个好像意义不大,有些人就喜欢裸着
    quinoa42
        60
    quinoa42  
       2019-01-30 14:30:16 +08:00
    @q397064399
    当然不是,只是这个的话你用 C 也可以
    file0X0088
        61
    file0X0088  
       2019-01-30 14:36:39 +08:00
    你一个写前端的渣,学 rust 当然学不到精髓,拿 RUST 对比 C 难度就知道你的基础,不要张口就来,,,
    redme
        62
    redme  
       2019-01-30 14:54:33 +08:00
    真没见过 rust 写的大程序(是不是 firefox 是 rust 写的阿)
    linxy
        63
    linxy  
       2019-01-30 15:02:47 +08:00
    LZ 炸鱼成功,已经跑路了!
    starqoq
        64
    starqoq  
       2019-01-30 15:28:05 +08:00
    @redme #61

    https://github.com/servo/servo
    这个是 Rust 写的浏览器内核,Mozilla 钦定的下一代 Firefox 内核。

    ( Mozilla:说我已经钦定啦?你们不要想搞个大新闻。)
    so898
        65
    so898  
       2019-01-30 16:05:15 +08:00
    @starqoq 昨天还看到新闻说火狐钦定的下一代内核是 Chromium,当时就一股天下大同的感觉……
    auxox
        66
    auxox  
       2019-01-30 16:20:47 +08:00
    @redme TiKV
    kaichen
        67
    kaichen  
       2019-01-30 17:04:13 +08:00
    @Mohanson 你拿 subtrace 应该对标 cosmos-sdk,不应该去对比 go-ethereum
    tairan2006
        68
    tairan2006  
       2019-01-30 18:14:37 +08:00
    Rust 火不了,这个没问题
    danc
        69
    danc  
       2019-01-30 18:50:51 +08:00
    对于 @q397064399 大神所提问的安全性,应该这么解释:“ Rust ’ s rich type system and ownership model guarantee memory-safety and thread-safety — and enable you to eliminate many classes of bugs at compile-time.”,就是说 Rust 的类型系统和所有权模型保证了内存安全性和线程安全性 - 使您能够在编译时消除许多类错误。也就是说,你在不使用“ unsafe 块”的前提下(大部分情况下都不会用到),很难写出野指针乱飞或者线程不安全的代码,因为编译不过去,更别说一些低级错误。大部分情况下,你的程序只要能够编译过去,运行起来也没有什么问题。
    danc
        70
    danc  
       2019-01-30 18:53:46 +08:00
    @justfly "巧了 我就是喜欢这种学习曲线陡峭学会之后又用着很爽的东西" -------- 苦尽甘来
    willm
        71
    willm  
       2019-01-30 20:49:00 +08:00
    Rust 的定位就是系统编程语言,主要瞄准目前 C/C++的市场,而这块市场其实并没有那么大。绝大多数的开发场景对性能和运行时安全性的要求都没有达到这个程度,Rust 的特性是很好,但某种程度上来说,对于大多数开发者属于屠龙之技。大部分开发者都是 CRUD 和业务逻辑,或者调包侠,根本没有机会,也没有能力去做浏览器内核、游戏引擎系统级别的编程。而真正做这种工作的人,又不会产生 Rust 有没有用处的疑问。
    willm
        72
    willm  
       2019-01-30 20:50:53 +08:00
    所如果从找工作、升级加薪走上人生巅峰的的视角来看,Rust 绝对不是个好选择
    upsuper
        73
    upsuper  
       2019-01-30 21:48:56 +08:00
    对 Rust 的应用场景有所怀疑的,我们可以举几个国内的例子。PingCAP 用 Rust 这个众所周知了,字节跳动前一段也一直在招 Rust 的人(并不好招,毕竟会的人还是少),阿里巴巴前一段上线了一个用 Rust 写的时序数据库替代 InfluxDB,引用开发者的话“系统消耗对比低好几倍以上,另外查询性能也有很大改善”。此外我有听说 B 站和知乎的后端组件里也有用 Rust 实现的,但具体应用情况不清楚。
    exch4nge
        74
    exch4nge  
       2019-01-30 22:11:54 +08:00
    一直再观望 Rust 目前为止最希望赶紧定下来的是对异步 IO 的支持,虽然有第三方的 mio,但目前还是感觉不够好,官方的 future/async/await 还一直没定下来,本来以为 Rust 2018 能把这个 feature 定下来,发现还是没有定。
    Rust 为了使代码内存安全牺牲了很多东西,这个得失确实也不太好评判好坏,只能说在一些场景下确实利多一些。
    总之 Rust 语言本身的设计还是有很多值得学习的地方的,包含了很多现代 PL 的特性,学一学没有坏处,自己开发用一用也没什么问题,不过生产环境中还是需要团队再三考虑的。
    lampwu
        75
    lampwu  
       2019-01-30 22:34:45 +08:00 via Android
    @willm 嵌入式 /iot 有在尝试着用 Rust.
    vagranth
        76
    vagranth  
       2019-01-31 00:19:20 +08:00
    目前正在因为工作原因看 rust,这么说吧,作为一个还算过得去的 java/c++程序员,rust 给我的感觉是哭笑不得。
    基本我每写一行代码要出现 3 个编译错误,而且 google 不到怎么改,要再回头去看概念,然后连猜带蒙各种绕圈解决问题。
    当然,这语言好处很明显,就是用来替代 C 的,但不是替代 java/c++。
    trait
        77
    trait  
       2019-01-31 00:28:43 +08:00
    @upsuper 仰望 servo 大佬现身说法
    danc
        78
    danc  
       2019-01-31 01:06:46 +08:00
    对于 @exch4nge 大神提到的 future/async/await,这个东西确实提了好久了,但到目前为止,我还不知道 future/async/await 这几个东西能派上什么用场。实际中涉及到网络通信或者线程间同步的部分,我都喜欢用 epoll/poll + eventfd。比如我在上面提到过消息队列,就是两个线程,一个线程中用 epoll,负责网络通信,另一个线程里用 poll,负责消息转发逻辑,你可以利用 eventfd,把你自己的数据结构注册到 epoll/poll 里面。但是,这个程序如果用
    future/async/await 那一套,我还真不知道该怎么搞。所以,现在就是做好的时候,不要观望了,抓紧开始吧。
    danc
        79
    danc  
       2019-01-31 01:17:30 +08:00
    @vagranth 大神说的没错,rust 学习曲线确实过于陡峭了,“而且 google 不到怎么改”,大部分情况下,你都不需要去谷歌的,认真看编译器给你反馈的信息就好,比如:

    fn main() {
    let foo = 123;
    foo = 456;
    }

    这段代码是有问题的,编译器会给出一些警告和错误:

    Compiling playground v0.0.1 (/playground)
    warning: variable `foo` is assigned to, but never used
    --> src/main.rs:2:9
    |
    2 | let foo = 123;
    | ^^^
    |
    = note: #[warn(unused_variables)] on by default
    = note: consider using `_foo` instead

    warning: value assigned to `foo` is never read
    --> src/main.rs:3:5
    |
    3 | foo = 456;
    | ^^^
    |
    = note: #[warn(unused_assignments)] on by default

    error[E0384]: cannot assign twice to immutable variable `foo`
    --> src/main.rs:3:5
    |
    2 | let foo = 123;
    | ---
    | |
    | first assignment to `foo`
    | help: make this binding mutable: `mut foo`
    3 | foo = 456;
    | ^^^^^^^^^ cannot assign twice to immutable variable

    error: aborting due to previous error

    For more information about this error, try `rustc --explain E0384`.
    error: Could not compile `playground`.

    To learn more, run the command again with --verbose.

    然后, “ help: make this binding mutable: `mut foo`”,编译器会提示你把 “ let foo ” 改成 “ let mut foo ”。
    大多数情况下,编译器都会给出友好的提示。
    xkeyideal
        80
    xkeyideal  
       2019-01-31 09:19:47 +08:00
    你们都没说到点上,PHP 是世界上最好的语言,没有之一
    vagranth
        81
    vagranth  
       2019-01-31 11:33:58 +08:00
    @danc 谢谢,对我来说,其实最痛苦不是编译出错,而是一些常用的实现模式不知道在 rust 里面怎么搞,或者说缺少最佳实践的指导。当然,我觉得是我看的代码和写的例子不够多的原因。

    举例来说,在 java 里面,我要实现一些功能,在类里面封装几个成员变量,在类内部可以随意使用。对于使用者来说,是不需要关心这些成员变量的。而且使用者在不同地方使用同一个对象的话,这些成员变量的变化可以在对象的创建者和使用者之间轻松传递。
    在 rust 里面,由于 ownership 的存在,我一直没想明白如何对做类似的封装,来隔绝使用者和内部实现细节。
    sdijeenx
        82
    sdijeenx  
       2019-01-31 11:59:15 +08:00
    @secondwtq 对于 Rust 开发者来说,造轮子正是他们使用 Rust 的目的之一,用更加安全的语言开发程序可以避免程序在运行时出现各种预料之外的情况。(基本想法类似诺亚方舟)

    Rust 会让可能出现的错误尽量在编译阶段展示出来,而不是像 C 艹一样只提示编译错误,不关心运行时是否会错(内存泄露&缓冲区溢出等)。
    ospider
        83
    ospider  
       2019-02-01 08:16:06 +08:00 via Android   ❤️ 1
    复杂的并不是 rust,而是计算机本身。rust 中的概念基本都能在 C++ 中找到完全对应的概念。只不过 rust 强制要求你必须遵守,在 C++中你可以选择不遵守,但是写出来的代码正确性没有保证
    sidgwick
        84
    sidgwick  
       2020-04-22 18:37:54 +08:00
    头大,,, 我学来学去真的很多基本的数据结构写不出来😭
    25zai
        85
    25zai  
       2021-02-15 00:30:58 +08:00
    挖一铲,现在是 2021.2.15
    四天前 RUST 从 Mozilla 独立出来了,由五家大厂( 华为 Microsoft Google AWS Mozilla )作为创始成员建立了 RUST 基金会。
    昙花一现已经是不可能的了。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1948 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 45ms · UTC 00:32 · PVG 08:32 · LAX 16:32 · JFK 19:32
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.