大山姆的機機車車™ #8

我是山姆,《大山姆的機機車車™》是我的第一份電子報,希望透過這份小報,把我感興趣的資訊分享給同樣求知若渴的您。 ༺ 意見調查結果 ༻ 上一期 提到我在編《C++ 世界的學習指南》時遇到的難題,謝謝讀者的回饋。有一點蠻有趣:有人覺得有 C 語言基礎,對於指標、陣列等有概念因此比較 容易 上手 C++。有人覺得懂 C 的人對 C++ 多型(Polymorphism)、虛擬函式(Virtual Function)適應不良(冠希?)。 語法方面,C++ 的保留字(Keywords)不算少,而且同一個符號在不同情境有不同的意義。這點程式設計老手可能習以為常,但對新手來說卻是學習障礙。 再來就是函式多載(

大山姆的機機車車™ #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++ 這麼複雜,一定很難學,為什麼要學這種程式語言?我的看法是:

  1. 效能榨汁機
  2. 自己嚇自己

高階語言一字排開,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 TemplateCRTP 等高級技。同一個作者寫了兩篇文章說明上述兩個技巧:

我有 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!(賴床戒斷法)

在大腦有機會「說服」你繼續睡之前,讓火箭發射吧!另外一則影片也是類似的概念。「懶惰」與「拖延」是大魔王不是小囉嘍,請用盡全力克服!