V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
HeFengzz
V2EX  ›  程序员

Rust 的语法这么难看是不是创造它的人正是 JS 的创始人?

  •  
  •   HeFengzz · 2022-05-06 11:57:01 +08:00 · 8577 次点击
    这是一个创建于 964 天前的主题,其中的信息可能已经有所发展或是发生改变。
    来自前端萌新搬运工学 RUST 的吐槽贴
    第 1 条附言  ·  2022-05-06 13:36:05 +08:00
    @All 关于 JS 和 RUST 作者是同一人这回事,我被网络帖子误导了,不好意思🐷
    第 2 条附言  ·  2022-05-06 13:53:02 +08:00
    还有,并不是说 JS 语法难看。在下的意思是 JS 中某些奇怪特性的脑回路是不是用在了 Rust 的语法上😅
    此贴不引战,只是找同类(觉的 Rust 里面符号语言太多了)互动一下
    60 条回复    2022-05-07 11:51:05 +08:00
    encro
        1
    encro  
       2022-05-06 11:58:58 +08:00
    请问 rust 那条语法难看?
    mxT52CRuqR6o5
        2
    mxT52CRuqR6o5  
       2022-05-06 12:01:13 +08:00
    js 我听到的批评都是哪里哪里 feature 设计不合理,语法难看还是头一次听说
    noe132
        3
    noe132  
       2022-05-06 12:03:19 +08:00 via Android
    其实我就只觉得 double colon 用作 namespace 分隔符太丑了,而且还尤其是有泛型的情况下。敲起来真的麻烦。
    https://turbo.fish/
    vinsony
        4
    vinsony  
       2022-05-06 12:03:27 +08:00   ❤️ 3
    难道只有我觉得 js 的语法很爽?
    HeFengzz
        5
    HeFengzz  
    OP
       2022-05-06 12:08:25 +08:00   ❤️ 1
    @encro let hello: &'static str = "hello world";
    HeFengzz
        6
    HeFengzz  
    OP
       2022-05-06 12:09:58 +08:00
    @vinsony 并不是吐槽 JS 的语法啦
    cht
        7
    cht  
       2022-05-06 12:14:28 +08:00
    zhuangzhuang1988
        8
    zhuangzhuang1988  
       2022-05-06 12:14:55 +08:00   ❤️ 1
    不是 rust 之父又不是 js 之父 https://zh.wikipedia.org/zh-cn/Rust 叫 Graydon Hoare
    JohnSmith
        9
    JohnSmith  
       2022-05-06 12:17:31 +08:00   ❤️ 2
    js 那叫混沌
    Clarke
        10
    Clarke  
       2022-05-06 12:18:01 +08:00   ❤️ 12
    前端还萌新就来指点江山
    abcysn
        11
    abcysn  
       2022-05-06 12:18:44 +08:00
    看久了习惯了就不觉得难看了
    sosilver
        12
    sosilver  
       2022-05-06 12:19:50 +08:00 via Android   ❤️ 1
    rust 语法算好的了,zig 、go 才叫难看
    HeFengzz
        13
    HeFengzz  
    OP
       2022-05-06 12:23:23 +08:00
    @zhuangzhuang1988 我大意了,不知道在哪看得文章来的
    lijiangang886
        14
    lijiangang886  
       2022-05-06 12:24:30 +08:00   ❤️ 5
    #7 成功了
    我喜欢分号和大括号,厌恶用强制缩进来控制代码结构,所以 python 傻逼
    pengtdyd
        15
    pengtdyd  
       2022-05-06 12:29:22 +08:00
    Rust 的语法难?你怕不是没有写过汇编!
    ViriF
        16
    ViriF  
       2022-05-06 12:41:23 +08:00 via iPhone
    老哥们的评论给这个话题注入了灵魂,但是我总感觉 OP 发话题的历史有些…微妙的水贴感
    yazinnnn
        17
    yazinnnn  
       2022-05-06 12:47:40 +08:00
    op 觉得什么语言的语法好看,说出来让大家笑话一下.
    gimp
        18
    gimp  
       2022-05-06 12:50:35 +08:00
    @HeFengzz #5

    let hello: &'static str = "hello world";

    难看吗
    cssk
        19
    cssk  
       2022-05-06 12:52:59 +08:00 via iPhone   ❤️ 2
    @gimp #18 这个单引号真碍眼
    v2defy
        20
    v2defy  
       2022-05-06 12:53:00 +08:00   ❤️ 1
    我觉得难不难看是习惯和惯性问题,以前我觉得 go 的风格是真的清晰精炼简洁,看 rust 觉得好丑,觉得蛇形命名法不如驼峰命名法好看,就不想学 rust 。

    但网上 rust 吹实在太多了,让我觉得不学不行,加上 go 用久了让我觉得有些限制,比如 go 不是想写啥写啥,我想写个 gui 程序就很难找到合适的框架,fyne 之类都挺丑的。go 里稍微复杂点的操作都要使用反射,反射的性能貌似不高,而且挺丑的,还有 if err != nil ,是真的多,不好看,重复代码太多了。还有我觉得 go 语言不能让我学一辈子,以后早晚会接触更深入的东西,那 rust 就是早晚要学的。

    通过搜索想解决“觉得 rust 蛇形命名丑,不想学,怎么克服这个心结”这样的问题,看到了这个帖子 https://rustcc.cn/article?id=fa10d8d8-23a6-42f3-9c9f-2f65c8bd9961

    觉得说得很对,不能因为小石头,阻挡了前进的道路,心结瞬间打开了,再学的时候就不觉得 rust 丑了。现在已经入了一点点门,写了几百行代码,感觉 rust 其实也不是太丑,一开始是因为看不习惯,而且迭代器是真的好用啊,代码像上了流水线一样,一句里可以做那么多事情,省了多少 for 循环呀,代码信息密度高,就算真的丑点,也能忍过去。
    duke807
        21
    duke807  
       2022-05-06 12:53:52 +08:00
    js 用 async await 之後,還是很好看的
    python 我也喜歡
    rust 丑的我無法接受
    uni
        22
    uni  
       2022-05-06 12:54:57 +08:00   ❤️ 1
    上面有人提到分号,分号在 rust 里面确实很有问题,在于 rust 写分号与不写分号都有语义且语义不同,经常就遇到哪个地方忘写了个分号于是编辑器的 linter 就直接报错,一大片一大片都是红的,让人很难定位问题出在哪里,经常写着写着就怀疑人生

    这是我到目前为止觉得 rust 最傻逼的地方,不知道以后会不会有解决方案
    lrs
        23
    lrs  
       2022-05-06 12:55:17 +08:00 via Android
    @HeFengzz 正常来说不会在 let 语句中声明 lifetime
    BBCCBB
        24
    BBCCBB  
       2022-05-06 12:56:25 +08:00
    js 那个人只是中途加进去的,
    这几天我也在学 rust, 感觉很舒服..
    timpaik
        25
    timpaik  
       2022-05-06 12:57:43 +08:00 via Android
    为啥不写

    let hello = "hello world";
    jasonkayzk
        26
    jasonkayzk  
       2022-05-06 13:10:25 +08:00   ❤️ 1
    Option<Rc<RefCell<Node<T>>>>
    ncepuzs
        27
    ncepuzs  
       2022-05-06 13:11:54 +08:00   ❤️ 2
    神他妈 Rust 和 JS 创造者是同一个人
    HeFengzz
        28
    HeFengzz  
    OP
       2022-05-06 13:38:40 +08:00
    @v2defy 确实是因为相比之下 JS 写起来太舒服了,所以觉得 Rust 太难适应
    Mexion
        29
    Mexion  
       2022-05-06 13:39:48 +08:00
    js 的语法很好看啊,都是从各种语言的精华里抄,哪里难看?
    charseer
        30
    charseer  
       2022-05-06 13:43:58 +08:00
    rust 是我见过利用符号最多的语言。。。
    agagega
        31
    agagega  
       2022-05-06 13:44:26 +08:00 via iPhone
    JS 语法不算难看,OCaml 也挺优雅的,Rust 这个一堆符号是不是受 Perl 影响了
    FightPig
        32
    FightPig  
       2022-05-06 13:55:57 +08:00
    rust 我比较受不了的是编译在点慢,搞来搞去又搞 go 去了
    xFrye
        33
    xFrye  
       2022-05-06 14:09:34 +08:00
    一时间不知道从哪里开始吐槽。。。
    junnplus
        34
    junnplus  
       2022-05-06 14:11:41 +08:00
    一时间不知道从哪里开始吐槽。。。
    musi
        35
    musi  
       2022-05-06 14:21:38 +08:00
    这是前端没学好又去祸害 rust 了?
    HeFengzz
        36
    HeFengzz  
    OP
       2022-05-06 14:25:40 +08:00
    @musi 半路出家了属于是
    IvanLi127
        37
    IvanLi127  
       2022-05-06 14:38:58 +08:00
    不觉得难看呐,如果 Rust 和 JS 语法有共通之处,那太爽了。我感觉 op 要转行了。
    xiaket
        38
    xiaket  
       2022-05-06 14:44:34 +08:00
    @charseer APL 了解一下. :doge:
    Observer42
        39
    Observer42  
       2022-05-06 15:06:30 +08:00
    一时间不知道从哪里开始吐槽
    bertonzh
        40
    bertonzh  
       2022-05-06 15:07:44 +08:00
    Rust 语法中那些看上去难看的东西,主要是生命周期、引用相关的,和 JS 乱七八糟的历史特性没啥关系。
    Highlights
        41
    Highlights  
       2022-05-06 15:11:25 +08:00
    真正的大师永远怀着一颗学徒的心
    sheep3
        42
    sheep3  
       2022-05-06 17:29:34 +08:00
    这算啥难看?.......
    动态类型语言写多了吧
    MinQ
        43
    MinQ  
       2022-05-06 17:55:50 +08:00
    @jasonkayzk 看到这个哇的一声就哭了出来
    chuanqirenwu
        44
    chuanqirenwu  
       2022-05-06 18:08:07 +08:00
    写 rust 我觉得挺开心,表情包很丰富,一会哭一会笑,充分体现当时写代码的心情。<_>, >_<
    libook
        45
    libook  
       2022-05-06 18:46:40 +08:00   ❤️ 4
    做过 7 年的 JS 全栈开发,曾深入关注 ECMA-262 的各项提案,比较深刻了解到的情况是,ECMA-262 标准的制定机制使得它更新很快,JS 的很多特性都是从其他语言去其糟粕取其精华的(比如你能看到很多从 Python 、Ruby 等语言吸纳过来的特性),所以能保持对时下普遍开发模式、业务场景、开发需求的适应。我是感觉平时看到的对 JS 的批评要么是偏见,要么就是源自于批评者自身对 JS 掌握不够扎实。

    与之形成鲜明对比的是 Go ,个人学习 Go 的感受就是部分特性相对比较不灵活和“落后”,但这也正是 Go 能成为企业协作开发利器的原因所在。

    学习 Rust 给我的感受就是,我看到了很多“先进特性”,这种感受就跟我看 ECMA-262 各项提案的感受一样,而且很多特性初看的时候觉得晦涩难懂,但彻底弄明白之后又觉得设计巧妙,我在学的过程中反正是连连称妙的。

    但同时 Rust 的特性和语法糖比较多,而且很多语法是使用各种符号而不是英文单词,同一种符号在不同特性中可能表达不同功能,阅读起来可能不是那么人类友好。有可能用多了习惯了就好了,而且 Rust 本身很灵活,代码应该总可以优化到各方面比较令人满意的程度,只要投入够多的设计精力。

    以强类型语言的要求来看待弱类型语言、以脚本语言的要求来看待系统开发语言、以一门语言的使用习惯来看看待另一门语言,个人感觉都是不大公平。
    pmispig
        46
    pmispig  
       2022-05-06 19:49:38 +08:00   ❤️ 3
    rust 的功能很先进,但是这个语法和符号真是屎一样,一片代码看上去全是乱七八糟的符号,我敢说要不是键盘上只有这么多符号,不然可能会有很多
    fpure
        47
    fpure  
       2022-05-06 20:04:22 +08:00
    @encro 生命周期
    skies457
        48
    skies457  
       2022-05-06 22:09:56 +08:00 via iPhone
    go 1.18 带个 functional 的库(比如 lo )照样能写得很花....
    Tazi
        49
    Tazi  
       2022-05-06 22:32:58 +08:00 via iPhone
    要说丑的话 感觉只有生存时间比较丑
    gowk
        50
    gowk  
       2022-05-06 23:45:59 +08:00
    谁要说 Go 语法难看,我就锤死谁
    angrylid
        51
    angrylid  
       2022-05-06 23:47:33 +08:00 via Android
    @v2defy Go GUI 恐怕还是开个 HTTP 服务器,浏览器访问 localhost:8080 吧😂
    cybird
        52
    cybird  
       2022-05-07 00:40:17 +08:00
    哈?语法难看......?行吧,审美是个人自由,不做评价
    AItsuki
        53
    AItsuki  
       2022-05-07 00:47:10 +08:00
    @v2defy if err != nil ,总好过 try catch……
    cybird
        54
    cybird  
       2022-05-07 00:50:16 +08:00
    @Tazi 你想说的也许是叫"生命周期"?
    VchentozV
        55
    VchentozV  
       2022-05-07 08:04:35 +08:00
    请问 JS 哪条语法难看?
    Tazi
        56
    Tazi  
       2022-05-07 08:15:57 +08:00 via iPhone
    @cybird 啊 我颅内瞎翻译的
    总之就是这个 https://doc.rust-lang.org/nomicon/lifetimes.html
    encro
        57
    encro  
       2022-05-07 08:40:38 +08:00
    @HeFengzz

    你大多数时候完全可以 let hello = "hello world"的啊,只有必须用生命周期的时候才用。
    教程都写了,应该避免 static

    https://rustwiki.org/zh-CN/book/ch10-03-lifetime-syntax.html


    静态生命周期

    这里有一种特殊的生命周期值得讨论:'static ,其生命周期能够存活于整个程序期间。所有的字符串字面量都拥有 'static 生命周期,我们也可以选择像下面这样标注出来:

    ```
    let s: &'static str = "I have a static lifetime.";
    ```

    这个字符串的文本被直接储存在程序的二进制文件中而这个文件总是可用的。因此所有的字符串字面量都是 'static 的。

    **你可能在错误信息的帮助文本中见过使用 'static 生命周期的建议,不过将引用指定为 'static 之前,思考一下这个引用是否真的在整个程序的生命周期里都有效。你也许要考虑是否希望它存在得这么久,即使这是可能的。大部分情况,代码中的问题是尝试创建一个悬垂引用或者可用的生命周期不匹配,请解决这些问题而不是指定一个 'static 的生命周期。**
    memorycancel
        58
    memorycancel  
       2022-05-07 09:26:37 +08:00
    Let's do leetcode to practise RUST

    https://github.com/StudyRust/leetcode_rust
    AlisaDestiny
        59
    AlisaDestiny  
       2022-05-07 11:39:01 +08:00
    想喷 Rust 你没掌握精髓啊,好好跟这位学学 https://github.com/mTvare6/hello-world.rs
    hevi
        60
    hevi  
       2022-05-07 11:51:05 +08:00   ❤️ 1
    我觉得 rust 的宏的语法看着才真难顶。。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5166 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 30ms · UTC 01:15 · PVG 09:15 · LAX 17:15 · JFK 20:15
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.