為什么看到這么多人不推薦C++?

2000年左右是C++的鼎盛期,游戲,圖形界面,科學計算,后臺服務,各種新語言的實現語言,甚至入侵了一點操作系統里C的地盤。
一項技術,火起來蜂擁而上,泥沙俱下,平穩后發現后勁不足,或者有另一個風口出現,便如樹倒萎潰散。
進化是好事,進化的同時要吸取經驗,避免出現返祖現象。C++之父寫過一本神書,«C++語言的設計和演化»,鄙人孤陋寡聞,似乎這是唯一一本闡述語言設計理念、折衷的辛苦無奈歷程,Bjarne 在書中提出了很多極具智慧的設計理念,比如時下小火的儼然C++繼任者 Rust 也極為推崇的“零代價抽象”。
回到主題,為什么C++不再被推崇?客觀原因很明顯:
(1) C++語法很復雜,好的C++程序員難求。
語法上 C++14 開始的“后現代C++”已經改善不少,以前一些奇技淫巧可以拋棄了,但可惜為了向后兼容性,歷史包袱是丟不了的。
(2) 歷史上機器性能很弱,編譯器注重生成代碼效率而在不太注重警告語法陷阱——沒有足夠資源做分析,C++編譯已經非常慢了,所以C++的開發者友好度嚴重不足。
就像JS屆出了v8這個奇葩,C++屆有了LLVM后,逼得GCC也不斷改進,錯誤信息提示友好漂亮多了,大微軟的VC編譯器還能把Effective C++, More Effective C++等書里描述的注意事項融入編譯器里,也是這個大微軟,開源了好用的vcpkg,搭配CMake, C++的開發體驗比以前提升了很多,至少比 NodeJS 折騰一禮拜還不一定能搞定編譯工具鏈強 。
(3) Web 2.0 甚至 mobile web 時代,連老實賢惠的Java都被嫌棄,就別提C++了。
C++在科學計算的地位還是難以動搖,別瞅現在Python火的紅屁股,其實就是個皮,沒有C/C++加持,Python屁都不是。
明確下觀點:你不一定要用C++,但它值得了解。補一句,你不一定要用Rust,但它值得學習。
最后,貼一個 Go 的例子,編譯沒問題,運行出錯,而在 C++ 里完全可以在編譯期就發現問題,壓根不讓編譯通過。
- package main
- import (
- "fmt"
- "sync"
- "time"
- )
- func main() {
- var wg sync.WaitGroup
- wg.Add(1)
- go foo(wg)
- fmt.Println("before wait")
- wg.Wait()
- fmt.Println("after wait")
- }
- func foo(wg sync.WaitGroup) {
- fmt.Println("before sleep")
- time.Sleep(2 * time.Second)
- fmt.Println("after sleep")
- wg.Done()



























