大山姆的機機車車™ #7

我是山姆,《大山姆的機機車車™》是我的第一份電子報,希望透過這份小報,把我感興趣的資訊分享給同樣求知若渴的您。 ༺ 意見調查 ༻ 我正在編一個《C++ 世界的學習指南》,希望提供各階段 C++ 攻城獅一個學習的方向,在強化技能與技術的旅途上,不要因為一時迷失而放棄。 目前的進度緩慢,其中一個原因是:我尚未抓到新學 C++ 會遇到的難處。我能「猜」到幾個新手受挫的原因,但還不無法確切掌握全貌。 因此,我需要讀者的協助,若你還記得當初或目前學習 C++ 遭遇到的挫折或無法繼續進步的門擋,希望你能分享學習經驗,這對我的幫助很大。山姆感謝您!

大山姆的機機車車™ #7

我是山姆,《大山姆的機機車車™》是我的第一份電子報,希望透過這份小報,把我感興趣的資訊分享給同樣求知若渴的您。

༺ 意見調查 ༻

我正在編一個《C++ 世界的學習指南》,希望提供各階段 C++ 攻城獅一個學習的方向,在強化技能與技術的旅途上,不要因為一時迷失而放棄。

目前的進度緩慢,其中一個原因是:我尚未抓到新學 C++ 會遇到的難處。我能「猜」到幾個新手受挫的原因,但還不無法確切掌握全貌。

因此,我需要讀者的協助,若你還記得當初或目前學習 C++ 遭遇到的挫折或無法繼續進步的門擋,希望你能分享學習經驗,這對我的幫助很大。山姆感謝您!


真心一推

誠懇的建議尚未嘗試過 VIM 的攻城獅,配上這副武器絕對會讓你的專業職涯如虎添翼。另外,如果你是 Visual Studio 用家,可以考慮這個 $99 鎂的外掛-ViEmu

人物誌

Jason Turner (@lefticus) | Twitter

Jason Turner 是 CppCast 的主持人之一,但其實他是「公親變事主」,在接受 CppCast 創辦人 Rob Irving 訪問後就「升格」成主持人。技術實力不在話下,他在古老的 Commodore 64 上使用 C++17 開發遊戲。Jason 新年是許多大型 C++ Conference 常客,每年都有新的內容。

Jaon Turner 屬 Linux/Unix 流派,編輯多用 VIM 系列。

參兩摘

C++ Weekly - YouTube

Jason Turner 二年多前開始每週選一個 C++ 題目,以 Live Coding 的型式來解題。

Collaborative Collection of C++ Best Practices

Jason Turner 整理好的《C++ Best Practices》,除了有 Coding Style 外,還有一些撰寫 C++ 程式碼的最佳實務,是不錯的學習教材。該書可於 GitHub 免費下載。

How to Improve Your C++ Skills From Awesome Projects

成功的軟體專案,背後通常有漂亮的程式碼。拜開源碼風潮盛行,讓我們得以一窺究竟,研究個一二。這篇文章解析 Unreal Engine 的原始碼。

11 Debugging Tips That Will Save Your Time

這篇文章以 Visual Studio 為例,列出幾個除錯時相當有用的技巧。一般來說,碼農除錯的時間不少於寫碼的時間。因此,提昇除錯技巧是晉升專業程式設計師的重要一步。

Ultralight - Lightweight, Pure-GPU HTML Renderer

Awesomium 重生變成 Ultralight。棄 Chromium 改用 WebKit,體積大幅縮小成壓縮後僅 8MB。據說速度更快,不再像 Chromium 那樣「臃腫」。目前還在 Developer Preview,而且 Windows Only,期待成為 Electron 外更好的選項。

Top 10 Bugs in the C++ Projects of 2017

