大山姆的機機車車™ #5
我是山姆,《大山姆的機機車車™》是我的第一份電子報,希望透過這份小報,把我感興趣的資訊分享給同樣求知若渴的您。
💌 本報訂閱數達三位數了,謝謝大家!
༺ 客座青年 ༻
上一期出刊後,有在校學生來信表達有意參與電子報內容製作,我覺得是不錯的嘗試,幾次郵件往來訂下遊戲規則後,便開始接受電子郵件投稿(電子報後台依然由我一人掌控)。Sidney Niu 目前是碩二生,接觸 C++ 約兩年,自介如下:
會使用 C++ 的原因是希望未來能到 Ubisoft 或 Unreal 開發遊戲引擎,接觸 C++ 年資只有兩年多,由於資歷尚淺如果內容有誤請大家不吝指教。介紹的主題聚焦在近年的 Conference Speakers 演講,同時會為演講需要的一些背景知識做一些順序上的編排。
佩服 Sidney 主動探詢以爭取機會的勇氣,先給一打「👍」。本期開始由他提供的資訊會以「By Sidney Niu」標註,讀者若對他的服務滿意,請不要吝嗇您的鼓勵。如果做得不好也別客氣,我們會繼續努力。山姆感謝您!
人物誌
Titus Winters
Google 家的 C++ 倡議者,Google C++ Style Guide 是他在維護,這支影片說明 G 家的 C++ Style Guide 的設計理念,我的 C++ Code 撰寫慣例也是由這份文件衍生出來。Titus Winters 是 CppCon 常客,去年(2017)在 CppCon 公佈的 Abseil 專案可說是 Google 這幾年 C++ library 集大成,一想到有高品質的函式庫可用就讓人覺得興奮。
He chairs the Library Evolution Working Group (LEWG) - the sub-committee of the C++ Standard that focuses on the design of the C++ standard library.
參兩摘
What Should Go Into the C++ Standard Library
上一期提到 C++ 有一派人馬主張 Graphics Library 應該納入標準,有人覺得不妥(我也是)。Titus Winters 這篇文章表示不認同並詳細交代為何他認為 Graphics Library 放到 C++ 標準規格不是好主意。文中幾句頗有趣:
“C++ leaves no room for another language between itself and the hardware”, and that you don’t pay for what you don’t use.
是滴,C++ 就是這麼秋。
Protections against programmer error can be costly, and are thus not a priority for C++.
因為「秋」,少了點體貼新手的設計。🤘
LLVM Project Blog: Clang is now used to build Chrome for Windows
Google 說以後 Chrome for Windows 會以 Clang 做為主要編譯器,取代了 Microsoft Virtual C++ (MSVC) 。雖然有些數字還是 MSVC 好看,不過對 Google 來說,同一套開發工具所帶來的好處遠大於當前的落差,而且隨著 Clang 持續演進,Google 也能透過強化基礎建設(編譯器及相關工具,如 Address Sanitizer) 來改善整個開發流程,一舉數得。
對此決策,我想微軟應該是樂觀其成吧。
abseil / C++ Tips of the Week
除了高品質的 C++ 程式碼,Google Abseil 專案還附帶內部的 C++ 學習資源—C++ Tip of the Week。幾乎每週會有一短篇,探討 C++ 相關議題。RSS 必訂!
- Tip of the Week #42: Prefer Factory Functions to Initializer Methods
- Tip of the Week #74: Delegating and Inheriting Constructors
- Tip of the Week #126: `make_unique` is the new `new`
每一個 Tip 都有編號,方便討論。
摘影片
Titus Winters “C++ as a "Live at Head" Language
這支影片從抽象的 Software Engineer vs. Programming 定義講起,再帶到 Abseil 專案的設計理念:講求標準相容,也注重效能。版本演進不保證 ABI 相容,但儘可能 API 相容。
Why C++ Sails When the Vasa Sank
C++ 為何如此難學、擁有如此多變複雜的特性?一個程式語言擁有兩個範型就是 Turing-Complete,為何 C++ 還要實作所有範型?C++ 人應該如何以自己的語言為榮?
資深訓練師 Scott Meyers 從 C++ 發源的專案說明為什麼發展成現在的樣貌,並且引用了一個歷史事件說明 C++ 是一個成功且值得驕傲的語言。
中英對照:特性(Feature)、範型(Paradigm)
By Sidney Niu
CppCon 2016: Ben Deane “Using Types Effectively
C++ 是一個強型別語言,透過不同型別的參數呼叫對應的多載函式,模板則是由編譯器自動生成對應型別的程式碼已達到編譯時期的多載。C++17 的新功能 std::variant<Ts...> 和 std::optional<T> 則提供了型別安全與回傳值為空時的多載。
暴雪首席工程師 Ben Deane 從型別的基數思考方式出發,說明如何用 std::variant 和 std::optional 設計一個函式使其介面具就有可讀性且行為符合預期。
中英對照:基數(Cardinality)、多載(Overload)
By Sidney Niu
Podcast I Listen To
Abseil - CppCast
在 CppCon 丟出 Abseil 專案後不久,Titus Winters 接受訪談,談到 Abseil 名字的由來及其定位,還有未來的發展。
Merge Conflict
這是 iCircuit 的開發者 Frank Krueger 與 Xamarin 超厲害傳教士 James Montemagno 合作的節目。主題不意外繞著軟體開發議題閒聊,兩位開發者的跨平台軟體開發經驗豐富,一週不到一小時聽下來總能獲得不錯的經驗值。
開源專案
GitHub - abseil/abseil-cpp: Abseil Common Libraries (C++)
Google 去年端出這個在許多自家產品用到的 C++ Library——Abseil。我寫了一篇文章以我使用 Google C++ 專案的經驗來看這個新專案,結論是看好這個專案的發展。(許願:錄製一系列介紹 Abseil 的影片)
選書
C++ and Node.js Integration
Node.js / JavaScript 組合席捲全球軟體開發圈(太不幸了),一切如此美好一直到....遇到效能瓶頸。踏馬的 JavaScript 跟硬體不熟啊,叫不動怎麼辦?答案:呼叫 C/C++ 救援。沒 Node.js Addon 開發經驗?沒關係,挑這本《C++ and Node.js Integration》,$24.99 鎂,帶你進入 Node.js 外掛開發領域,成為 Node.js 求援達人。
⚠ 註:閱讀本書需要有些 C++ 底子,不適合 C++ 新手。
WorkFlowy Tips
[112] 讓 WorkFlowy 頁面更易閱讀的小技巧 – WorkFlowy Tips
我用 WorkFlowy 寫作,也用 WorkFlowy 看書或文章。WorkFlowy 預設的版面設計不易閱讀,本文利用一個小技巧減輕閱讀時的負擔。
想知道更多 WorkFlowy 撇步,請快步前往 WorkFlowy Tips 。還沒有 WorkFlowy 帳號?請用此連結申請,加倍免費清單上限。
還有還有,我在臉書開了一個以 WorkFlowy 為主題的社團——山姆的 WorkFlowy 大小撇步現在人很少,快來助拳!
💌 喜歡這一期的內容,請幫我按「👍」。不喜歡請按「👎」,並寫下你認為哪裡做得不好,你的回饋是我進步的動力。想要匿名舉報的話,我開了一個 Sarahah,歡迎使用,謝謝!
本報內含 Affiliate Link 連結若干,也就是我有機會從中獲益,賺點奶粉錢,希望有朝一日能因此日進斗金(誤)。若對這樣的作法有疑慮,請讓我知道或者直接退訂也行,我不會介意,你請別生氣。☯