[026] 看 Code 說故事:Facebook Folly(三)- Optional

先前的 Lazy 其中一個特性是:運算式/資源只會被執行/索求一次。實作此特性用到了 Optional,位置: folly/Optional.h Lazy 實作 operator() 覆載函數如下: result_type& operator()() { if (!value_) value_ = func_(); return *value_; } value_ 可被用來「判斷是否已給值(Function func_ evaluated or not)」,也可用來儲值 func_ 的回傳值。 由此來看,Optional 可以讓原本的型別多了一種「供外界查詢是否已被賦值」的能力。先前有過類似的需求,用了「急就章」解法:以 int 代表三種狀態: 為…

[022] 看 Code 說故事:Facebook Folly(二)- Lazy

Facebook C++ library 檔案命名慣例為 FileName.h,也就是 Camel Case 命名法,開頭大寫。我目前愛用的命名法是 Google 的 Snake case,長這樣:file_name.h。 單元測試使用 Google C++ test framework,各大開源專案的一致選擇。測試碼統一放在 test 目錄(我覺得複數 tests 較為合適)。Chromium 專案的習慣是測試碼與被測碼檔案放在同一個目錄,我們的專案也採用這種慣例。 回到程式碼,先來看 Lazy,路徑為: folly/Lazy.h 類似 Lazy evaluation 技法,其特性為: 讓某運算式/資源第一次使用時才執行/索取…

[021] 看 Code 說故事:Facebook Folly Library(一)

Facebook 在 2012 年公開其內部重度使用的 Folly C++ library。快速瀏覽過 Folly 原始碼,發現主要開發人員之一是我稱之為 Template-man 的 Andrei Alexandrescu,非人類。 Andrei Alexandrescu 有一本書叫《Modern C++ Design》,是我最初接觸 C++ Template 的書,當時看的是侯捷老師的中譯本《C++設計新思維》,看了好幾遍,每看一次都有不同的體會,受益良多,相當推薦,最好中英文版都買。 看過,讀過 Template-man 的影片與書,他老兄在 C++ Template 領域的鑽研恐怕無人能出其右。《Modern C++ Design》把 Policy-based C++ Programming 解釋地很好,…