|
发表于 2007-7-11 19:30:44
|
显示全部楼层
Fcitx的为什么死的?内因是什么?
ccpaging之所以不道歉,是因为ccpaging在qq群里边指出的错误,不是Fcitx的全部,存有私心:“不告诉你BUG在哪里?让你笨死!”,而且只是“授人以鱼,没有授人以渔”。
1、找出的BUG是什么?为什么它如此严重?
C语言最重要的特性就是指针,真是成也萧何,败也萧何。可以这么说,有指针的地方就有内存泄漏的危险。
防范指针问题的主要方案,就是边界检查。而在这个BUG中,恰恰就是没有边界检查。而且,不是程序员不小心,也不是忘了,而是没有认识到。问题严重性,就是在于没有认识到。
令ccpaging纳闷的是,如果这个问题在程序设计之初,就有人站出来当头棒喝,就不会出现现在几十万行代码需要检查的不堪局面。
2、设计方法的问题
GPL和Linux的本意不是free,他对于程序员而言,是一座金矿,那就是大量的源代码。所以GPL和Linux改变的不仅仅是linux程序员的工作方法,实际上改变了所有程序员的工作方法Unix, Windows。因为,不需要事必恭亲了。
现在的程序员在设计一个课题,最先应该做的是什么?找源代码。都听说过这样一句话:“站在巨人的肩膀上,你能看的更远”。事实上,已知BUG出现在一个读取配置文件的地方,功能很简单,就是删除字符串的尾部空格。google一下,无论是读取配置文件,还是删除尾部空格,范例也好,从别的软件包里边择出来也好,比比皆是。
如果当时是拷贝一段源代码来研读,一定可以避免这个问题。而且,能避免以后出现的类似问题。
这也是ccpaging说yuking会特别累的原因,重复劳动是程序最害怕的情形之一,因为它没有成就感。
3、全局变量
这时ccpaging没有在群里边提到的。看看代码,几乎每个C语言文件的全局变量是如此之多,而函数调用参数又是如此至少。这是一种图省事而不计后果的做法。
原则1:永远不要为2-3个函数共用的变量设置全局变量,如果能参数传递,就应该参数传递。
原则2:增加函数的时候,多花少许时间,仔细规划参数,可以帮设计者明确函数的功能。使设计者知道何时分,何时合,这样可以把功能相关联的函数放在一起,可以避免代码的复制拷贝,可以避免大杂烩函数。而且,变量名也简单的多。
这就像一个电工在房子里边拉电线,开始不规划,做到哪里,电线拉到哪里,最后这个房间会变成什么样?
就说这三点吧,也算是没有白白花时间去读代码,希望对后来者会有所帮助。 |
|