本人之前学习过一点 Javascript 和 C#,两个都挺好。目前年纪大了,有时候也有压力,就想再学习一门语言,请问是选择 C++ 还是 Rust 比较好?能否给一个理由?感谢!
![]() | 1 KMpAn8Obw1QhPoEP 2024-06-03 14:05:54 +08:00 via Android 学新语言的目的是什么? |
![]() | 2 hahade OP @enchilada2020 想多了解一些稍微底层一点的知识。 |
3 jones2000 2024-06-03 15:32:49 +08:00 学底层靠学历, 需要算法和理论支持, 如果大学学过应该学起来就简单点,否则够呛。 不是靠语言, |
![]() | 4 dnL 2024-06-03 17:59:39 +08:00 ![]() @hahade 你这不叫目的。什么是目的,你要开发一款 XXX 系统,注重内存安全和并发性,需要选择 C++或 Rust ,那是目的。你这抛个硬币吧,正面 C++反面 Rust 。 |
![]() | 5 jimliang 2024-06-03 17:59:46 +08:00 Rust 吧,C++ 语言特性太多了 |
![]() | 6 Rennen 2024-06-03 18:08:20 +08:00 要是我的话,选新不选旧 |
![]() | 7 lujiaxing 2024-06-03 18:20:14 +08:00 编程语言就跟手机一样, 买新不买旧. 学 Rust 吧. Rust 跟 C++ 是同一个生态位的. 但比那个蹩脚的 C++ 好太多了. |
8 MrKrabs 2024-06-03 18:24:59 +08:00 底层?那就 zig |
![]() | 11 Nosub 2024-06-03 19:05:21 +08:00 via iPhone ![]() 恰恰相反,你不应该学习任何编程语言,你需要看的是《深入理解计算机系统》和《 TCP/IP 协议》这类书籍,这才是底层工具,学习 C++和 Rust 纯粹是浪费时间。 |
12 kneo 2024-06-03 19:12:26 +08:00 via Android 还不如学 typescript 和 go 。 学了点三脚猫的 c++/rust ,对你了解底层并没有什么帮助。 |
14 ty29022 2024-06-03 19:30:16 +08:00 曾经看到有人说 CS 是所有工科中对自然科学要求最低呢,貌似有一定道理,但好赖也是冠以“科学”之名的 私以为`掌握一门编程语言来学习计算机"底层"知识`,这是不科学的,没道理的 |
![]() | 15 huihuiHK 2024-06-03 19:31:20 +08:00 学 c 然后看《 UNIX 网络编程》这套书 |
16 ashuai 2024-06-03 20:01:24 +08:00 agree #11 ,那些乱七八糟的语言都是方言,用的时候再学也不迟 |
17 fpure 2024-06-03 22:13:24 +08:00 哪怕是单纯学一下 rust 也是很好的选择,rust 算是填了 C++许多坑,而且摸到了编译器证明的门槛,后面如果有兴趣的话可以了解一下形式化验证、定理证明器的概念; 至于 C++,如果不是工作中需要用到的话真的没必要去学,语言的混乱和不一致太多了,可谓是编程语言界的屎山。 |
18 fpure 2024-06-03 22:21:57 +08:00 ![]() 在我看来,学习计算机有两条路,一条路是体系结构,另一条是计算理论。前面许多人劝你学操作系统、网络底层这类的算是走的体系结构这条路;而学习语言可以算是走计算理论这条路,并不是歧途。而计算机之所以是一门独立的科学,靠的是计算理论,否则就只能算是工程学。 |
![]() | 19 ruanimal 2024-06-03 22:34:40 +08:00 rust 和 c 艹对比的话,还是选 rust 吧,毕竟 cargo 用起来舒服多了 |
![]() | 20 6HWcp545hm0RHi6G 2024-06-03 22:43:24 +08:00 要是目标是后端相关那就 golang 、golang 、golang ;别学 rust ,因为太难了。 要是要关注前端客户端相关,那就 rust 。 |
![]() | 21 SHF 2024-06-03 22:55:57 +08:00 投 C++ 票,如果会 Javascript 的话可以玩玩 node.js, 用 c++ 写一个 node.js addon 可以用 js 来调用操作系统 api 实现很多功能 |
![]() | 22 zengxs 2024-06-04 00:15:04 +08:00 #11 楼一针见血的,学习底层就应该看 CSAPP 这样的书 底层知识是语言无关的。你去学 C++/Rust 反而容易陷入到语言本身的复杂度里面(这两门语言都是相当复杂的),学这些基本上学到的都是语言特定的知识,而不是底层相关的。 |
![]() | 23 shiltian 2024-06-04 01:39:42 +08:00 via iPhone 要真底层的话,C++ |
![]() | 24 seedhk 2024-06-04 08:23:48 +08:00 如果学了 C++,你会发现,还是很难了解到底层的知识,反而陷入了 C++各种语法和特性的漩涡之中 还不如直接去看书或者视频 盲目入坑 C++的 javaer 留 |
![]() | 25 FYFX 2024-06-04 08:37:42 +08:00 底层? 要不你看这个 https://www.nand2tetris.org |
![]() | 26 villivateur 2024-06-04 08:44:54 +08:00 年纪大了就不要学 C++ 的,这个世上没人能把 C++ 学完 [/doge] |
27 nevermoreluo 2024-06-04 08:45:25 +08:00 学底层跟语言相关不大,系统学习看些书吧。那些什么代码片段,不要怕就当伪代码看,实在不行就扔给 gpt 翻译。 语言 rust ,虽然 rust 上会看到很多 c++的影子。但是 cargo ,cargo ,cargo ,统一的包管理,确定版本的依赖,和构建过程,真的很重要。对很多人来说 c++那套真的没有必要折腾,除非工程需要。 什么 cmake ,xmake ,vcpkg, conan, gradle, meson 脑子都要大了,没必要真的没必要。 |
28 F7TsdQL45E0jmoiG 2024-06-04 09:04:10 +08:00 OP 具体干啥工作的? |
![]() | 30 KMpAn8Obw1QhPoEP 2024-06-04 09:20:50 +08:00 via Android @fpure 这行绝大多数还是搞工程的 搞工程当然是走体系结构路线啦 |
31 seakingii 2024-06-04 09:23:06 +08:00 如果只是想了解计算机的底层,建议学 C 语言 更底层的,汇编语言 |
32 BG7ZAG 2024-06-04 09:26:28 +08:00 真要学还是 rust 吧,学新不学久,前端这边好多工具都用 rust 重构了 |
![]() | 33 SpiritLingPub 2024-06-04 09:29:11 +08:00 ![]() 我现在学习读书内容顺序:《计算机科学导论》(读完后,根据自己情况和书中内容顺序来选定下一步,后面属于我的顺序)=>《算法导论》(因为已经工作了,并且工作设计 TCP 协议等不多,所以暂时往后放)=> 《 TCP/IP 详解》(等协议书籍)=>《深入理解计算机系统》(系统相关的书籍)=> 《数据库》(数据库相关书籍)=>《软件工程》(软件开发等相关书籍),后面就自由学习了 φ(* ̄ 0  ̄) |
![]() | 34 yy77 2024-06-04 09:35:40 +08:00 如果考虑能够支持工作和就业的话,不如再学一个 java/kotlin ?当然如果是想往硬件底层方面走,那只能 C++了。 纯粹从兴趣出发的话,个人推荐 rust 这个当红炸子鸡。网上的讨论、资料都比较多,也有很多新的明星项目涌现。学起来比较能感受到网络上的最新发展的热情。 |
![]() | 35 hahastudio 2024-06-04 10:02:18 +08:00 语言选择是工程相关的,做什么活儿选什么语言 底层原理你应该找计算机科学的本科培养计划 |
38 augustheart 2024-06-04 10:21:51 +08:00 想学底层那唯一答案是 c 。c++你都还得尽量不依靠标准库,而且还要搞懂异常、类型信息,虚表等隐藏内容。 rust 一样掩盖了太多东西,靠 rust 学底层大概和 js 差不了太多。 |
39 augustheart 2024-06-04 10:23:01 +08:00 然后,我个人是有一个很不靠谱的建议就是:去学学单片机吧。 |
![]() | 40 pkoukk 2024-06-04 10:24:38 +08:00 你先把这两种语言玩透了,你遇到的需求全都能用他们实现了,再去考虑玩 rust 或者 c++ |
![]() | 41 skye 2024-06-04 10:25:58 +08:00 python ,AI 场景下用得到 |
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++ 没什么关系)。 |
43 yuezk 2024-06-04 11:06:40 +08:00 推荐 Rust, 原因是对写的代码有一种莫名的自信 |
![]() | 44 hahade OP 感谢大家的热心解答,统一回复一下: 1 、本人并不专业,说的底层在于我的理解上是指了解大概就行,不用太细 2 、经过认真看大家的回复,经过决定,本人准备优先学习一下 Rust ,感觉它和 Javascript 有一点点像 3 、如果后期 Rust 学不动了,我就再学学 C++ |
45 david98 2024-06-04 12:23:33 +08:00 @hahade #44 作为有嵌入式开发经验 查过 CPU 的 datasheet ,跟 cpu 直接打过交道,也做过云平台开发的研发,我觉得#8 说的才是正理。如果目标是想深入了解系统 这两个都不要选。 rust 并没有看着那么好,而且隐藏很多细节,新手学习的时候碰到问题会一脸懵。C++特性太多。如果不上手实际项目,很有可能就是浪费时间精力。 如果要了解编译器的原理之类,可以看看那种 400 行代码写个 c 编译器的开源项目,结合编译器原理书籍,能加深不少的理解。 |
47 xgdgsc 2024-06-04 12:27:54 +08:00 |
48 txhwind 2024-06-04 12:28:18 +08:00 想学底层就直接看教材,不用绕到语言上来。 出于好奇想了解新语言,就两个一块学,正好对比一下 |
![]() | 50 lujiaxing 2024-06-04 16:12:01 +08:00 @SpiritLingPub =>《颈椎病康复指南》=> 《最有效的减肥方法》=> 《活着》 |
51 evilwk 2024-06-04 16:33:19 +08:00 ![]() 建议打打游戏,做人开心最重要。 |
52 leehome 2024-06-04 16:34:05 +08:00 c 艹 , rust 太小众了 |
![]() | 53 LnTrx 2024-06-04 16:39:02 +08:00 了解底层的话可以整一个 C 语言的单片机玩玩 |
![]() | 54 SpiritLingPub 2024-06-04 16:39:04 +08:00 @lujiaxing O(∩_∩)O 哈哈~ |
![]() | 55 IvanLi127 2024-06-04 16:47:08 +08:00 底层的话,建议买个 MCU 开发板,然后写 C ,直接操作寄存器,感觉计算机组成原理在疯狂敲打我的大脑 |
58 ZnductR0MjHvjRQ3 2024-06-04 19:23:33 +08:00 想了解底层 学语言了解? 你不如直接抱着 深入理解计算机系统 来啃 |
![]() | 60 tool2dx 2024-06-04 23:30:38 +08:00 @huangdog B 站有 C++程序员的调查数据,80%的公司并不排斥 C++17 标准。我估计保守的公司还在用 C99 ,比如 ffmpeg ,这种就很难进化到 C++。 能用 C++写项目的,写到后面,直接就自我放飞居多。 |
![]() | 61 liuhan907 2024-06-05 09:03:21 +08:00 如果你是认真想通过学一门新语言来接触一些过去没有接触过的东西,那我觉得 Rust 更好。 实际上 Rust 没有那么难,在入门学习的时候不要去在乎那些生命周期的破事,编译错误就直接 clone 解决 80% 的问题,剩下 Arc 解决 15% 的问题。最后那 5% 入门是不会需要了解的。 Rust 还有非常好用的 cargo 包管理器。入门文档齐全而且有中文翻译。 不过唯一要注意的是它和 JS 差距可是云泥之别,不要按照 JS 的思路去写。或者说 GC 语言和非 GC 语言的思路差别巨大。你最好忘掉除了基础的概念(比如分支语句、循环语句之类的这种)以外的之前的经验,不然可能会学的很痛苦。 @hahade |
![]() | 62 LLaMA2 2024-06-05 09:14:40 +08:00 工作需要什么,你就学什么 而且你习惯了 Javascript 的灵活,习惯了 C#的智能提示, C++ 的那一套怕是完全推翻以前的代码编写习惯 算了吧, 还是多研究数据结构,多研究通信各种协议,各种行业约定的设计方案(套路) |
65 guotie 2024-06-05 17:21:58 +08:00 zig 并不比 rust 优秀 |
![]() | 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# 在与底层交互方面做得其实算比较完善的,所以很多情况下不用换语言就可以。折腾一段时间之后了解了不同的语言,再根据个人口味选择更好。 |