作者:水神上仙
链接:https://zhuanlan.zhihu.com/p/606709981
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
芯片大厂高端语言双修选手来答一波。
首先C++早已是old-style,别再提C++,它的历史比汇编还久的多。
有些C党喜欢把Modern挂在嘴边,我就认为当初设计C语言那帮人是思想老旧,我没必要高看那些人一眼。加了些Features就Modern了,我真要笑掉大牙。
我认为Performance圈子里是wrong direction,至少我觉得这个圈子不创造任何价值,喜欢YY。你别跟我提你CPU主频多高,内存容量多大。
Better Performance是一种no sense things,我恳请你一定要去写汇编,你省的那几个cycle,真的NBCS。
你熬夜加班写代码是为了啥?你不会换一个Better Performance的CPU? 你不会update你的hardware?你跟我说写Better Performance的代码,我只能说你太喜欢在物体上雕花了。
追求Better Performance Code的人本来就是一群病入膏肓的人,这种人习惯了在MCU上编程,而不是SoC上编程。
所以从这种人嘴里才会蹦出来一些自以为是的话:什么检查数组下标会削弱性能啊。什么回收内存会削弱性能啊。
在这种“性能病患”眼里,一切削弱性能的东西都是不好的东西,这种人把性能当作一切,好像只要优化一下性能,在10M频率下也能跑出1GHz的性能。
所以我从来不想理这种人,他们懂编程的含义吗?C++圈子全是些怪人,我早就不混圈子了。
我认为他们对Optimization这个词有严重误解,好像少new几个变量,尽快释放几个内存,就是最好的Optimization,只能从性能这个指标评判程序的价值?我觉得这种人不配写代码。
首先,你要摒弃掉性能这个词,然后我们再来谈语言的其他Features。
我们来谈谈Safe和Unsafe。任何Safe的东西都会自动做很多check并且在throw之后有足够多的catch。
只要是一个用过Rust的人明显就能感觉到rust编译器的catch分支比C++多太多。
而这种Safe就是由牺牲微不足道的性能换取终生保障的Check。
现在的C编译器就是一坨sh,它有ChatGPT那么智能吗?我天天手写printf,手写switch_case;写多了这种极端低级的语言很容易降低人的智商。
谈什么都是放大水,首先你要简化语法,其次你要check bug。这才是我信赖的编译器。
编译器的目的是降低人的工作量,保障程序的安全性,保持程序的简单性。这就是所有未来语言的发展元素。
不是像template党遁入邪道在坍塌的地基上自娱自乐,也不是叫着优化performance。
我们要为编程的终极理想服务,你程序慢个一倍又怎样了? 是公司不给你钱买新款CPU吗?
你程序能不能保证别人能看懂,你程序能不能保证写的不犯错。
编译器有没有做足够多的检查去辅助人类编程。
我们都是聪明人,我们知道Rust有光明的未来,你和C++那帮思想落后把performance和compatible视为最重要事情的患者争辩什么呢?
他都喜欢浪费时间在优化cycle上了,随他去呗?反正他的工作从理论上看也没有多少价值。
我最后说一句,编程最重要的是可读性,体现在代码美观性,逻辑统一性,和数学公式的直接映射性。其次是方便性,主要是lambda,map这些组件,不会用grammar sugar的人在我看来都比较低级。
最后是safety,你用什么catch statement来protect代码逻辑的正确性?
你完全放弃catch异常,就是让代码裸奔,就是喜欢偷懒,只考虑best case,不考虑general和worst case。你写程序没有追求。
当我们把代码的内在美观性,和bad case catching解决后。如果我们学有余力才考虑better performance。
记住这个优先级顺序,99%的情况下我不会把生命浪费在解决performance的问题上,我宁愿去做appearance level的优化,我觉得更valuable,因为我的价值观是正常的,有些人的价值观已经被机器驯服了,他们是机器的Slave,我是机器的Master
Convenience和Simplicity是一个主导一切的词,我们提出工程师创造的产物是服务给世界上最蠢的人,不是只服务于天才用户。
我们以愚者为本发展科技,我们拓展他们的能力做更多事。科技趋于简单,不是复杂。
C++和Rust臭味相投,他们在Simplicity上都是failed product。现在比较Safe已经没有意义,因为它们的发展目标就错了。
我曾经花了4年时间学C++和1年学Rust,但我更欣赏C#,kotlin,python这种语言。它们在sugar上做的非常棒,simplicity也有优越性。
面向机器编程是觉得自己活太长了,人生苦短,我面向fast solve problem编程。