PVS-Studio 經常分析開源碼專案(C++ or C#)並給出報告當做案例探討。這篇列出他們認為的前十名,參考價值高。

Chaiscript In Game Objects – CooperKing.net

作者在一個小專案裡實驗性的導入 ChaiScript,得到的結論是:適用小型專案,有一些缺點,如連結時間過長使其不適用於較大型的專案。另外,作者提示了另兩個選擇:AngelScript and Lua。後者在遊戲界頗有盛名(魔獸世界似乎是重度用者),前者我第一次聽說。

摘影片

P. Goldsborough “clang-useful: Building useful tools with LLVM and clang for fun and profit"

延續編譯器優化主題,早期編譯器會直接將程式碼轉成低階語言,之後才有中介碼的概念。現代編譯器前後端模組分離的好處很多,包含可以任意替換前端語言與後端硬體,也更容易選擇優化等級。

臉書工程師 Peter Goldsborough 簡介編譯器前端 Clang 執行語法剖析並產中介碼,交由後端 LLVM 產生執行檔的過程。正確來說 LLVM 是一種技術和工具鏈而不是後端,但很多時候大家口中的 LLVM 直接是指 Clang ,誤用的程度非常廣泛阿。

Clang 與 LLVM 程式碼風格皆遵守 LLVM Coding Standards,他們的版本控管都是用 svn。 不過只用 git 的人還是可以去 GitHub 鏡像拉下來用。

現在有不少活用中介碼的專案像 Emscripten 可將 LLVM IR 轉成 asm.js ,讓 C++ 直接跑在網頁,同時也讓程式碼可以重複使用。

中英對照:中介碼(Intermediate Representation)、工具鏈(Toolchain)

By Sidney Niu

CppCon 2017: Ben Deane & Jason Turner “constexpr ALL the Things!”

延續編譯時期決定的主題,為了減少執行時間 C++ 編譯器提早決定了相當多的事情。

《Effective Modern C++》 第三章有說明 constexpr 的使用,另外 std::string_view 其實也是利用了 constexpr 大幅減少執行時期的成本。

一般都會公認除錯難度排序為 預處理 < 編譯時期 < 執行時期 < 不顯示,盡可能的在編譯時期決定能降低除錯難度。 Ben Deane 和 Jason Turner 一起介紹如何利用 constexpr 幫助寫程式在編譯時期除錯,想必未來應該會有越來越多的編譯時期除錯工具。

編譯器的警告和錯誤訊息已經越來越友善,以前的錯誤訊息真的很狂,還有嘲諷圖

中英對照:預處理器(Preprocessor)

By Sidney Niu

開源專案

ChaiScript: Embedded Scripting Language Designed for C++

Jason Turner 的傑作,ChaiScript 專為 C++ 設計的腳本語言。

Original Windows File Manager (winfile) with enhancements

微軟把 Windows 3.0 的 File Manager(類似檔案總管)的原始碼交了出來,而且還加上些許強化,直接用 Visual Studio 2015/2017 即可開啟。雖然年代久遠,但回頭看看當時的技術或許會發現有趣的東西。這個專案使用 C 語言。

WorkFlowy Tips

卡片助力输入输出,工具我选 WorkFlowy | ishanshan's blog

對岸資深 WorkFlowy 玩家的使用心得與心法,其中不少用法與我慣用的技倆有些不同,例如「少用標籤」、「少進出節點」。也有雷同的地方,例如工作日誌類的記錄。

想知道更多 WorkFlowy 撇步,請快步前往 WorkFlowy Tips 。還沒有 WorkFlowy 帳號?請用此連結申請加倍免費清單上限

還有還有,我在臉書開了一個以 WorkFlowy 為主題的社團——山姆的 WorkFlowy 大小撇步現在人很少,快來助拳!

💌 喜歡這一期的內容,請幫我按「👍」。不喜歡請按「👎」,並寫下你認為哪裡做得不好,你的回饋是我進步的動力。想要匿名舉報的話,我開了一個 Sarahah,歡迎使用,謝謝!

本報內含 Affiliate Link 連結若干,也就是我有機會從中獲益,賺點奶粉錢,希望有朝一日能因此日進斗金(誤)。若對這樣的作法有疑慮,請讓我知道或者直接退訂也行,我不會介意,你請別生氣。