大山姆的機機車車™ #22
▋贈書:破四百、贈四本
時序來到 2021 年,去年很不好意思地只發了三期,但訂閱人數還是緩步向上,於日前正式突破 400 訂閱。為回饋讀者,鼓勵學習,山姆決定送出四本優質電子書。在推特做了簡單調查,選出以下兩本,各送兩本:
- 《C++ Best Practices》by Jason Turner
- 《C++ Move Semantics - The Complete Guide》by Nicolai Josuttis
贈書辦法同上次,採用「Opt-in」模式,細節請見第十九期。其實規則只有一個:讓我知道你對哪一本書有興趣,我會放到名單裡,在下一期公佈中獎名單。由於上述兩本書使用 Leanpub 出版,只要有電子郵件就能收到書。歡迎讀者踴躍參加。
▋寫書:挑戰出道時想不到的事
我正在寫一本書,書名暫定《跨平台應用程式開發使用 JUCE & C++》,一本介紹 JUCE 的入門書。寫作進度緩慢,目標是年底發初稿。(很懷舊的書名🙄)
目前所想,以 Leanpub 出 Beta 版,收集讀者回饋(如果有的話😅),漸漸完善成一本合格的 JUCE 入門書。祝我好運!💪
書
C++ Best Practices by Jason Turner
Jason Turner 是 CppCast 的主持人之一,他的 YouTube 頻道《Cᐩᐩ Weekly》固定時間發佈單一主題的短影片,至今累積超過 260 集了。
《C++ Best Practices》是一個專業的 C++ 開發者,在接觸了大大小小的專案,累積豐厚的實務經驗後,得出 C++ 軟體開發的最佳實務。書裡許多的說明簡短,有時只是幾個範例程式碼,建議可以透過書中的延伸閱讀,對有興趣的題目進一步研究。
C++ Move Semantics… by Nicolai M. Josuttis
有人說:程式語言的一個功能而已,竟然要用一本書來說明?C++ 真是複雜。是啊,C++ 確實不簡單,許多推崇 C++ 的人(包括我)從來不是因為她很簡單,所以喜歡。
有些技術看似簡單,但要真的懂,融會貫通到實務上用得得心應手,不容易。C++ Move Semantics 就是這種東西。Move Semantics 其實是好幾個功能組成,而且是 C++11 的重頭戲之一。
這本書深入探討 C++ Move Semantics 的組成,以 C++11 之前,沒有 Move Semantics 時的情況,到 C++11 之後面對相同情況能採取的策略。這本書講的是觀念,讀的步調可以放慢,跟「大部頭參考書」的使用方法不同。
參兩摘
Top 10 Bugs Found in C++ Projects in 2020
專門找碴的 PVS-Studio 部落格列出了 C++ 專案的「十大型蟲」。你跟幾個交往過?
C++ Annotated: January 2021 – CLion Blog | JetBrains
不定期發送的 C++ 主題電子報,由 C++ IDE CLion 開發商收集 C++ 界的事件,值得訂閱。
C++ Async Development (not only for) for C# Developers Part I: Lambda Functions
這篇是六年前的系列文章,說明用 C++ 開發「非同步」執行的程式碼是什麼情況。系列以兩個開源專案—PPL and C++ REST SDK,為實例,探討開發非同步應用程式的幾個面向。從 Lambda 開始,然後談例外(Exception)發生的處理,以及中途放棄時的如何乾淨收尾。文章雖老,觀念依舊重要。
Crafting Interpreters
本書作者 Bob Nystrom 是 Dart 程式語言的開發者之一。多年前,可線上免費觀看,寫作過程全公開的《Game Programming Patterns》一書,頗受歡迎,也出自他手。Bob 又有新作,這本是開發直譯語言要經歷哪些事,原本的目標是一本「小書」,沒想到花了三年多完成。
本書同樣可免費線上閱讀,紙本書仍在進行中。
Effective Async with Coroutines and C++/WinRT
收錄了「鬍子K」Kenny Kerr 在 MSDN Magazine 的投稿,專欄以 C++ 為主題,所以幾乎全跟 C++ 有關。「鬍子K」先前主要聚焦 Windows 平台,對於 COM 頗有研究,許多文章至今依然有參考價值,不要錯過。
「鬍子K」最近在把玩 Rust,喜歡嘗鮮的朋友,可以關注。
Joe Duffy - The Error Model
本期電子報介紹的開源專案 STX 作者設計該專案的架構時,從 Joe Duffy 的這篇文章獲得不少靈感。這篇長文深入探討了程式執行時的錯誤回報機制與處理方式,考慮了許多面向,值得多看幾次。
Kate Gregory's Blog - How to ask for C++ coding help
進入職場,不只要勇於提問,更要學會「如何正確提問」
網路上如何問軟體開發問題,有一些「眉角」。「凱特大嬸」這篇說明「如果讓別人願意回答你的 C++ 提問?」列出一些不該犯的錯,應該做的功課,問問題的事前準備,以及如何與洽詢的對象互動。
Olof Hellman - Practicing the Coding Challenges
這一篇跟 C++ 沒直接關係,談的是「好的面試題目應當如何」。我認同「標準答案」不是面試時觀察的重點,解題的方法以及態度反而比較重要。
Paper: Parsing Gigabytes of JSON per Second – Branch Free
這篇文章說明 simdjson 為什麼那麼快?如何利用 SIMD(Single instruction, multiple data)來快速處理 JSON。跟同質的專案比較,幾乎有兩倍以上的效能。
Understanding warning C4265: class has virtual functions, but destructor is not virtual
C++ 編譯器吐出來的 Warning 訊息,有一些是開發者「預料之中」的行為。我很喜歡的這位微軟資深人士 Raymond Chen,利用兩篇文章說明 C4265 就是這樣一種訊息。第二篇在此。
cpp.chat Episode 76: Chairs Around a Tony Table
Tony Table 的創作者幾乎是「職業」講師,幾乎每年 CppCon 都有他的講。厲害的是,他的場次普遍受歡迎,幾乎穩拿該活動前幾名,相當推薦他的影片。
Tony van Eerd 先後上了兩個 C++ Podcast,蠻有趣。
摘影片
Better Algorithm Intuition - Conor Hoekstra
C++11 的 lambda expression 搭配 <algorithm> 系列的功能可以解決不少看似複雜的問題。 演講中多個問題用到 std::partition 去解決,真的是巧妙又強大。
by Sidney Niu
Dependency management in C++ - Xavier Bonaventura
環境真的是 C++ 夢魘,演講中提到相依性設計的時候不應該列出相依的相依,那是套件管理的工作。 但不是每個系統都有套件管理阿,我個人是認為用 CMake 搭配 Git Submodule 是不錯的方式。
by Sidney Niu
CppCon 2019: Tony Van Eerd Objects vs Values: Value Oriented Programming in an Object Oriented World
這支影片說明了一種讓程式更易懂,更易維護的設計方法,結合了經常出現的觀念,如 SOLID, MVC。可以在看完之後想想,他說的有沒有道理?
Tony van Eerd: Postmodern C++
Tony 的講在 C++ 界頗受歡迎,經常是研討會中,最受歡迎的前三名。開頭那個是「詩」嗎?韻腳來韻腳去,竟然得心應手,有夠厲害。相當有趣的影片。喔不,不只有趣,Tony 的影片還「交」了許多如何寫好 C++ 程式碼的觀念。
我學會了一件事:Tony van Eerd 的影片,一定要看。🤟
C++ 冷知識
C++ Weekly 這集示範了 std::nextafter 的用法 。老實說,這東西,我現在才知道...
開源專案
GitHub - lamarrr/STX: C++ 20 error-handling and utility extensions.
C++ 的錯誤處理機制對一個中大型專案來說,很重要。設計地好,有助於提昇專案品質。設計不好,有些頑固的臭蟲讓人束手無策。
這個新專案不採「例外(Exception)」來設計錯誤回報機制,而是利用多個 Modern C++ 功能來實作,頗有趣。Basit Ayantunde 似乎在說明文件下了苦工,很有誠意,值得研究。
GitHub - zajo/leaf: Lightweight Error Augmentation Framework
這是最近發現的另一個 C++ 錯誤處理函式庫。支援例外(Exception)處理以及沒有例外處理的模式。相容於 std::error_code 以及 errno。
此專案的學習曲線較陡,對程式碼結構的影響甚大。
GitHub - simdjson/simdjson: Parsing gigabytes of JSON per second
C++ JSON 函式庫何其多,這個專案主打「速度」。據稱,比市面上許多免費開源的 JSON 函式庫,處理 JSON 時,快了 2.5 倍。
上方有一篇文章說明 simdjson 為什麼可以那麼快。
學習資源
Pure Virtual C++ Video Playlist
微軟 Pure Virtual C++ 線上研討會落幕,影片釋出。
不確定官方是否刻意,「Pure Virtual」似有深意。C++ 裡有「Pure Virtual Function」的類別,無法被「具現化(Create Objects)」,通常用來當介面或契約(Contract)使用。實作者必須繼承該類別後,實作該些 Pure Virtual Functions。 咱們觀眾即為實作者。講者談理論,聽者應用於實務。
Back To Basics CppCon 2020
C++ 數一數二的年度盛會去年因為疫情關係,改採線上直播的方式。CppCon 2020 的錄影都已上線,可以免費觀看。其中的《Back To Basics》系列針對一些 C++ 重要的功能與觀念深入探討。 別以為 Basics 沒什麼料,其實很重要。不論你的 C++ 功力為何,我都建議看。
WorkFlowy Tips
想知道更多 WorkFlowy 撇步,請快步前往 WorkFlowy Tips 。還沒有 WorkFlowy 帳號?請在這個共享清單中挑一個連結申請,增加免費清單上限。
還有還有,我在臉書開了一個以 WorkFlowy 為主題的社團——山姆的 WorkFlowy 大小撇步,歡迎加入分享你最酷的 WorkFlowy 使用技的更多同好!
💌 喜歡這一期的內容,請幫我按「👍」。不喜歡請按「👎」,並寫下你認為哪裡做得不好,你的回饋是我進步的動力。
本報可能內含 Affiliate Link 連結,山姆也接受小額贊助,請大家告訴大家😁