Google對C++的影響有多大?
01-13
題主正在學習C++,很嚮往在Google的工作,所以提出了這麼一個問題,讓大家見笑了。根據題主的了解,Google的主要使用語言是Java,C++,Python和Go(感謝答主正小歪糾正),但是不太清楚C++到底在Google是怎樣的地位以及Google對其的影響。
相關問題(只是看到了有個類似問題,並沒有拿微軟讓大家比較的意思……):微軟對 C++ 的影響力有多大? http://www.zhihu.com/question/40119209
1. Google 目前大部分在跑的服務端代碼都是用 C++ 寫的。2. Google 的 C++ Style Guide (https://google.github.io/styleguide/cppguide.html) 流傳很廣,也被黑得很慘,C++ 爹 Bjarne Stroustrup 很不喜歡它。熱烈吐槽:Why Google Style Guide for C++ is a deal-breaker 負責人解釋和反吐槽:The Philosophy of Google"s C++ Code3. 換個角度看,Google C++ Style Guide 加持的 C++ 其實不算 C++, 你可以叫它 Foo 語言啥的,只是它恰好能被 C++ 編譯器編譯通過 —— 這樣可以少點口水戰。Foo 語言在 Google 服務端環境還是蠻好用的。
4. 雖然如此,Google 還是塞了很多人進 C++ 標準委員會https://isocpp.org/std/the-committee. 放心,負責Google Style Guide 那位不在裡頭。
5. Ken Thompson, Rob Pike 跟 Bjarne Stroustrup 都是貝爾實驗室的同事,但 Bjarne 是在另一個組。Ken Thompson 明確表示他討厭 C++, 後來跟 Rob Pike 一起做 Go. 所以 C++ vs. Go 基本還是貝爾實驗室的老傢伙在打架。6. 八卦時間,Rob Pike 和 Bjarne Stroustrup 在貝爾實驗室短暫地 share 過辦公室。所以後來我看見 Rob Pike 的辦公室門口還貼著 Bjarne Stroustrup 的名牌,感覺還挺萌的。Bjarne 不是 Google 員工,但如果來訪時真的坐這,兩人又都以軸著稱,那場面應該會很好玩。7. 對了,C++ 爹跟 UNIX 爹用的編輯器都是 sam, 作者是 Go 爹…… 就像 The Setup / Russ Cox 所說,能同時滿足他倆的口味確實牛叉大了。好像離題了……我所接觸過Google的C++開源庫類:
- Grisu演算法,把浮點數轉換為字元串(這個問題看起來簡單,實際並不然, 因浮點數存儲精度有限)
- Re2正則表達式, 既保留了name capture功能, 又保留了Thompson NFA[1]的速度 GitHub - google/re2: RE2 is a fast, safe, thread-friendly alternative to backtracking regular expression engines like those used in PCRE, Perl, and Python. It is a C++ library.
這兩個庫都是將長期沒有人在意或者可以解決的問題解決:
- Dragon4演算法20年來一直是浮點數轉換為字元串的主流演算法,主要使用大數(bignum), Grisu則全程用64位的整數以及浮點數存儲的二進位特點來運算, 比起dragon的大數演算法快了差不多4倍
- Re2正則表達式則將Perl里一直佔主流的有name capture功能的正則表達式演算法去掉影響其速度的語法(功能), 提煉出新的庫, 保留兩種優點.
偉大的protobuf、leveldb、re2都是google開源的吧,不過都是C++03。還有著名的v8。要學C++,還是覺得facebook的更贊,看看folly,wangle,都是標準庫的水準。代碼都是C++11 14的典範。
個人看過並山寨了folly的future庫,啟發很大。看上去模板很唬人,其實最主要就是sfinae。還有需要對右值有深刻理解,promise,future都只是movable的。
Leveldb 完整讀過,從語言層面,根本不是好的C+代碼,但思想熠熠生輝。總得來說,谷歌對c++語言本身是沒有什麼影響的,當然對推廣有貢獻。不少人通過Google學習了C++
我只記得"Google 的 C++ Style Guide"我反覆看了很多次
你說錯了, google三大語言是cpp,java,python
推薦閱讀:
※為什麼 C 語言源程序最後一行要是一個空行?
※如何以最小的改動盡量不改變已有代碼的情況下適應不斷變更的需求?
※如果要改進C語言,您最希望添加哪些語言特性,移除哪些語言特性?
※在知乎這個平台里,你最喜歡哪位C/C++大神?
※不調用畫圖 API,用C 或 C++ 如何實現畫一條線?