2018年8月24日

[C++] Lazy Evaluation for Function Argument

C++ 的 function call 在傳參數進去時基於一些因素會把所有參數都拿到最後的結果後才進入 function 本體去執行。比方說,傳進去的參數是一串四則運算時,會先算出最後的結果;如果也是個 function call,那也會先把 function call 執行完畢拿到結果。

在某些情況下如果我們知道其實進入 function 後根本不會用到這些參數的內容時,做這些計算其實就會變成浪費時間了。因此,最容易想到的解法是,有沒有辦法把這些運算的過程延遲到我真的需要時才讓他執行?

2018年8月21日

[C++] Use std::condition_variable for Parallellism

C++11 開始 STL 就提供了 thread library以便寫平行化的程式,condition variable 簡單來說就是用來控制流程用的,他允許我們在過程中透過 condition variable 來決定是否要 block 某個 thread 等待另一個 thread 完成工作,也可以透過 notify 去讓一個 (或多個) 正在等待 thread 繼續往下執行他們的工作。

2018年8月9日

[C++] Compile-Time if in C++17 Can Have Code Not Able to Be Compiled with Regular Runtime if

Compile-time if 在 C++17 中也算是一個滿有趣的特色,其特點就在於能夠在 compile time 就幫你確認清楚 if statement 中會執行到哪一個判斷式對應到的區塊,從而把其他一定不會用到的區塊 "拔掉"。這點在現在電腦上算是個滿有用的特色,畢竟現在 CPU 的 branch prediction 一定錯誤通常都要承擔不小的後果 (註) 

原本我以為 compile-time if 只是針對一些能在 compile-time 就能推知結果的運算做優化 (特別是在 template 上),結果今天看到一個例子才發現這玩意兒比想像中更猛,甚至能夠寫出一些原本 regular runtime if 做不到的功能。