這是不同的標準策略,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是新生兒,需要快速成長,否則太弱了。


推薦閱讀:
相关文章