2001-11-24
时间过的真快呀,今天都周六了。周六是个令人高兴的日子,因为终于可以白天和别人说话了。以前总觉得上班的路太远,耽误了大量的时间。现在可好,从卧室走到书房就算是上班了。不过感觉却糟糕透了。
今天令我高兴的另外一件事就是程序发展的很顺利。符号表构造得非常顺利,我甚至认为它非常精巧。不过它也花费了我7个多小时的时间。在设计这个符号表时,我以前分析GNU C编译器的符号表的经验帮了我的大忙。构造一个符号表时使用C++语法和class的用途并不大,因为主要是指针操作。关键在于内存管理和结构之间的逻辑关系。GUN C编译器中的OBStack是我见过的最好的符合符号表特性的数据堆管理系统,真是非常非常值得研究研究。很多人都认为C语言中的宏是非常糟糕的东西,往往令人晦涩难懂。但我认为这正是C的精华,它提高了C编程的扩展性。我看过很多人用C或C++编写代码,总是定义结构后没完没了的指针操作,当结构发生变化后就是到处修改。如果使用宏问题要简单的多,而且使用宏的时候操作的是逻辑而不是指针。
在这里我想提一下我在程序设计中的一个最基本、最常用的设计思想:程序结构的冗余层。我见过的很多程序员在写程序的时候都有一种现象:确定目标,直接进入编程。我认为这是一个非常不好的习惯。很多人都用过Delphi写数据库,把原始控件直接放到Form上,这很简单,但也很不明智。我在使用Delphi写程序的时候,总是要把所有使用过的Component继承后生成custom component,然后使用这些custom component。原因只有一个,在需要一动而动全局的时候,我给自己留了一个时机。上面所说的宏很可能就是这样一个时机。头些天我提过我做了一个项目,这个项目是对一个已经存在的大型数据数据库的扩展。由于我必须使用原有数据库的数据字典,我创建了很多view。当我按照需求和数据字典完成工作时,实际使用方说这样不符合平时业务流程。这时我面对着修改数十个模块的任务。我突然想到可以通过修改一个关键view解决这个问题。该了view后一切ok。在庆幸我使用的是view的同时,我告诫自己永远不要放弃这样一种时机。
符号表作为ITypeInfo的本地化表述和Catch实现后,我面对的是大量的图形编程。这真是令人讨厌。我不知道别人是否有这样的感觉:在对数据编程时可以狂奔数百行,而且轻松调试;但对UI编程时却令人昏昏欲睡。我觉得我对Windows UI编程永远是个新手,我每每总有不知道、不清楚的地方。Windows UI API真是太TMD庞大了。不过,我也有我的办法:抄袭。对Window UI编程我往往要抄袭Delphi。Delphi的VCL源代码库真是非常经典。如果没有VC的Demo可借鉴,那么Delphi的VCL源代码库永远是最好的借鉴对象。在这两天中,我要写一个Popup ListBox,就是下面图片中看到的那个。代码很少,但非常晦涩,为了完成的完美还需要一个Hook(我希望有人能告诉我一个不用Hook的办法,真诚感谢)。为了这个Hook还需要管理一个CHandleMap。非常头痛。我以前在大量使用ComboBox的时候,还真不知道这个东西这么讨厌。
剩下的就是管理property的Get和Put问题,在符号表的帮助下,这倒不是个问题。明天的工作是标准化、归类化属性类型及其Get和Put操作(以后我就不再需要和它打交道了)以及实现自定义property Editor的动态挂接接口。
![](/images/load.gif)