大山姆的機機車車™ #19
▋好久不見!
距離上一次發刊,竟然是一年多前的事了!為慶祝復刊,這一期有「贈書活動」,有興趣的讀者,請往下看。👇
今年 C++ 圈最大的新聞非「C++20 標準規格定案」莫屬。C++20 可以說是自 C++11 以來,加入最多新功能的一版,其中幾個功能對於 C++ 生態圈未來的走向,有舉足輕重的影響。待各大編譯器廠商支援 C++20 後,未來的 C++ 程式碼如何「質變」,令人期待!
雖然 C++20 了,但開發者別擔心跟不上,C++ 依然是熟悉的 C++,強者不會被廢去武功,新人也不必擔心看不懂。據我多年的觀察,新功能的「發酵期」長達數年,有心人士有足夠時間適應。
幾個較常被討論的 C++ 新功能:
- Concepts
- Modules
- Coroutines
- Ranges
- std::format
之後的電子報我會收集與 C++20 有關的資訊,望讀者跟這些新功能「日久生情」,不再陌生。迫不急待的躁進者,可以到這裡看看有哪些新功能。
▋Windows UI Framework
我在上一期(去年的事了)提到:
Microsoft 在 MFC 之後,幾乎停止了 C++ GUI Framework 的開發(ATL/WTL 不算)。
去年 Microsoft BUILD 大會,微軟端出了新技術,有機會解決 Windows 平台上,C++ GUI Framework 欠缺的問題。其中,有幾個技術我特別感興趣:
有了 XAML Islands,你可以在傳統 Win32 應用程式、WPF、Windows Form 裡,放 UWP 元件。藉此幫傳統應用程式續命。
WinUI 目前已經有穩定的 2.x 版,但今年即將釋出正式版的 WinUI 3.0,是微軟未來 Native Application 開發的重要角色。WinUI 使用 XAML 做為 UI 描述語言,經過數年的發展 XAML 在許多場合被重用,例如 Xamarin, NoesisGUI。
今年以前,我們是凡人。今年開始,我們是脆弱的凡人。疫情當前,保護好自己,留下拯救世界的本錢。
我是山姆,《大山姆的機機車車™》是我投注心力製作的電子報,希望透過這份小報,把我感興趣的資訊分享給同樣求知若渴的您。
贈書
Titus Winters,一個我很敬佩的 C++ 職人。他是 Google 的資深工程頭子,也是 C++ 委員會成員。最近出了一本書(應該是他的第一本書)《Software Engineering at Google》,副標是「Lessons Learned from Programming Over Time」。
為紀念大機車報復刊,山姆決定送這本新書給一位讀者。如何獲得這本書呢?
有別於上次贈書,這次採用「Opt-in」的模式,規則如下:
- 你必須是本報訂戶
- 對該書有興趣
- 真的對該書有興趣
- 有 Amazon 帳號
- 在電子報尾按「👍」並「留言」或寫信至 thecppnews@i3d.io ,表明你對 Titus 的書有興趣
在第 #21 期出刊前,以「抽籤」的方式選出幸運讀者,公告於報頭(以及推特),確認讀者回覆後,方送出 Kindle 電子書。
參兩摘
abseil / C++ Tips of the Week
Abseil 專案在 Google 內部頗受重用,Abseil 官網則累積了不少優質文章,其中的 TotW (Tip of the Week) 像當年 Herb Sutter 的 GoW 一樣,是 C++ 開發者不可錯過的金礦。
SourceGear | DiffMerge
Diff tool for Windows 我還是偏愛 DiffMerge。
Collaborative Collection of C++ Best Practices
CppCast 主持人之一,Jason Turner 整理了一份可免費閱的 C++ Best Practices 文章。初學後想要進一步提昇自己的 C++ 技能,這類 Best Practices 是不錯的學習資源,另一個必看的是 C++ Core Guidelines。
Best Practices 通常會告訴你怎麼做(HOW),但不一定會告訴你為什麼要那樣做(WHY),想讓自己的 C++ 技能更上層樓,理解 Best Practices 列出的事項背後的理由是不錯的練習。
C++ 人在推特
2020 了,還有人踏入 C++ 這個火坑?有人整理了一些 C++ 學習資源,有「活的」的推特用戶,也有「死的」技術書。
Introduction | C++ Education
Google 出的 C++ 教材(目前只有英文版),目的是讓有心教 C++ 的人有一個立即可用的教學材料。另有一專屬論壇,可以發問。
Talking C++: An Interview with Bjarne Stroustrup
C++ 之父專訪,專訪 C++ 之父。文章底下列出 Stack Overflow 上票數最高的 C++ 提問。
C++ 17 constexpr 與 Lambda 表達式 | 羅根學習筆記
偶然發現這個《羅根學習筆記》部落格,開始出現了 C++ 相關文章,版面編排以及內容皆優,值得訂閱。
摘影片
Troubleshooting Memory Problems
這支古老的影片說明了許多至今仍舊運作無誤的 Windows 系統上的記憶體管理重要觀念。當年公司花了約六千台幣買一整套,獲益良多。現在可免費觀看,每一個 Windows 上討生活的人都要仔細觀看。
Troubleshooting with Process Explorer
Process Explorer 是每一個專業 Windows 開發者必須熟悉的工具之一。這個工作管理員(Task Manager)殺手支援許多功能。使用時留意,有許多好用的功能預設沒打開,請花時間調整。這支影片說明其中幾個常用的功能。
C++ and Memory: Between Correctness and Performance
RedHat 工程師 Ulrich Drepper 介紹 C++ 是源自於設計給作業系統的 C 語言,所以延續了管理所有資源的權限,因此 C++ 的封裝行為的內容必須幾乎跟 C 一樣。
C++ 的新功能 atomic 、 vector 、 shared_ptr 都是在讓使用者更容易寫大型系統程式。
By Sidney Niu
C++ and Memory: Between Correctness and Performance
Chandler Carruth “Spectre: Secrets, Side-Channels, Sandboxes, and Security”
因為這幾年蠻多快取漏洞像是 Meltdown 之類的,所以安全性問題這幾年抬頭很快。 最好的安全性就是不要讓程式內的快取有可以攻擊的資料。
By Sidney Niu
Premake | Game Engine Series by The Cherno
使用 Lua 來設計 Build Script 用以產生各個工具的專案。似乎存在好一陣子了,但我看了這支影片才知道有這款東西。
開源專案
The new Windows Terminal
今年 Microsoft BUILD 開發者大會最大的亮點之一——微軟牌,開放原始碼 Terminal 專案。微軟顯然有備而來,事先準備好廣告,BUILD 期間瘋狂投放(Twitter),果不其然,造成廣大迴響。這個舉動對了許多開發者的胃,可見微軟內部對開發者社群的觀察入微,再加上近年擁抱開源的公司政策,招出得漂亮。
GitHub - KjellKod/g3log
工作關係,找到這個開源專案。其中一個功能—Custom Sink,可以提供客制的 Log 輸出端,例如將原本輸出至 Console 改成輸出至 Windows Event Viewer。
此前,我用過 C++ Logging 有:
Boden Cross-Platform Framework
我在 CppCast 2019 年四月份那集得知這個新專案。跨平台(iOS/Android, Desktop 也在規劃之中)又是以 Modern C++ 開發,值得觀注。其 Layout Engine 用的是 Facebook 家的 Yoga 專案,很大膽。不過,其使用 GPL 授權引起了一些討論。有人認為 GPL 的特性讓 Boden 不可能在 App Store 上架,「生命自會找到出路」,持續觀注。
A dbg(…) macro for C++
又一個 Single-header library,其輸出的 Debug 資訊不只結果,除了檔名、行數外,連同 Expression 也一併輸出,這點跟多數同類型工具有所不同。
Port of the xxhash library to C++14.
我還沒用到這個專案,據說是相當快的 Hash Algorithm。這個是 C++ 實作版(最先是以 C# 寫就)。這篇文章提供簡介以及評測。
PowerToys: Windows system utilities to maximize productivity
記得是 Windows XP 時期,新電腦一定會裝 PowerToys 這個好用的「外掛」。似乎是在 Windows Vista 時期(或更早)PowerToys 沒再更新,也慢慢被我淡忘。
日前,微軟突然釋出支援 Windows 10 版本的 PowerToys,而且開放原始碼,更棒的是,該專案的主要程式語言為 C++,而且是 Modern C++!(使用了 WinRT/C++ 專案)
課程推薦
Unreal Engine 4 Course (Create Multiplayer Games with C++) | Udemy
這個 C++ 課程在 Udemy 上有二十多萬學生,近四萬則評分下來,還有 4.6 顆星,相當不簡單。這是一門進階課,不適合 C++ 新手。
WorkFlowy Tips
想知道更多 WorkFlowy 撇步,請快步前往 WorkFlowy Tips 。還沒有 WorkFlowy 帳號?請用此連結申請,加倍免費清單上限。
💌 喜歡這一期的內容,請幫我按「👍」。不喜歡請按「👎」,並寫下你認為哪裡做得不好,你的回饋是我進步的動力。偏愛匿名表心意的讀者,我開了一個「提問箱」,歡迎使用,謝謝!
本報內含 Affiliate Link 連結,透過我的推薦購買相關服務或產品,我有機會從中獲益。我也接受小額贊助,歡迎大家用行動支持我。感謝!