[open source]gclassfactory 发布

gclassfactory发布

 

转载时请注明出处:http://blog.csdn.net/absurd/

 

gclassfactory是一个代码产生器,根据类的描述信息产生gobject代码,思想源于D-BUSdbus-binding-tool-glib,有少量代码也源于此。之所以要开发gclassfactory,主要原因有:

 

1.         Glib无疑设计得很精致,但要写一个gobject子类却比较累,要定义一大堆宏、要安装属性、要创建signal等等,完全是体力活。单调重复必有规律可循,有规律可循就可自动产生,这是我一贯的思路。

2.         尽管接触glib有几个月了,但有些部分仍然理解得不够透彻,使用得也不够熟练。写gclassfactory目的之一,就是利用glib这一套来做个实际的东西,以便加深对glib的理解。

3.         这段时间在研究ORM。我希望到时候,ORM的代码可以自动产生出来,所以先写一个研究性的代码产生器,了解其中可能存在的问题,ORM代码产生器可以在此基础上扩展。

4.         autoconf配置软件包。以前只是用autoconf去配置编译别人的软件包,没有在自己的软件包使用autoconf,所以借此契机学习一下autoconf

 

gclassfactory像大多数代码产生器一样,基本模式是管道-过滤器(Pipe-filter),从类的描述文件到中间表示,再到实际产生的代码。为了便于扩展,gclassfactory完全是插件式设计的,框架部分只有少量代码,其它绝大部分功能都通过插件扩展,由于时间所限只实现了几个简单的扩展:

 

1.         不限制类的描述信息格式。可以是XML格式的,可以是IDL格式,也可以是其它任何格式的。每种文件格式对应一个插件共享库,在运行时通过命令行参数指定,这个插件共享库的功能就是把文件读到内存中,用中间格式表示出来。这类插件称为loader,要求实现loader接口。目前只实现了XML格式的。

2.         不限制产生的代码。你可以用它产生gobject子类的代码,可以用它来产生测试程序,也可以用它来产生ORM的代码。每种代码产生器都是一个插件。在运行时通过命令行参数指定,这个插件共享库的功能就是把中间格式转换成目标格式(即产生的代码)。这类插件称为coder,要求实现coder接口。目前只实现了gobject子类代码产生器。

 

由于完全是利用周末时间写的,已经占去两个周末了。没有时间花太多精力在上面,代码仍然有些粗糙,没办法,暂时先告一个段落吧,等到写O/RM时再优化。

 

 

修改历史:

2006-5-6 0.1 创建

2006-5-18 0.2

a)         增加产生注释的功能,注释的格式为gtk-doc格式。

b)        允许定制文件头的内容。

c)        修改了一些BUG

2006-5-24 0.3修改了一些BUG

2006-5-28 0.4 修改了一些BUG。这段时间开发桌面模块,用它产生了十几个类,在使用过程对它不断完善,目前gclassfactory仍然有些缺陷,但基本上可用吧。

2006-8-24 0.5 修改一个关于signalBUG

2006-8-27 0.6 修改一个关于disposeBUG

 

有兴趣者可以在这里下载

 

 

你可能感兴趣的:([open source]gclassfactory 发布)