C++為什么始終無法取代 C 嗎?
:https://github.com/Jackpopc/DevWeekly
Linux之父Linus Torvald對(duì)C++有過一段評(píng)價(jià):“C++ can’t solve the problem of the C language at all, it will only make things worse. This is a really bad language.”
C++根本不能解決C語言的問題,它只會(huì)讓事情變得更糟,它真是一種糟糕的語言。
目前有很多追求性能的軟件都是用C++編寫的,而且它的確在C的基礎(chǔ)上增加諸如抽象、通用編程和面向?qū)ο缶幊蹋拇_對(duì)C語言進(jìn)行了很多提升。
但是,這么多年過去Carbon都已經(jīng)出來要替代C++了,C++卻還沒有完全取代C。
我認(rèn)為,主要有幾方面原因:
C++是一種極其復(fù)雜的語言,完全理解這門語言需要投入很大的成本。相比之下,C語言要簡(jiǎn)單很多。我想,這也正是為什么很多大學(xué)大一時(shí)選擇C而不是C++作為入門編程語言的主要原因。
C語言提供了一個(gè)標(biāo)準(zhǔn)二進(jìn)制接口,這就使得各種各樣的其他語言都可以調(diào)用用C語言編寫的函數(shù)
C語言更加透明和明確,C++有很多隱性的東西會(huì)造成重大問題,特別是在對(duì)象的構(gòu)造和銷毀方面。C++有未定義的靜態(tài)變量初始化和去初始化的順序
支持C++的同學(xué)會(huì)認(rèn)為,它有更強(qiáng)大的抽象機(jī)制,這在構(gòu)建大型軟件時(shí)有幫助。當(dāng)時(shí),我覺得這不足以證明C++是一種好語言,如果想構(gòu)建大型軟件,有很多比C++更好的選擇。
目前很多公司使用C++的唯一原因是開發(fā)游戲引擎,這需要低級(jí)別的編程和高性能,同時(shí)又是相當(dāng)大的軟件。
然而,我們可以找到很多表現(xiàn)更好的替代品。
例如,Objective-C。
如果你想獲得低級(jí)別的編程,Objective-C是一個(gè)不錯(cuò)的選擇,它目前被用于蘋果的高性能3D圖形API,Metal。
與C++不同,Objective-C很容易與其他語言對(duì)接,因?yàn)槠鋵?duì)象模型是基于消息傳遞的。
這樣做的好處是,你可以使用Python或Lua這樣的更快、更容易的高階編程的語言,同時(shí)你可以用C語言來編寫需要高性能的部分。
根據(jù)我的經(jīng)驗(yàn),例如,Python和C的組合比單獨(dú)使用C++的開發(fā)成本要小很多。而且,分別學(xué)習(xí)和記憶Python和C都比單獨(dú)學(xué)習(xí)和記憶C++要快。
根據(jù)你的領(lǐng)域,如果你需要原生代碼,可以使用很多其他靜態(tài)類型的語言,如Rust、Swift、Go、Haskell或OCaml。