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
這個技巧賦予我們在寫程式時更方便與安全的方法


2013年11月2日

[程式] 遞迴只應天上有,凡人應當用迴圈

這句話的原文是這樣:

To iterate is human, to recursive, divine!

recursive 確實可以讓一些演算法變得更加簡潔
但要如何理解一個遞迴的做法確實有點違背普通人的思考方法
(不知道這有沒有心理學相關的實驗可供證明?)
只是對於一個資訊人來說,這確實是個必備的技能
因此如何理解一個遞迴式,甚至教導別人理解確實是個難題


2013年11月1日

[隨筆] 是否要念博士班? It is a good question!

雖然現在別去念博士班似乎是個共識,但依然會有有志之士(或是傻子)去念
不然教授們就沒有苦工可以分擔工作了
會去念的人其實依舊不算少,只是相比以往確實是少了很多
但不能否認的是:念博士班的機會成本很高
所以現在沒什麼人要念是很正常的
但就算如此,因為不知道自己要什麼,所以繼續往上念的人我相信也是有的
在這漫漫長途,不一定可以馬上看到結局的路途上
究竟是否要踏上旅途,我想這確實是個要好好思考的問題


2013年9月16日

[生活] 喝酒與品酒

喝酒的人分兩種:單純的喝,與認真品嚐在酒液中醞釀構築的世界
對我來說,單純的喝是一種輕鬆的享受
認真的品飲是對釀造者的一種尊重

2013年9月12日

[隨筆] 旁觀者

從以前就有種感覺,我好像不易於被周遭環境的氛圍所感染
或者明確一點的來說:只有我感興趣时周遭環境才對我有影響
這造成的結果是,對於周遭的環境
大多時候我是抱持著旁觀者的角度的
換個說法,也就是所謂的 "看戲"