因为Rust,微软Azure CTO和C++之父吵起来了,Linus也来补刀

作者: 程序员周哥分类: 计算机技术 发布时间: 2022-09-27 23:02:10 浏览:38356 次

因为Rust,微软Azure CTO和C++之父吵起来了,Linus也来补刀

账号已注销:
c++隐性机制太多,程序员花更多精力去了解语言编译器机制,大佬菜鸟之间先就仅仅是对语言熟悉程度就产生巨大鸿沟,而不是用在解决实际问题上,属实浪费生命

【回复】感谢cpp,仅凭语言这个门槛就挡住了我的不少竞争对手。看隔壁java卷成马我直接吃瓜[吃瓜]
【回复】回复 @花华青衣 :浪费生命与否在于你老板给你多少工资
【回复】回复 @ooo我要O泡ooo :浪费生命的是你不是c++
知其要者一言而终:
C++和rust都需要开发人员对程序运行机制了解透彻。c++采用的是懒汉法则,你都是在解决问题的过程中,学习他的各种机制,干中学;rust用的饿汉法则,强迫你在一开始就把各种技能点满。所以挺rust的都是大佬,至少对各种语言有几十年经验的。但是普通新手最好还是先从别的编译型语言开始,一步步来,没三五年经验,别上rust。除非有现成的项目可以跟着走。

【回复】没这么夸张,我学完c++之后看rust是真不难,感觉比c++要简单
【回复】回复 @冰馬 :所以rust难度确实不高啊,那些特性也不难理解啊
山葵酱_:
系统级开发,除了语言,对操作系统、网络等机智的要求也很高,一般是科班背景,跨专业培训出来的搞不定。业务性开发的,对计科基本功要求较低,所以JS、Java满街跑。不论是cpp,还是rust,都更趋向系统级开发,所以如果自己只是个业务开发者,又不具有扎实的科班基础,rust这些新事物,看看热闹就行了,没必要浪费时间去学习。Java平台的各种特性就够喝一壶了。

【回复】最烦这种拿科班不科班说事的,我非所谓“科班”,跨专业,没有培训过,大学就学了汇编,C,计算机原理一些基础课,工作多年到资深了,用过一堆语言,我觉得没有语言是难的,任何语言都能轻易学会,区别在于你要解决的问题和对应需掌握深度。rust是值得所有程序员学习的语言,它新颖的生命周期管理机制开辟了新思路。
【回复】回复 @无星夜he :你不在我说的范围内,请绕行
【回复】计算密集型服务器还是c++的比较多
ddoocc:
如果不了解c++的痛点,个人认为大部分人直接学rust会一脸懵逼,为啥这么设计。反而写过很多年c++学rust会有种亲切感。

【回复】回复 @0xb800 :borrow和move,所有权和生命周期。这两个概念,不写几年c++恐怕一开始理解起来有所困难。c++可以先不管这些概念,写东西遇到问题了,就自然理解了。rust里,这些东西是强制的,不理解你连一个简单的程序都写不了。
【回复】回复 @ddoocc :我觉得很好理解啊,没啥复杂的
【回复】学习语言都会有先入为主,你第一语言选择rust,就会认为rust就是简单的语言,其它语言用的人多,但是难。反过来就会认为rust一些语法等设计莫名其妙。
kbot的消息流:
如果不会C++或者C或者偏底层的语言,那其实也很难理解Rust中一些关键重要的优点[捂眼]

【回复】确实很难理解,但rust就妙在你如果不理解,不让你编译通过,把隐藏在底层的一些做法呈现在用户面前
【回复】回复 @无瑕剑客 :所以说rust好啊,编译过且在safe界线内的代码,保证你不会遇到cpp的问题
日本国父麦克阿瑟:
感觉本贾尼的话也不是对rust有意见吧,他的意思是说人们有用新代旧的想法很正常,c++确实容易写出在底层内存机制上有问题的代码,他也曾参与过给c++做安全规范的项目,但一切都不会是那么容易,现存的存量代码数量级太大,rust想要逐步闯出自己的一片天地还有很长的路要走

【回复】回复 @lulitao :rust链表那可真是魔鬼👹
【回复】回复 @百分百好牛 :因为绝大多数用链表的情况下都不用自己写,调库就行了 而且用unsafe写其实也不是很烂,就是直接操作指针而已
【回复】回复 @lulitao : 奇怪!既然rust写链表做得这么烂,为什么社区不改进这一点?
殘韵:
c艹最蛋疼的是没有一个现代化的包管理器,c++代码为了兼容c使用的.h+cpp格式也有很大问题有各种重定义相互引用问题

