这是不同的标准策略,C、C++是文本规范,Python是参考实现。

定义一种语言有三种方式,一是写一个形式化规范,例如scheme,它的规范非常短,只有几十页。因为它是形式化规范,使用数学语言,所以定义的形式比较简单。二是文本规范,大部分C,C++语言等都是,它就比较复杂,因为太多特例不能形式化定义,同时自然语言也不精确,长篇说明就不得不写。三是参考实现,就是会有一个官方参考,其它实现对照这个参考实现,以这个参考实现的行为为语言定义。Python和Ruby就是。

Java比较特别,它有一个JLS,同时也有一个参考实现OpenJRE。

JS就更特别,它先是一个参考实现,就是Navigator的那个,而后微软(误,最早提案为网景Netscape)搞了一个欧洲标准EcmaScript,但是这个标准中又大量使用了形式化描述。但是在实践中,大家一般以google的v8实现的行为为准。

就更新周期来说,文本规范最慢,因为提案,讨论,编辑周期比较长,同时也有一个相对稳定的好处;其次是形式化描述,它是问题是难度比较大,前面说的scheme的规范难产了好几次。更新最快的就是参考实现,它就像一个产品,有bug马上改,有特性马上加。问题是要么它只有这一个实现,无法兼顾性能;要么其它实现根本跟不上,只会对标比较大的更新。


python 的标准制定者自己就有 CPython 这个实现,自己制定的标准可以立即实现之。而且对 python 来说,CPython 基本上是绝对统治地位,他做的就是标准,无可质疑。想要修订自然更简单更快。

而 C/C++ 编译器版本多于一个,并没有某个编译器占据了绝对统治地位。至少,intel的icc,微软的msvc,gnu的gcc,以及后起之秀clang,都各自有各自的地位,要协调多方意见制作大家认可的标准并不容易,改变起来自然更加耗时。


C/C++标准是国际标准化组织(ISO)标准。

标准的制定过程,是世界各国国家标准化机构的专家,都飞到某个城市开会投票。每次会只有一两天。

会上能听到各种口音的英语,能听懂一半就不错了。

这样的会,得开好几次,才能完成一个标准。

这种标准,你要几个月出一个?

Python没有(ISO)标准。


「先问是不是,再问为什么」

仅为让问题更准确:c++的标准并非大约五年一改,甚至可以更准确——近十年来都是三年一改,c从11年开始也是固定的六年一改。别说我是在抬杠,这个5年10年实在是太大概了,拉高了多少百分比啊这是……

还有一个问题是,Python几个月更新一次是更新什么呢?每次更新都是更新标准吗?其实几个月一次的小更新更多的是修bug,不是更新标准。3.8-3.9这种类型的版本号变动的时候才会引入新特性,因为只此一家,所以自己做的就是标准。如果是说标准更新,那Python的标准我倾向是一年一改。

以下仅为个人看法,如有事实/逻辑错误还请大佬明示。

先列出来c/c++/python的release版本(python加上年份),以备后用。

C:89 95 99 11 17 23

C++:98 03 11 14 17 20 23Python:2.7(2010.7.3)3.5(2015.9.13)3.6(2016.12.23)3.7(2018.6.27)3.8(2019.10.14)3.9(2020.10.5)

