gcc 有很多強大的選項,可以讓我們作到一些特別的事情。假設我們希望每次呼叫函數前,都先執行特定的動作。我們可以這樣寫。
2013年8月8日 星期四
在 C 語言中,發生錯誤時,顯示 backtrace
在很多語言中, 如 python, java 等,當程式遇到錯誤時,他會顯示 backtrace( 就走到目前函數位置的呼叫流程)。在 C 語言中,預設只會出現錯誤訊息,就沒了。
不過在 linux 下,你可以使用 catchsegv 來顯示程式錯誤時的 backtrace。用法大概向這樣
不過在 linux 下,你可以使用 catchsegv 來顯示程式錯誤時的 backtrace。用法大概向這樣
catchsegv ./a.out
2013年7月6日 星期六
python 的 gc ( garbage collection) 演算法介紹
最近無聊看了一下 python 的 garbage collect 的實作。還蠻簡單易懂的。 python 回收沒用的物件,主要是靠參考計數 (reference count)。然而,他無法解決自己參考自己或是參考循環(a 參考 b, b 參考 a)的問題。這篇文章是講 python 如何解決這個問題。
2013年6月15日 星期六
在 python 中呼叫 java,JPype 簡介
之前我以為如果要在 python 中呼叫 java lib ,只能用 jython。然而查了一些資料,發現有些神人已經幫我們做好在 CPython 中呼叫 java lib 的方法,JPype 可以幫我們完成這個神奇的需求。
2013年6月9日 星期日
以 html5 撰寫 單機(離線)程式,以 pyside 與 qwebkit 為例。
現在 html5 蔚為潮流,而 html5 也將觸手伸向單機程式。新的 html5 技術可以使用 ApplicationCache 來達成。而 XULRunner 又是令一個技術,讓你可以用寫網頁的方式來寫單機程式。用 pyside 加上 qwebkit 也可以達到類似的應用。事實上,pyside 加上 qwebkit 的作法不過是作個客製化瀏覽器而已。
2013年6月2日 星期日
2013年5月8日 星期三
python 中 is 和 ==(等於) 的差別
在很多程式語言中,相等的意義有兩種意涵,一種是指那兩個變數實際上是指向同一個物件,另外一種意涵是雖然他們不是相同物件,但是他們的值一樣(什麼叫做值一樣,可以自己寫函數定義)。在 java 中,我們用 == 還比較這兩個變數是否指向相同物件,而使用 object.equal(other) 還比較兩個變數物件的值是否一樣。 在 python 中,則是使用 is 這個關鍵字來判斷這兩個變數是否指向相同物件,而使用 == 來判斷兩個變數物件的值是否一樣(值是否一樣由 __eq__ 這個函數定義)
2013年5月4日 星期六
generator 和 list 簡單比較
這篇文章我第一次發表在 ptt.cc。之後在把它複製過來。下次應該先寫在網誌,在貼 ptt.cc 的 XD
python 的 list comprehension 有分兩種,
一種是[i for i in xrange(5)],這種形式產生出來的是 list
另外一種形式是 (i for i in xrange(5)),這種形式產生出來的是 generator
python 的 list comprehension 有分兩種,
一種是[i for i in xrange(5)],這種形式產生出來的是 list
另外一種形式是 (i for i in xrange(5)),這種形式產生出來的是 generator
python yield 語法與 generator 物件介紹
這篇介紹 yield 語法以及用來維護 yield 行為的 generator 物件。
事實上,yield 和 return 很像,只是當函數呼叫 return 時,該函數 call stack (python 中是 frame) 就會被清除,程式主導權回到呼叫該函數的手上。 而 yield 會把程式主導權交給呼叫該函數的手上,但是他不會把函數的 call stack 清除,因此下次呼叫時,可以從上次未執行的部分開始執行,而不是重新建立一個新 stack。
事實上,yield 和 return 很像,只是當函數呼叫 return 時,該函數 call stack (python 中是 frame) 就會被清除,程式主導權回到呼叫該函數的手上。 而 yield 會把程式主導權交給呼叫該函數的手上,但是他不會把函數的 call stack 清除,因此下次呼叫時,可以從上次未執行的部分開始執行,而不是重新建立一個新 stack。
訂閱:
文章 (Atom)