【回复】vcpkg,在linux mac win都可以用
【回复】重定义现阶段可以用头文件保护符解决,就是#ifndef~#define。后面C++23版本更新modules标准库就能从根本上去掉从C继承过来的老旧的#include宏了。
【回复】唉,本来明明白白安排好各种.a.so就完事鸟。后来各种pip,npm和mod tidy,麻烦死。
滑-稽_hj:
觉得c++繁杂,不喜欢的语言特性你可以不用,不想掉坑,不安全的东西你也可以不用(比如:宏),怕报错几十页,就用现代c++的特性

【回复】特性繁杂的问题就是别人很有可能会用,你要接手别人代码并且优化的话就很有可能要强制学习了,就很痛苦[笑哭]
【回复】回复 @虎穆鬼白 :封装隔离起来,优化别人的代码,纯属给自己找事儿
【回复】你不用别人会用啊,拿到手你看得懂吗[doge]
尘埃落在星河湾:
很讨厌把解决实际问题的时间,花在编译语言机制上

【回复】找bug的时间就不是时间了?跳楼(C++编译通过却运行出幽影bug)和撞墙(Rust直接不让你编译通过)总得选一个吧?
【回复】回复 @___法外狂徒___ :rust也无法cover所有的安全特性,refcell也会在运行时抛错,复杂性只会转移不会消失。更何况底层的rust也会用到大量的unsafe来实现指针的操作。 个人认为,rust增加安全性只是最小的卖点,cpp的smart pointer,raii,exception safety也都是为这个方向努力,而且还更早,两者并没有优劣。更何况cpp还有overload,keyword-argument,以及template,其表达力远高于rust。cpp最大的问题一是为兼容性导致的奇怪的语言特性,比如vector<bool>,constructor等,二是没有cargo级别的构建工具,包管理工具。单说解决第二点,一个没有define,没有include,没有cmake的cpp就足够吸引人了。
【回复】回复 @tricoEcho :Rust的unsafe仍然要检查生命周期和借用规则。C语言没有在语言层面提供生命周期参数,所以不会检查生命周期;因此Rust的unsafe也比C语言安全,unsafe不是把所有检查都去掉了,而是会保留诸如生命周期、借用规则的检查,因此还是比C语言安全。也就是说,宁愿用Rust的unsafe,也别用C语言。
Worldwidebrine:
内存安全机制Rust有的C++也不是没有 只是C++的包袱太重也不能推翻 我是菜鸟 我只是讨厌三元表达式和缺乏语义的分号而已 Rust砍了?:换成if-else加上有意义的分号就非常吸引我

【回复】我觉得你说的这些东西根本就是无所谓的。。。都是应用上的东西而已。。。
【回复】回复 @冰馬 :语言本来就没有理由把求值的分支单另出来做成三元表达式 其实不存在纯statement,绝大多数代码其实都是expression Rust没有做任何好事 Rust只是把本来应该做的做了
【回复】语句块、分支语句和loop循环有返回值真的好用
12W:
Mysql是最好的编程语言,php是最出色的关系型数据库[doge]

【回复】SQL虽然也图灵完备,但是也不如Rust。虽然都是图灵完备的,能实现任何功能,但是Rust是注重安全的语言,所以Rust更好。GraalVM能把Java编译成机器码,SQL如果有编译成机器码的编译器,就能代替其它图灵完备的语言。
北风之言申:
c++听说一般要十年功力才可能算有小成?

【回复】有个梗是扫地大妈都会jvm调优,但精通c++的这世界不存在[doge]
【回复】回复 @精神不太稳定 :你的精神为何不太稳定?
账号已注销:
正常人是不可能用RUST去重写C++的核心代码的,无论是游戏引擎还是系统引擎,即使叫linus来也改变不了什么,那老人就知道口无遮拦,大家都习惯了。现在的C++已经不同往日了,连自己支持的C语言写的LINUX都时不时崩溃,他有什么资格说C++不好呢?稳定性在哪?现在还用内存安全性来说rust好话是靠不住的,因为这点而 优势无法吸引别人去用rust去冒险重写一个大工程,它的就业优势也没有,现在依然C++多人招聘。而不是冷门的rust,底层系统层编程也是小众,不可能成为主流的,C++先进,强大,好用,而且语法很熟悉,很多人都是从C开始一步步到C++的,你用rust还是个陌生的环境,哪怕你语法是从C++抄来的,一样有许多不同,这些不同就会让你头大。各种bug。

simplebili:
是的,但是rust的优点也是这些嘛。学都要学,但是用就可以选择了[doge]

【回复】可以只学一门,随便哪一门图灵完备的语言。GraalVM能把Java编译成机器码,Java也是图灵完备的。有些图灵完备的语言不是不能代替C++,只要有了类似GraalVM的编译器,即可代替C++。因此只需学一门图灵完备的语言即可。

计算机 LINUX 编程 C/C++ c++ rust 编程开发

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!