2014年3月5日

[C++] Exception Safety & Guarantees

Exception Handling 是個大學程式設計課通常會教,但不會著墨太深,卻又很重要的東西之一。一般課程關於 exception handling 的部分通常在講解完該語言如何使用 exception 之後就差不多結束了,但是 exception 的重要性卻完全沒有被涵蓋其中,一般作業上也很難出到可以讓同學理解它的重要性何在,何況在僅講究有寫出來就好的作業/project 等情況下,即便是個適合使用 exception 的場合也多半不會使用,是以大多數沒有自行鑽研的人是不太了解的。這篇是來簡單淺談 C++ 的 Exception Handling 中的 exception safety 與 exception guarantees,內容主要參考自 Effective C++More Effective C++ 以及 Exceptional C++。書中會更深入探討這部分,有興趣的人可以自行參閱。


2014年3月4日

[品茶] 茶帷-爾利亞春夏摘大吉嶺品飲心得

在某次茶友來找我泡茶時,因為聊到了素有茶中之香檳的大吉嶺在臺灣手搖飲料店其實相當的普遍,不過若想買到大吉嶺的茶葉其實沒有想像中的容易。大吉嶺因為只有在印度原產地出產的才能叫大吉嶺,換言之它是個只有進口才喝的到的茶。若是想喝到品質較好,也勢必需要找到有信譽的商家購買,在一開始時其實我是完全不知道要去哪邊找大吉嶺的茶葉的。後來網路上搜尋、茶友推薦後得知了三家店:PEKOE綠碧茶帷,這才開始探訪大吉嶺的奧妙。

2014年3月2日

[品茶] 綠碧 - 夏摘與秋摘大吉嶺

 大吉嶺,這個我們常聽到的紅茶名稱其實是印度的一個地名,可以參考 [1] 的地圖。那邊出產的茶因為其特殊的地型與氣候而有著迷人的風采,一開始所生產的茶葉是專門輸出給英國的,後來因為屢次得獎出名後也行銷到全世界了。大吉嶺紅茶的迷人風采來自於獨特的氣候環境,只有那邊所生產的紅茶才有資格叫大吉嶺紅茶,也有茶中之香檳的美稱 (價格也像香檳一樣不斐)。

[生活] 品味生活,從屏除一切靜下心開始

開始品茶品酒已經快 3 年了,最一開始其實只是很簡單的喜歡的一款茶,或是嚐到覺得喜歡的酒,沒有深入的研究,也沒有真正的了解過。真正開始學著去了解一款茶、一支酒是從葡萄酒開始,它帶著我進入了一個我從未接觸過的世界與交際圈,開始學著怎樣去了解所謂的 "飲品" 是什麼樣的概念與藝術。

2014年2月18日

[C++] rvalue reference & implementation class

之前在這篇文章有簡單的聊過 rvalue reference 這東西,當初標準會定義這個簡單來說就是為了效能,特別是 C++ 常常會暗地裡幫你做了一大堆你根本沒想到的事情,因此善用 rvalue reference 可以促使 compiler 提升程式的整體效能 -- 特別是避免無意義的複製這方面。

這篇主要是談 rvalue reference + implementation class 的結合可以產生什麼樣的效果,在 C++,由於 header file 必須定義好 class 的 declaration -- 包含使用者不需要知道的 private members,因此創出了 implementation class 這東西負責撰寫並處理原始 class 要做的事情,而要公開的另一個 class 就只有一個 private member 是 implementation class 產生的 object,而 public member 就是 implementation class 的 public interface。這個小技巧原本就如同前面所說,只是個用來 client 不會看到不用知道的東西,除此之外確實是沒什麼效果,但是 rvalue reference 的出現讓這個效果可以有提升效能的作用。

2014年2月9日

[C++] Type Erasure (型別抹除) - A Technique of Behavior Abstraction

    其實我真正要寫的是這篇XD 只是剛好有例子會用到 Functor,所以就順道寫了那兩篇 functor 的介紹。Type erasure (後面都會簡寫成 TE) 其實不算是 C++ 語言中的特性,應該算是一種技巧,用來避開 C++ 在編譯過程中型別檢查造成的麻煩 (所以才會叫型別抹除)。這項技巧其實在 C 也有,只是 C++ 因為引入了 OO,所以 C 的型別抹除技巧不能完全套用在 C++ 上,就如同 qsort 在 class 上會撞牆是一樣的情況 [2]。另一方面,C++ 因為有了 template 可以使用,所以這項技巧可以有了更好的發揮空間。同時,TE 也扮演了 template 跟 OO 之間的接合劑 (聽起來好像有點奇怪...) [3]。一個最顯而易見的例子就是 std::sort 的第三個參數就是運用了 TE 的技巧,所以他可以吃進任何可以像 function 般操作的東西,而不管你扔進來的東西的型態為何。

[隨筆] 博士的訓練

曾經有人這麼跟我說過:
如果你直接繼續念博班,那麼你就是拿你人生最精華的時間去做一場極大的投資
也有人這麼跟我說:
所謂的讀博士,就是拿你人生最精華這段時間,用來讓自己在各個方面都準備好 面對各種挑戰,在自己的領域中補足自己所有缺乏的部份,當你從博士班畢業的時候, 就可以從容的應對各種困難
以前我難以理解所謂的 "所有" 缺乏的部分,現在我知道這句話的來由。也因此我慶幸我遇到了一個對我來說對的指導教授,只是這場極大的投資何時能回收還要再過好幾年才能知道

2014年1月20日

[C++] type function

前陣子看到一個有趣的資料結構叫 pairing heap,單純看複雜度來說比 fibonacci heap 高
不過 pairing heap 的操作很簡單,所以複雜度的 constant 不大
是個頗吸引我的資料結構,所以這陣子有想要自己實做,然後試著做成像 STL 那樣的架構
一研究下去發現,STL 果真是集工程師智慧之大成,一大堆看不懂的技巧在裡面Orz

這篇是記錄之前看不懂得其中一樣設計:type function
這幾天翻書翻到才搞懂這設計的意義為何

2014年1月8日

[C++] Functor (仿函式) - A Function-Like Object PART II - The Use of Functor

PART I 時我們簡單的介紹了下 qsort,並且說明了在結合 OO 時將會遇上一些問題,現在就讓我們來看看會遇上怎樣的問題吧!


2014年1月7日

[C++] Functor (仿函式) - A Function-Like Object PART I - Start From qsort

Functor 簡單來說就是具有 function 功能的 object
因此 functor 讓我們可以像是呼叫 function 般的去使用一個 object
這個技巧賦予我們在寫程式時更方便與安全的方法