c 相關的技術資源整理歸類

2022-07-06 23:00:15 字數 3762 閱讀 3301

記憶體模型相關的知識####

最後有一本書介紹給讀者,c++ concurrency in action,學以致用,作者也是這方面的先行者 anthony williams,他的文章部落格在網上也傳播的很利害,比如 peterson's algo,deker's algo 在 c++11 中的實現等。

右值引用與型別推導####

雖然 bs 諄諄教導不要成為 language lawyer,不要摳太多語言細節,但是。。。不徹底搞懂右值引用又怎麼能夠理解 move 語義,又怎麼能用好新的 stl 呢,更不用說自己寫相關的**了,畢竟語言裡本身有許多 arcane 的細節,弄懂了其實還是有助於少踩坑的,再說了,不能寫 library 的程式設計師也算不得好碼農。

右值引用是一定要搞懂的,推薦兩篇介紹性的長文,其中一篇是 scott meyers 寫的 universal references in c++11, 另一篇則由 thomas becker 所寫 c++ rvalue references explained,仔細讀完這兩篇文章,應該就能徹底搞懂 move, forward 及其背後那些稀奇古怪的東西。

因為右值引用的出現,c++11 裡對傳參有了一種新的寫法(idiom),叫作 sink parameter,簡單來說就是必要情況下盡可能多地傳值而非傳引用,具體可以看看這篇介紹, 由此也引發了許多對 value semantic 的討論,cpp-next 上有一篇文章值得一讀,want speed? pass by value(鏈結如果沒法開啟,可以試試這個備份的映象), sean parent 有乙個 talk: c++ seasoning 也講到了這方面的用法,cppcon2014 裡有也有乙個專門的演講是談 value type 的,個人覺得比較有意思。

在學習右值引用的時候,如果你在意細節,相信會遇到一些關於型別推導的疑問(比如 perfect forwarding 裡的模板引數型別推導)。關於型別的推導,比如 auto, decltype 的使用,這裡也有兩篇文件值得一讀,很巧分別還是 scott meyers 和 thomas becker 所寫,其中一篇是 scott 在 cppcon2014 上作的演講,type deduction and why you care, 另一篇則是 thomas 寫的 c++ auto and decltype explained,題外話,auto 和 decltype 是 c++11 裡我最喜歡的兩個新特性了,auto 自不必說,隨手 auto 一下強健的右手少敲多少鍵盤,decltype 也是實打實的 productivity booster,以前要寫各種 traits, result of 來人肉推導返回型別的痛苦歲月從此就一去不復返了。至於模板引數的型別推導,個人覺得也是值得仔細研究總結一下的,以後再補充.(todo)

threading/concurrency####

語言級別的併發程式設計也許是 c++11 眾多的新特性中引入新概念最多的一塊了吧,習慣了從前遠古時代簡單粗暴的多執行緒程式設計模式,到現在滿眼 future, promise, async,恍惚會有錯覺彷彿已經不是在寫 c++,感覺已經變了,味道也變了。確實是變了,變得更加簡單,也變得更加容易,所以最好盡早去嘗試和適應,熟悉了基本的語法和使用規則之後,強烈推薦 sean parent 的這個演講,better code: concurrency, 這裡面 sean parent 講了一些併發程式設計的基本的準則,best practise 之類的,並且自己重造了一遍 future, promise, packaged_task 等輪子,從而實現了乙個簡單版的 async continuation (主要是 then()),sean 的演講和他的程式一樣一慣地簡練實際,我個人非常地喜歡,也推薦讀者去看看他的 better code 這一系列的演講,乾貨很多。

說到 concurrency,herb sutter 也寫了一系列 effective concurrency 的文章,當然一慣地 herb 的風格了,以說教的形式指出 best practice,如果嫌文章太多太長(我也沒看完),可以看看他的這個濃縮版的演講,該演講把 future, promise, async, then 等方方面面都講到了。個人小小的體會,async 加上 lambda,你會發現 c++ 裡寫 non-blocking code 忽然變得這樣直接和容易,簡直不敢想像。

