会一点 Javascript 和 C#,想再多学习一门语言,是选 C++ 还是 Rust? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
hahade
V2EX    程序员

会一点 Javascript 和 C#,想再多学习一门语言,是选 C++ 还是 Rust?

  •  
  •   hahade 2024-06-03 14:05:00 +08:00 5784 次点击
    这是一个创建于 494 天前的主题,其中的信息可能已经有所发展或是发生改变。

    本人之前学习过一点 Javascript 和 C#,两个都挺好。目前年纪大了,有时候也有压力,就想再学习一门语言,请问是选择 C++ 还是 Rust 比较好?能否给一个理由?感谢!

    67 条回复    2024-06-09 12:16:36 +08:00
    KMpAn8Obw1QhPoEP
        1
    KMpAn8Obw1QhPoEP  
       2024-06-03 14:05:54 +08:00 via Android
    学新语言的目的是什么?
    hahade
        2
    hahade  
    OP
       2024-06-03 14:08:49 +08:00
    @enchilada2020 想多了解一些稍微底层一点的知识。
    jones2000
        3
    jones2000  
       2024-06-03 15:32:49 +08:00
    学底层靠学历, 需要算法和理论支持, 如果大学学过应该学起来就简单点,否则够呛。 不是靠语言,
    dnL
        4
    dnL  
       2024-06-03 17:59:39 +08:00   4
    @hahade 你这不叫目的。什么是目的,你要开发一款 XXX 系统,注重内存安全和并发性,需要选择 C++或 Rust ,那是目的。你这抛个硬币吧,正面 C++反面 Rust 。
    jimliang
        5
    jimliang  
       2024-06-03 17:59:46 +08:00
    Rust 吧,C++ 语言特性太多了
    Rennen
        6
    Rennen  
       2024-06-03 18:08:20 +08:00
    要是我的话,选新不选旧
    lujiaxing
        7
    lujiaxing  
       2024-06-03 18:20:14 +08:00
    编程语言就跟手机一样, 买新不买旧.
    学 Rust 吧. Rust 跟 C++ 是同一个生态位的. 但比那个蹩脚的 C++ 好太多了.
    MrKrabs
        8
    MrKrabs  
       2024-06-03 18:24:59 +08:00
    底层?那就 zig
    hahade
        9
    hahade  
    OP
       2024-06-03 18:27:01 +08:00
    @lujiaxing 感谢!
    hahade
        10
    hahade  
    OP
       2024-06-03 18:28:16 +08:00
    @dnL 但是我的目的确实只是学习需要,并不需要开发什么系统。领导也没让我学,纯粹是自己想学一下。
    Nosub
        11
    Nosub  
       2024-06-03 19:05:21 +08:00 via iPhone   12
    恰恰相反,你不应该学习任何编程语言,你需要看的是《深入理解计算机系统》和《 TCP/IP 协议》这类书籍,这才是底层工具,学习 C++和 Rust 纯粹是浪费时间。
    kneo
        12
    kneo  
       2024-06-03 19:12:26 +08:00 via Android
    还不如学 typescript 和 go 。
    学了点三脚猫的 c++/rust ,对你了解底层并没有什么帮助。
    azarasi
        13
    azarasi  
       2024-06-03 19:28:45 +08:00
    @hahade 那必须学 C ,什么时候能在脑内把 C 代码都转换成汇编指令了就学通了
    ty29022
        14
    ty29022  
       2024-06-03 19:30:16 +08:00
    曾经看到有人说 CS 是所有工科中对自然科学要求最低呢,貌似有一定道理,但好赖也是冠以“科学”之名的
    私以为`掌握一门编程语言来学习计算机"底层"知识`,这是不科学的,没道理的
    huihuiHK
        15
    huihuiHK  
       2024-06-03 19:31:20 +08:00
    学 c 然后看《 UNIX 网络编程》这套书
    ashuai
        16
    ashuai  
       2024-06-03 20:01:24 +08:00
    agree #11 ,那些乱七八糟的语言都是方言,用的时候再学也不迟
    fpure
        17
    fpure  
       2024-06-03 22:13:24 +08:00
    哪怕是单纯学一下 rust 也是很好的选择,rust 算是填了 C++许多坑,而且摸到了编译器证明的门槛,后面如果有兴趣的话可以了解一下形式化验证、定理证明器的概念;
    至于 C++,如果不是工作中需要用到的话真的没必要去学,语言的混乱和不一致太多了,可谓是编程语言界的屎山。
    fpure
        18
    fpure  
       2024-06-03 22:21:57 +08:00   1
    在我看来,学习计算机有两条路,一条路是体系结构,另一条是计算理论。前面许多人劝你学操作系统、网络底层这类的算是走的体系结构这条路;而学习语言可以算是走计算理论这条路,并不是歧途。而计算机之所以是一门独立的科学,靠的是计算理论,否则就只能算是工程学。
    ruanimal
        19
    ruanimal  
       2024-06-03 22:34:40 +08:00
    rust 和 c 艹对比的话,还是选 rust 吧,毕竟 cargo 用起来舒服多了
    6HWcp545hm0RHi6G
        20
    6HWcp545hm0RHi6G  
       2024-06-03 22:43:24 +08:00
    要是目标是后端相关那就 golang 、golang 、golang ;别学 rust ,因为太难了。

    要是要关注前端客户端相关,那就 rust 。
    SHF
        21
    SHF  
       2024-06-03 22:55:57 +08:00
    投 C++ 票,如果会 Javascript 的话可以玩玩 node.js, 用 c++ 写一个 node.js addon 可以用 js 来调用操作系统 api 实现很多功能
    zengxs
        22
    zengxs  
       2024-06-04 00:15:04 +08:00
    #11 楼一针见血的,学习底层就应该看 CSAPP 这样的书

    底层知识是语言无关的。你去学 C++/Rust 反而容易陷入到语言本身的复杂度里面(这两门语言都是相当复杂的),学这些基本上学到的都是语言特定的知识,而不是底层相关的。
    shiltian
        23
    shiltian  
       2024-06-04 01:39:42 +08:00 via iPhone
    要真底层的话,C++
    seedhk
        24
    seedhk  
       2024-06-04 08:23:48 +08:00
    如果学了 C++,你会发现,还是很难了解到底层的知识,反而陷入了 C++各种语法和特性的漩涡之中

    还不如直接去看书或者视频

    盲目入坑 C++的 javaer 留
    FYFX
        25
    FYFX  
       2024-06-04 08:37:42 +08:00
    底层? 要不你看这个 https://www.nand2tetris.org
    villivateur
        26
    villivateur  
       2024-06-04 08:44:54 +08:00
    年纪大了就不要学 C++ 的,这个世上没人能把 C++ 学完 [/doge]
    nevermoreluo
        27
    nevermoreluo  
       2024-06-04 08:45:25 +08:00
    学底层跟语言相关不大,系统学习看些书吧。那些什么代码片段,不要怕就当伪代码看,实在不行就扔给 gpt 翻译。

    语言 rust ,虽然 rust 上会看到很多 c++的影子。但是 cargo ,cargo ,cargo ,统一的包管理,确定版本的依赖,和构建过程,真的很重要。对很多人来说 c++那套真的没有必要折腾,除非工程需要。
    什么 cmake ,xmake ,vcpkg, conan, gradle, meson 脑子都要大了,没必要真的没必要。
    F7TsdQL45E0jmoiG
        28
    F7TsdQL45E0jmoiG  
       2024-06-04 09:04:10 +08:00
    OP 具体干啥工作的?
    guotie
        29
    guotie  
       2024-06-04 09:08:23 +08:00
    @MrKrabs 同意 zig
    KMpAn8Obw1QhPoEP
        30
    KMpAn8Obw1QhPoEP  
       2024-06-04 09:20:50 +08:00 via Android
    @fpure 这行绝大多数还是搞工程的 搞工程当然是走体系结构路线啦
    seakingii
        31
    seakingii  
       2024-06-04 09:23:06 +08:00
    如果只是想了解计算机的底层,建议学 C 语言
    更底层的,汇编语言
    BG7ZAG
        32
    BG7ZAG  
       2024-06-04 09:26:28 +08:00
    真要学还是 rust 吧,学新不学久,前端这边好多工具都用 rust 重构了
    SpiritLingPub
        33
    SpiritLingPub  
       2024-06-04 09:29:11 +08:00   1
    我现在学习读书内容顺序:《计算机科学导论》(读完后,根据自己情况和书中内容顺序来选定下一步,后面属于我的顺序)=>《算法导论》(因为已经工作了,并且工作设计 TCP 协议等不多,所以暂时往后放)=> 《 TCP/IP 详解》(等协议书籍)=>《深入理解计算机系统》(系统相关的书籍)=> 《数据库》(数据库相关书籍)=>《软件工程》(软件开发等相关书籍),后面就自由学习了 φ(* ̄ 0  ̄)
    yy77
        34
    yy77  
       2024-06-04 09:35:40 +08:00
    如果考虑能够支持工作和就业的话,不如再学一个 java/kotlin ?当然如果是想往硬件底层方面走,那只能 C++了。

    纯粹从兴趣出发的话,个人推荐 rust 这个当红炸子鸡。网上的讨论、资料都比较多,也有很多新的明星项目涌现。学起来比较能感受到网络上的最新发展的热情。
    hahastudio
        35
    hahastudio  
       2024-06-04 10:02:18 +08:00
    语言选择是工程相关的,做什么活儿选什么语言
    底层原理你应该找计算机科学的本科培养计划
    huangdog
        36
    huangdog  
       2024-06-04 10:04:10 +08:00
    @jimliang 是不是可以不全使用,只用部分 C++的特性
    tool2dx
        37
    tool2dx  
       2024-06-04 10:10:00 +08:00
    @huangdog 自己一个人自娱自乐当然没问题,但问题网上新项目的代码,有大量用到新特性。
    augustheart
        38
    augustheart  
       2024-06-04 10:21:51 +08:00
    想学底层那唯一答案是 c 。c++你都还得尽量不依靠标准库,而且还要搞懂异常、类型信息,虚表等隐藏内容。
    rust 一样掩盖了太多东西,靠 rust 学底层大概和 js 差不了太多。
    augustheart
        39
    augustheart  
       2024-06-04 10:23:01 +08:00
    然后,我个人是有一个很不靠谱的建议就是:去学学单片机吧。
    pkoukk
        40
    pkoukk  
       2024-06-04 10:24:38 +08:00
    你先把这两种语言玩透了,你遇到的需求全都能用他们实现了,再去考虑玩 rust 或者 c++
    skye
        41
    skye  
       2024-06-04 10:25:58 +08:00
    python ,AI 场景下用得到
    ciaoSora
        42
    ciaoSora  
       2024-06-04 10:49:22 +08:00
    我个人的建议是 C++,虽然我本人其实更喜欢 Rust ,但考虑到楼主不是专业出身(我猜应该不是?因为熟悉的语言是 JS 和 C#),还是更推荐 C/C++。不推荐 Rust 的理由是:

    1. 如果直接学 Rust ,可能并不能加强对底层的理解,因为 Rust 的魅力在于其编译器优化,编译器为程序员做了太多事情,导致底层很多东西都被隐藏起来了。
    2. Rust 和 C++ 都很难,但是 Rust 学习曲线的前期非常陡峭,C++ 前期简单后期陡峭。考虑到楼主自称年纪大了可能没那么有精力,而且 C++ 跟 C#(毕竟 C# 就是 C++++)有相似之处,所以推荐 C++。
    3. 有 C/C++ 基础之后就对内存管理有一些理解,此时再学习 Rust 会自然、简单很多。

    不过楼上也有人说 C++ 太杂乱、内容太多之类的,反正楼主又不是想做一个专业的 C++ 程序员把各种新标准新特性玩得转,作为兴趣来说,学个差不多就足以 get 到底层的东西了(何况很多底层代码是纯 C 写的跟 C++ 没什么关系)。
    yuezk
        43
    yuezk  
       2024-06-04 11:06:40 +08:00
    推荐 Rust, 原因是对写的代码有一种莫名的自信
    hahade
        44
    hahade  
    OP
       2024-06-04 11:35:36 +08:00
    感谢大家的热心解答,统一回复一下:
    1 、本人并不专业,说的底层在于我的理解上是指了解大概就行,不用太细
    2 、经过认真看大家的回复,经过决定,本人准备优先学习一下 Rust ,感觉它和 Javascript 有一点点像
    3 、如果后期 Rust 学不动了,我就再学学 C++
    david98
        45
    david98  
       2024-06-04 12:23:33 +08:00
    @hahade #44
    作为有嵌入式开发经验 查过 CPU 的 datasheet ,跟 cpu 直接打过交道,也做过云平台开发的研发,我觉得#8 说的才是正理。如果目标是想深入了解系统 这两个都不要选。
    rust 并没有看着那么好,而且隐藏很多细节,新手学习的时候碰到问题会一脸懵。C++特性太多。如果不上手实际项目,很有可能就是浪费时间精力。
    如果要了解编译器的原理之类,可以看看那种 400 行代码写个 c 编译器的开源项目,结合编译器原理书籍,能加深不少的理解。
    david98
        46
    david98  
       2024-06-04 12:27:01 +08:00
    @hahade 刚才说错了 是#11 不是 #8
    txhwind
        48
    txhwind  
       2024-06-04 12:28:18 +08:00
    想学底层就直接看教材,不用绕到语言上来。
    出于好奇想了解新语言,就两个一块学,正好对比一下
    hahade
        49
    hahade  
    OP
       2024-06-04 12:45:56 +08:00 via Android
    @david98 感谢!
    lujiaxing
        50
    lujiaxing  
       2024-06-04 16:12:01 +08:00
    @SpiritLingPub =>《颈椎病康复指南》=> 《最有效的减肥方法》=> 《活着》
    evilwk
        51
    evilwk  
       2024-06-04 16:33:19 +08:00   1
    建议打打游戏,做人开心最重要。
    leehome
        52
    leehome  
       2024-06-04 16:34:05 +08:00
    c 艹 , rust 太小众了
    LnTrx
        53
    LnTrx  
       2024-06-04 16:39:02 +08:00
    了解底层的话可以整一个 C 语言的单片机玩玩
    SpiritLingPub
        54
    SpiritLingPub  
       2024-06-04 16:39:04 +08:00
    @lujiaxing O(∩_∩)O 哈哈~
    IvanLi127
        55
    IvanLi127  
       2024-06-04 16:47:08 +08:00
    底层的话,建议买个 MCU 开发板,然后写 C ,直接操作寄存器,感觉计算机组成原理在疯狂敲打我的大脑
    iosyyy
        56
    iosyyy  
       2024-06-04 17:27:58 +08:00
    @Nosub 同意 这应该是首要目标
    Herdsman
        57
    Herdsman  
       2024-06-04 19:20:47 +08:00
    @FYFX 这个好 收藏了
    ZnductR0MjHvjRQ3
        58
    ZnductR0MjHvjRQ3  
       2024-06-04 19:23:33 +08:00
    想了解底层 学语言了解? 你不如直接抱着 深入理解计算机系统 来啃
    huangdog
        59
    huangdog  
       2024-06-04 23:25:36 +08:00
    @tool2dx 日本人写 c++,对新特性的适应,接受度是不是很缓慢,但写的代码很扎实,很稳定?
    tool2dx
        60
    tool2dx  
       2024-06-04 23:30:38 +08:00
    @huangdog B 站有 C++程序员的调查数据,80%的公司并不排斥 C++17 标准。我估计保守的公司还在用 C99 ,比如 ffmpeg ,这种就很难进化到 C++。

    能用 C++写项目的,写到后面,直接就自我放飞居多。
    liuhan907
        61
    liuhan907  
       2024-06-05 09:03:21 +08:00
    如果你是认真想通过学一门新语言来接触一些过去没有接触过的东西,那我觉得 Rust 更好。
    实际上 Rust 没有那么难,在入门学习的时候不要去在乎那些生命周期的破事,编译错误就直接 clone 解决 80% 的问题,剩下 Arc 解决 15% 的问题。最后那 5% 入门是不会需要了解的。
    Rust 还有非常好用的 cargo 包管理器。入门文档齐全而且有中文翻译。
    不过唯一要注意的是它和 JS 差距可是云泥之别,不要按照 JS 的思路去写。或者说 GC 语言和非 GC 语言的思路差别巨大。你最好忘掉除了基础的概念(比如分支语句、循环语句之类的这种)以外的之前的经验,不然可能会学的很痛苦。

    @hahade
    LLaMA2
        62
    LLaMA2  
       2024-06-05 09:14:40 +08:00
    工作需要什么,你就学什么

    而且你习惯了 Javascript 的灵活,习惯了 C#的智能提示,
    C++ 的那一套怕是完全推翻以前的代码编写习惯


    算了吧,

    还是多研究数据结构,多研究通信各种协议,各种行业约定的设计方案(套路)
    hahade
        63
    hahade  
    OP
       2024-06-05 10:01:27 +08:00
    @liuhan907 感谢!
    yazoox
        64
    yazoox  
       2024-06-05 12:04:46 +08:00 via Android
    @guotie zig 比 rust 优秀在哪里?
    guotie
        65
    guotie  
       2024-06-05 17:21:58 +08:00
    zig 并不比 rust 优秀
    secondwtq
        66
    secondwtq  
       2024-06-09 01:07:14 +08:00
    我觉得这根本就不是一个二选一或者 N 选一的问题。

    我不知道楼主所谓的“底层”究竟是指什么,先权当从语言抽象的角度来讲好了。学习底层的东西,你至少需要能够看懂相关的实现,涉及到什么项目,就得去看相关的语言。
    对于有些项目来说,语言扩展甚至不比语言本身作用要小。

    现在的阶段,底层的绝对主力还是 C/C++,你的 JS 和 C#,主流实现穿透到下面都是 C/C++,Java 一样。你要是去看 Linux Kernel ,Postgres ,SQLite ,PyTorch ,Mesa 之类的也是,所以你可以不拿他们当主力,但是早晚要学点。
    我不知道楼主了不了解指针这个概念,但是往底层实现走,少不了 C FFI ( v2ex.com/t/604915#r_7962546 ),FFI 这套搞明白了,看过一些典型的 FFI 接口,C 其实已经差不多学会三分之一了。这条路我觉得比一般的教科书要强。

    现在已经有一些项目开始用 Rust 作为主力(虽然我脑袋里面除了 TiKV 和 Zed 之外一时半会没想出来有啥),但是一是这样的项目以后会越来越多,二是正是因为 Rust 很多项目不完善,用得人少,屎山堆得少,反而更加简洁适合初学者。语言丁真,鉴定为早晚也得学。

    另外你以为学一个通用语言就得了?事实上每个项目都有自己的 DSL ,而且一般还不只一个,比如 SQLite 里面有个 VM ,这里有文档:www.sqlite.org/opcode.html 每个 SQL 语句都会被编译成这样一段 VM 程序(噢对了,SQLite 本身的 SQL 方言也算一个),然后这玩意的测试是 Tcl 写的。

    不要对底层有神秘感,换个语言糊屎,不代表就不在糊屎了。
    所以语言不妨先随便看看,然后看起相关的项目。至于实际使用嘛,JS 难说,不过 C# 在与底层交互方面做得其实算比较完善的,所以很多情况下不用换语言就可以。折腾一段时间之后了解了不同的语言,再根据个人口味选择更好。
    hahade
        67
    hahade  
    OP
       2024-06-09 12:16:36 +08:00 via Android
    @secondwtq 非常感谢,虽然前面说了看下 Rust ,但这几天我也在看 C++ 20 ,发现里面有些概念与 JS 都是相通的。就像您说的,可以先随便了解一门,然后具体项目具体研究。感谢!
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1406 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 29ms UTC 16:41 PVG 00:41 LAX 09:41 JFK 12:41
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86