天天看點

讀代碼有感想……象讀小說一樣讀代碼

讀代碼有感想____

很久沒有寫部落格了。今天吃完早餐,早餐有豬腳吃,吃了豐富的早餐,正在消化之時,心想,寫寫部落格吧。

最近還是在陸陸續續的讀代碼,我發現一個秘密,就是象讀小說一樣讀代碼,先把代碼通讀,然後再選擇感興趣的點,慢慢看。而且看不懂,也沒什麼,就象讀小說,有些小說,你看不明白,那還能怎麼樣,換一本小說,再讀。或者,等有機會再重讀。而且讀小說時,你也不會向人吹,說自己看了多少本小說,讀小說,就象别人看電影一樣,有什麼好吹的,隻是一種生活方式而已。

我把gawk的源碼,又翻了一下,發現我不了解的地方有兩個,一個是正規表達式,這個可以不了解,隻要會用。

另一個是,詞法翻譯的程式,沒有用工具。是手寫的。

還一個是,文法樹。解析文法樹的過程不懂。

其它的都還是很好明白的。而且,把awk1.c,awk2.c,awk3.c等幾個檔案,慢慢的讀,每次一定要從頭翻到尾,發現,居然慢慢的了解了。哈哈。

于是又慢慢看ruby0.49,我編譯不成功。有次,湊巧在ubuntu上編譯成功了,但就是執行時,報核心轉儲錯誤。于是,我也不想着去編譯了,就慢慢的讀。

象array,string,hash,range等幾個子產品還是能讀懂的。我也沒有刻意的想把每個點搞明白。象讀小說一樣,先把主要人物搞明白。

象array.c,我慢慢翻,把程式實作的功能,再在irb下試驗一下,知道了程式要解決的問題,再慢慢看實作,發現有些眉目了。

不過,我很迷惑的是,代碼塊是如何實作的呢?象

3.times { puts "hello"}

這裡,如何實作塊?發現作者的寫法好象和ruby一樣,也用了yield之類寫法。象

def ha

    yield

end

ha { puts "hello"}

那究竟如何,把塊當成匿名函數來實作的呢?這裡沒看明白。

看代碼時,發現對ruby還不熟悉,有些功能不會用,于是反過來讀ruby的說明文檔,因為說明文檔時英語,我的英語不好, 總感覺讀英語太慢了,不如讀中文快。但發現,比起讀代碼來,還是讀英語比讀代碼更快了。于是,又讀ruby1.8的說明文檔,發現也能看懂一些。

讀懂了ruby的使用,再讀源碼,就更快些了。

于是,我又有個感覺,這個讀源碼,首先是不要害怕。要堅信,别人能寫出來,就一定是可以了解的。再慢慢讀,功夫到了,自然就了解了。