另外就是關於 coroutine,微軟的人在 cppcon2014 上展示了乙個在 vc 中實現的 await2,貌似和 c# 中的 await 有些關聯??從他們的演講來看,await2 可以 stackless,因此 highly scalable, 細節是怎樣的,十分值得細究,基於 await 的程式設計看起來又完全不同的感覺了,很多其它高階語言裡特性逐漸地出現在了 c++ 裡面。

lambda、模板、函式式####

lambda 並不是乙個新的東西,就算在 c++11 中,它的出現也這樣地順理成章,甚至可以認為不過就是 functor 的語法糖,但是它的誕生在很多情況下卻讓寫**變得這樣的簡單直接,以致如果你深入體驗之後,已經完全沒法再脫離它,前面 sean parent 關於 concurrency 的演講裡面就有很多這方面的例子,另乙個活生生的例子可以參看一下 andrei alexandrescu 的這個演講: systematic error handling in c++,看看 lambda 是怎樣使得 scope guard 在 c++11 裡的實現變得這樣簡潔與實用。說到 scope guard,如能靈活地使用起來,這東西的確在很多時候可以使得程式的控制流更直接更可讀,看看 andrei 在 cppcon 上的這個演講。

對於模板,變長引數的加入極大地簡化了模板元程式設計,以前很多需要使用許多死板的巨集技巧才能實現的功能,現在已經可以很輕鬆地用 variadic template 來實現了, 這裡有乙個入門的教程,andrei alexandrescu 也在這方面有乙個演講(這個題目怎麼少得了他):variadic templates are funadic,andrei 的演講無論是內容還是風格一如既往讓人傾倒,鼓勵大家前去圍觀。除了變長引數,c++11 中也加入了一系列其它的模板基礎設施,比如更加豐富的 type traits, sfinae 等,c++ 委員會裡一位資格極老的成員 walter brown 在 cppcon2014 上作了乙個這方面的演講,不過這裡面主要側重在 sfinae 了。

說到模板,回想起一年前使用 boost spirit 和 boost proto 所經受的徹底洗禮與摧殘,現在仍覺受益匪淺,我覺得喜歡搞模板的人不嘗試一下 expression template, 不玩一下 proto 那他的人生是不完整的,cpp-next 有 proto 的作者 eric niebler 寫的一系列文章:expressive c++(如果打不開,嘗試這個備份的映象,十分值得一讀,如果讀了一兩遍沒搞懂,沒關係,多看幾遍,你可能會發現還是沒完全搞懂也不奇怪, 看過這一系列文章,如果你還有興趣,cppcon2014 上還有乙個更好玩的,hana: expressive metaprogramming,enjoy.

最近在 cppcon2014 上發現了乙個挺有意思的專案,也是和模板相關的,sqlpp11,這個專案利用 expression template 在 c++11 基礎上實現了乙個 sql library,創意程度直逼 boost spirit,關鍵是,它相當地實用,因此實在值得學習借鑑。

最後是關於 functional,是的,functional programming,一聽就高大上,buzzword 火熱如同當紅炸子雞,functional programming via c++ 也許有點牽強,functional programming via c++11,看起來卻有所不一樣了,practical functional programming,看看別人都在想什麼都在玩什麼。。。其實話說回來,這些都不新鮮,boost 庫中相關的庫 fusion 和 phoenix,已經存在很長一段時間了,只是你關注到了沒有而已。

其它未完待續

todo

技術練習相關資源收集

2 待定 game of hacks 通過遊戲答題等方式,學習web安全相關技術和基礎知識,需要足夠的英語支撐,需要php的基礎 這個 中存在大量的安全漏洞,專為那些剛開始學習web應用安全的新手而設計,該 的目標主要有以下三個 學習黑客是如何找出安全漏洞的 學習黑客如何利用 漏洞來實施攻擊 學習如...

JeffChen C 技術相關鏈結整理

jeffchen c 技術相關鏈結整理 2012年9月29日 jeffchen msdn,windows的c 開發手冊 gnu的c 手冊 非官方的c 標準庫手冊,寫 的時候這個網頁就開著吧 stackoverflow上關於c 的faq com.lang.c 上的faq unix系統的api goog...

C 學習 01 資源整理

本系列文章是對c primer 第五版學習的相應的學習記錄 c primer 5th answers來自github上的兩個鏈結,粗略看了一下,答案其實是同一套。c primer 5th book example codes download the source files for gcc 4.7...