大山姆的機機車車™ #8
我是山姆,《大山姆的機機車車™》是我的第一份電子報,希望透過這份小報,把我感興趣的資訊分享給同樣求知若渴的您。
༺ 意見調查結果 ༻
上一期提到我在編《C++ 世界的學習指南》時遇到的難題,謝謝讀者的回饋。有一點蠻有趣:有人覺得有 C 語言基礎,對於指標、陣列等有概念因此比較容易上手 C++。有人覺得懂 C 的人對 C++ 多型(Polymorphism)、虛擬函式(Virtual Function)適應不良(冠希?)。
語法方面,C++ 的保留字(Keywords)不算少,而且同一個符號在不同情境有不同的意義。這點程式設計老手可能習以為常,但對新手來說卻是學習障礙。
再來就是函式多載(Function Overloading),連運算子(Operator,例 +, -, ==, >)也可以多載的 C++,這點也有可能提高理解既有程式碼的難度。再加上 Call by Value, Call by Reference, Call by Pointer...,造成多載函式的推導更為複雜。
還有公認高學習門檻的 C++ Template 以及泛型編程,Template Meta-Programming 聽起來很「秋」,學起來可能痛苦三個月還不得其門而入...
C++ 這麼複雜,一定很難學,為什麼要學這種程式語言?我的看法是:
- 效能榨汁機
- 自己嚇自己
高階語言一字排開,C++ 在當代「電腦效能榨汁機」排名前段班,而且真正跨平台又不對效能妥協。
C++ 雖難,學會她卻是百分之百可能的任務。只要用對方法,下足苦心,半年就會有滿意的成果。
再次感謝讀者回饋,我很喜歡這樣的互動。Happy coding!
人物誌
Phil Nash (@phil_nash)
我是因為 Catch 才留意到這傢伙,基本上我對這種 C++ Template 應用自如的人感到萬分佩服。Catch 是 Phil Nash 的成名作,已被挖到專營開發者工具的 JetBrains。
參兩摘
ACCU Conference - YouTube
ACCU 2018 研討會剛結束,影片已可由 YouTube 頻道上觀賞。
Stack vs Heap Memory in C++
TheChernoProject 這一集說 Stack vs. Head 記憶體的差異,很重要的觀念,二十分鐘影片,不要錯過。
East End Functions : Level of Indirection
第六期有一篇討論 West Const vs. East Const 那一個比較好。Catch 的作者 Phil Nash 是 East Const 陣營,除了湊一腳也提出函式的回傳值型別應該寫在前面還是後面。
Unforgettable Factory Registration · Nir's blog
一步一步帶你實作 Factory Method pattern,用到了 C++ Variadic Template,CRTP 等高級技。同一個作者寫了兩篇文章說明上述兩個技巧:
我有 xx 經驗,願意無償提供 OO 咨詢
去年有人在推特發起了「我有 xx 經驗,願意無償提供 OO 咨詢。」串連,成效不錯,Compiler Explorer 的開發者也參一腳,他的專業領域是金融、遊戲、行動裝置以及後端。
摘影片
C++ Edinburgh: Phil Nash — Modern C++ Testing with Catch2
Phil Nash 到 JetBrains 後持續開發與推廣 Catch。這支影片也提到了 Clara Command Line Parser。
The Clang AST - a Tutorial
延續 Clang 主題,應該不少人覺得 Clang 又肥又大,因為它本身就是龐大的演算法庫,其中一個是 Clang AST 。這場影片是官方文件, Clang AST 樹節點主要分為四種:型態、宣告、實作、敘述。
編譯器流程可以看 Morgan Wilde 的演講 A Brief Introduction to LLVM 。 Scanner 處理正則文法產生標記,Parser 分析上下文無關文法產生抽象語意樹,之後才是轉成中介碼,中介碼之後才會開始做優化。
中英對照:正則文法(regular grammar)、上下文無關文法(context-free grammar)、標記(token)、抽象語意樹(abstract syntax tree)
By Sidney Niu
CppCon 2017: Herb Sutter “Meta: Thoughts on generative C++”
延續編譯時期決定的主題, 並不是所有的超編程都是圖靈完備,但 C++ 的樣板已經是圖靈完備。 Herb Sutter 開場先提了 Three-way comparison(<=>) 符號說明好的語法是更簡單但功能更強。接著透過 constexpr 說明編譯時期決定與執行時期碼可以互轉的抽象層次思考,最後以 Metaclass 的概念帶入 C++20 concept 的設計理念。
中英對照:超編程(Metaprogramming)、圖靈完備(Turing-complete)
By Sidney Niu
開源專案
Clara: A simple to use, composable, command line parser for C++ 11 and beyond
Catch test framework 用到的 Command Line Parser,同樣採 Single-Header Only 設計。
WorkFlowy Tips
[108] 讓作家及譯者專心工作的好撇步—善用 Ghost Bullets 以及 Completed Items
「專注」讓你的工作效率倍增,進而節省時間,而「時間就是金錢」。本人人體實驗證明,「專注」確實能有效提昇生產力。如果你是作家或者是譯者,我有幾個 WorkFlowy 撇步報給你知,讓你更容易專注於寫作當下。
想知道更多 WorkFlowy 撇步,請快步前往 WorkFlowy Tips 。還沒有 WorkFlowy 帳號?請用此連結申請,加倍免費清單上限。
還有還有,我在臉書開了一個以 WorkFlowy 為主題的社團——山姆的 WorkFlowy 大小撇步現在人很少,快來助拳!
💌 喜歡這一期的內容,請幫我按「👍」。不喜歡請按「👎」,並寫下你認為哪裡做得不好,你的回饋是我進步的動力。想要匿名舉報的話,我開了一個 Sarahah,歡迎使用,謝謝!
本報內含 Affiliate Link 連結若干,也就是我有機會從中獲益,賺點奶粉錢,希望有朝一日能因此日進斗金(誤)。若對這樣的作法有疑慮,請讓我知道或者直接退訂也行,我不會介意,你請別生氣。☯
5, 4, 3, 2, 1, Launch!(賴床戒斷法)
在大腦有機會「說服」你繼續睡之前,讓火箭發射吧!另外一則影片也是類似的概念。「懶惰」與「拖延」是大魔王不是小囉嘍,請用盡全力克服!