由装逼造就的毕业设计

今天进行了毕业设计项目的最后测试,不想再进行修改了。然后,开始回忆关于毕设的一切,发现这是一条由装逼造就的路。

我的毕业设计项目是用C语言实现一个Scheme解释器(当然,最后我也只是简单地实现了基本功能框架而已)。第一次接触LISP编程语言是在大三第二个学期。当时想学习在Linux下进行C语言编程,需要选择C语言代码编辑器,最后选择了emacs编辑器(选择emacs是第一件装逼的事!传说世上有三种程序员:一是用vim的,一是用emacs的,还有一种是用其他编辑器的。另外通过自定义配置后的emacs界面可以相当地华丽,而通过emacs的快捷键可以达到码字如飞的操作,emacs可以说是程序员的一大装逼利器)。emacs可以通过自定义配置进行功能扩展,而emacs的配置语言是LISP语言的一个方言Emacs LISP。为了更好的装逼,我开始看一些LISP在线教程,当然最后也只是了解了个大概。记得当时看到某个帖子说某个大牛的本科毕业设计就是自己动手写一个LISP语言的解释器,于是觉得这件一个很装逼的事,我的本科毕业设计可以考虑这个。

大三暑假时,我去深圳某公司实习两个月。实习结束后,回到学校就到了每年一度的校园招聘,我开始投身到各个宣讲会、笔试和面试现场。在这半年的时间内,我没有再学习过LISP。到十二月份的时候,工作搞定了,闲着没事干了,开始考虑毕业设计的事了。因为经常和陈林老师一起踢球,比较熟,便进了陈老师所在的研究组。陈老师给了我两个关于程序分析方面的题目,看了几篇陈老师给的论文,感觉很头疼!于是,半年前那个装逼的想法又再次浮现在我的脑海中,便提了出来,陈老师也没有反对,毕设题目就这么定了。

要写一个LISP解释器,需要选定某个LISP方言。正好那段时间正看着Paul Graham著的《黑客与画家》,于是选择了Common Lisp,便上网下了Common Lisp的教程,结果都是英文版的,而我的英文又不好,只能硬着头皮一点一点地啃吧(装逼是需要付出代价的!)。结果学习了半个月左右,发现Common Lisp不是一般的庞大,太复杂了,伤不起!于是,开始转向一个非常小的Scheme语言,所幸基本语法相差不多。但是这时已将近寒假,于是只能带着scheme的语言标准R5RS和两本书(《程序设计语言》和《计算机程序的构造和解释》)回去慢慢啃scheme的语法。

经过一个寒假的学习,终于对scheme语言有了点一定的了解。在《计算机程序的构造和解释》的第四章中介绍了用scheme语言本身来实现scheme解析器的实例,第五章又有用寄存器语言实现scheme解释器的框架实例。于是我就想,如果我按照这上面的实例来实现,那我的毕设也太水了,我便决定用C语言根据自己的设计来实现scheme语言的解析器(又装逼了!)。

万事开头难!开学后的前一段时间,我只是在查资料,看书,构思,完全没有开始写代码的心,不知从何开始,似乎也没有准备好,于是就拖到了三月中旬。3月11日这天是星期日,由于中午的足球比赛取消了,闲着没事,下午便到机房开始写代码,那天实现了一些基本的数据结构。之后就按照自己的想法,写一写,改一改,不知不觉就到了三月底,解释器的框架已完成,并且可以顺利地解释执行一些简单的scheme语法结构,但是在进行垃圾回收时遇到了一个很严重的Bug(设计问题:对中间临时对象的管理问题),徘徊了几天都没找到好的解决方法。

不幸的是,在29日这天中午踢比赛,结果摔了骨折,动了手术,住了院。修养了两周后,恢复毕设工作,重新思考之前的错误,发现只有重新设计,将代码从头改一篇才能够解决。徘徊一天后,开始从头设计,从头修改。带着伤,不能长时间码字,修改了好几天方完毕,最后当然顺利解决问题。于是添加了几个scheme的语法结构的解释执行以及尾递归的处理机制,便草草结束了我的毕设项目。

最后,我的毕设就是这样由装逼造就出来的。不过,没本事装逼真的很累!

posted on 2012-04-29 22:23  lienhua34  阅读(2083)  评论(10编辑  收藏  举报

导航