python可以看出3.*大概是一年更新一次,更新这么快原因也不难推断——面向用户很广(上至海淀小朋友,下至mflagbat演算法工程师),需求也很旺盛,社区生态棒,大佬在认真的想让这个语言更易用更高效,举几个例子:3.8海象运算符,3.9字典取并运算符等等。这是语法层面的,其它的具体细节就太多了,我也吃不透( 总之感觉上就是一种需求驱动的快速迭代。

如果说Python是个时不时就想搞个大新闻的小年轻,那C语言相比之下就稳重的像个中老年人。C在17版中粗看只是移除了一个初始化原子变数的宏,然后修了54个issue,以至于我完全没有意识到它的存在。23现在还是草案阶段,大概看了下都是各种移植。

现在感觉用纯C更多是做一些底层的工作?新特性对C来说似乎也没什么必要,不会帮助减轻什么工作量。很多地方都可以用c++代替,非要用C可能也就硬体了吧……这个我不太懂,印象里听说有些硬体实现应该也能用c++代替了。

至于说某混乱邪恶语言,我实在是参不透其中奥妙了,真的是永远的神。为啥三年一更新我也不知道,更新的特性也没人用,gcc/clang/msvc等20的也都没实现全,就连前面的个别特性也没有补全。更关键的是,大家也都在写c++11,即使是大厂的code由于各种原因也都还是11/14,新标准能解决的事最后还是会自己手动实现或者借助boost等三方库。(不会更新就不要更新,学别人更新,更都会更歪来,狗头保命)

现截的图

依稀记得YouTube上看cppcon20有讲std::midpoint的实现,实在不知道这个会有什么实际应用场景……不过不知道不代表没有,个人相信c++的新标准一定会在某些我不知道的地方大放异彩。但是现在我特希望三家进度比较快的能赶紧把标准实现补全,因为我稍微有点强迫症,格子里红红的看著很难受(逃


C和C++是ISO和IEC标准

C++: ISO/IEC 14882

C: ISO/IEC 9899


因为Python的标准是独裁的,而C/C++的标准是民主的。

Python Software Foundation :我刚刚脑子一热,拍脑袋就写了一份Python标准文件。现在我宣布这就是Python语言的标准。立即强制执行!违令者扣工资。

ISO/IEC JTC1/SC22/WG21:微软公司、谷歌公司、苹果公司、IBM公司等等,欢迎到会!谢谢诸位的资助!请在本次大会发表有关C++语言的改进提案,然后讨论,最后全体投票。投票结果将写入 ISO/IEC 14882 标准文件。请注意,此标准文件仅供诸位参考,对诸位并没有约束力,所以诸位有权不执行。

ISO/IEC JTC1/SC22/WG14:微软公司、谷歌公司、苹果公司、IBM公司等等,欢迎到会!谢谢诸位的资助!请在本次大会发表有关C语言的改进提案,然后讨论,最后全体投票。投票结果将写入 ISO/IEC 9899 标准文件。请注意,此标准文件仅供诸位参考,对诸位并没有约束力,所以诸位有权不执行。


打个比方,c相当于楼房的地基,c++相当于强,而python相当于室内装饰。改动频繁度自然是python》c++》c


c最主要是要稳定,语法不可能再有很多的语法糖,往上有cpp,往下有汇编,怎么改都不合适。99标准改了个restrict就算很大条了,别的就是不定长数组,声明变数可以随意在任意地方,这种在gcc早几百年就有自己的extend了,当然你要用pedantic强制约束也是可以的,比如我就习惯用这种模式。cpp应用场景更多,所以几年一改以适应机器和显卡等场景很正常,当然以bs老头子的想法,改语法不如增加库,所以他也想让cpp少改语法,事实上cpp能真实完完整整按照标准实现一个标准的编译器是真的少,各家编译器都有自己的小扩展。

python这种不能说是标准,只能是更适应各种环境和场景来修改库和语法,他把python改成pascal语法从理论上说没人能阻止,而iso标准就不一样了。一个是社区产品,一个是国际化组织。


C++的标准就是一个笑话。C++这方面类似HTML标准了,说起来是标准,但是完全实现标准的编译器已经不剩下几个,就好比浏览器内核已经事实上只有少数几个在垄断。理论上一套源代码用不同的编译器都能编译,实际上不行。


C++标准在98-11年之间没有变化是因为Bjarne一开始没有掌握好节奏(参考C++程序设计语言4th,在第一章翻一翻很快找到),11年之后的3年修订一次标准是正常节奏。

C的话以前是10年一版,作者在11年没了后6年一版。(


稳定可靠是工业化生产的基本要求。


python应用场景太多了,几乎涵盖了方方面面,有些库不是很完善,那么就需要开发人员不断的完善,不断的迭代。

库多了,用的人多了,也必然会发展很多bug,那就需要进行完善,那么就需要合入补丁。

Python有2和3之分,在5年前python2是王者,而现在python3的库已经比python2多了。那么对应的一些规则(标准)也会发生变化。


C语言最接近机器的运行方式,机器的基本原理没怎么更新,C语言也就没怎么更新。

C++增加了一点抽象的特性,抽象的特性是主观的,就会容易产生缺陷,所以需要对这部分抽象特性进行维护。

Python是接近人类语言的,与机器的运行方式差距较大,语言特性是主观的,就要随著人类的思维流行趋势变化,所以就会频繁更新。


很简单Python是新生儿,需要快速成长,否则太弱了。


推荐阅读:
相关文章