作者icetofux ()
看板C_and_CPP
标题[讨论] Rust与C++
时间Mon Jun 26 21:33:42 2023
最近看到一则windows以Rust改写部分程式的新闻,仔细一查发现Linux似乎也打算将Rust作为内核开发的第二语言,让我对Rust这个语言产生很大的兴趣。
我最先学会的语言是C,後来在学习物件导向的时候开始接触到C++,对於C++提供的语言特性及STL印象深刻。虽然不能说写的非常好,但感觉C++强化了很多C在记忆体管理上容易出现问题的地方。目前如果环境许可,C++往往是我会优先选择的语言之一。
快速搜寻了一下Rust及C++的比较,大部分都是着重在将两个语言的优缺点条列比较,比如Rust在记忆体管理跟编译讯息上更为突出,而C++则是保持对C的相容跟编译速度更为出色,编译出来的执行效率两者似乎在伯仲之间,都非常的优秀。
但是看了几项比较资料後,却没有发现两大作业系统选择了较为年轻的Rust而非长时间发展的C++的关键原因。请问有对Rust较为熟悉的先进可以帮忙解惑吗?
谢谢。
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 111.240.206.52 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/C_and_CPP/M.1687786427.A.59E.html
1F:→ ck574b027: 没发现c++的优点根本没差吗,编译速度到了大专案还不是 06/26 21:39
2F:→ ck574b027: 得去泡咖啡上厕所 06/26 21:39
3F:推 flarehunter: 因为C++的记忆体漏洞太难防了 Rust直接从语言上解决 06/26 21:43
请问C++即便是使用vector这类的安全资料结构,善用智慧指标等各种新特性,依然很难写出记忆体安全的程式吗?
※ 编辑: icetofux (111.240.206.52 台湾), 06/26/2023 21:49:33
5F:→ lycantrope: Rust在compile时就会抓你记忆体漏洞 06/26 21:57
6F:→ ck574b027: 写得出来跟检查得出来是两回事 06/26 22:34
7F:推 CoNsTaR: 建议去读 linear types 或 quantitative types,Rust 用 06/26 23:00
8F:→ CoNsTaR: 的是 affine types,它和 linear types 的差别在它不强 06/26 23:00
9F:→ CoNsTaR: 制所有值一定都要被 consume 06/26 23:00
10F:→ CoNsTaR: 对比 C++ 你想要怎麽恶搞都一样给你 type check,反正 ru 06/26 23:00
11F:→ CoNsTaR: ntime 再 crash 给你看,超不负责任 06/26 23:00
12F:推 jheli: compile阶段就抓到漏洞总比出事後再debug好 06/27 00:23
13F:→ F04E: 说超不负责的也很奇怪 啊不就是给你方便你当随便... 06/27 01:11
14F:推 CoNsTaR: 楼上,方便在哪?给了什麽方便? 06/27 02:45
15F:推 oToToT: 个人觉得rust有一定的时间是花在说服编译器我的code跑起来 06/27 02:52
16F:→ oToToT: 没问题,C++就没那麽多规矩 06/27 02:52
18F:→ flarehunter: unique_ptr<T>的物件到函式但没有要给函式ownership 06/27 08:10
19F:→ flarehunter: 照chromium guide是传一个raw pointer 06/27 08:11
20F:→ flarehunter: 呼叫函式的人要"手动"保证物件的lifetime够久 06/27 08:12
21F:→ flarehunter: 如果没弄好就会有use-after-free的问题 06/27 08:13
22F:→ F04E: 连哪里方便都不知道了还是别用了XD 06/27 11:16
23F:嘘 CoNsTaR: 所以我说和 Rust 比起来方便在哪啊? 06/27 11:27
24F:嘘 CoNsTaR: 你说给方便当随便,那到底方便在哪讲出来啊? 06/27 11:30
25F:→ oToToT: to楼上,我觉得我不需要标lifetime说服编译器我是对的就很 06/27 17:14
26F:→ oToToT: 方便,但当然Rust要标lifetime的情况不是非常常见 06/27 17:15
27F:推 chaos1993: 想请问即使用smart pointer,要怎麽恶搞才可以type ch 06/27 22:50
28F:→ chaos1993: eck过然後runtime crash? 06/27 22:50
29F:→ tinlans: get 它的 raw pointer 出来存到别的物件去, 06/28 02:05
30F:→ tinlans: 再很不小心地由它的解构子 delete 之类的吧 06/28 02:05
31F:→ tinlans: 2 人以上维护的时候有时会出现类似蠢事 06/28 02:06
32F:→ Lhmstu: c++没有从根本上改善c的缺陷 06/28 08:48
33F:→ MasterChang: 不是程式语言不行,是你不行。 06/30 09:58
34F:→ firejox: 我只希望有一天 Rust 能给我有用的错误讯息 06/30 15:16
35F:推 wulouise: rust compile time要求你的lifetime正常,有时候会很卡 06/30 21:42