天天看点

读代码有感想……象读小说一样读代码

读代码有感想____

很久没有写博客了。今天吃完早餐,早餐有猪脚吃,吃了丰富的早餐,正在消化之时,心想,写写博客吧。

最近还是在陆陆续续的读代码,我发现一个秘密,就是象读小说一样读代码,先把代码通读,然后再选择感兴趣的点,慢慢看。而且看不懂,也没什么,就象读小说,有些小说,你看不明白,那还能怎么样,换一本小说,再读。或者,等有机会再重读。而且读小说时,你也不会向人吹,说自己看了多少本小说,读小说,就象别人看电影一样,有什么好吹的,只是一种生活方式而已。

我把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的使用,再读源码,就更快些了。

于是,我又有个感觉,这个读源码,首先是不要害怕。要坚信,别人能写出来,就一定是可以理解的。再慢慢读,功夫到了,自然就理解了。