代码生成器技术乱弹六,编译器在拈花微笑

        到底什么是代码生成器,如何驱动代码生成器?这个问题不能一概而论,各家的做法也很不一致。有使用XML的,有使用JSON的,有使用SQL的,更多的,是采用图形界面操作的,定义数据对象,定义施加在这些操作对象上的各种操作,有时非常繁琐,有时非常易错。在我得到的唯一付费的代码生成器研发工作期间,我被授命开发一种"无码开发“的代码生成器。

        我的看法是,代码生成器是一种生成力很高,但是表现力受限的编译器。和大多数代码生成器一样。动词算子式代码生成器也是基于模板法的。但是如果您研究过这些代码生成器,您可以发现,它们是一种数据中心的代码生成器,不需要定义施加在数据即上的操作,只需要定义数据,也就是域对象,和域对象之间的关系,即可生成一个可以运作的系统。而且,不同的动词算子式代码生成器的架构很不相同,大概有近10种不同的架构。但是这些代码生成器支持的标准生成器脚本(SGS)却十分相似,在很多情况下,您只需要修改一下项目的technicalstack字段,比如从smeu改成jeeu。生成的代码就从Spring, Mybatis变成了html5,JDBC的了。

        为什么是这样?其实也很简单,这是编程的普遍规律。使用代码生成器的动机是什么,当然是省力。如何才能省力,当然是使用的工具高级。我有一比,在使用高级语言之前,程序员们使用的是汇编语言。工作量之艰巨叫现代人抓狂。据说,苏联人使用汇编语言编写了他们的巡洋舰的驱动代码110K,这是一个壮举,但也是成本高昂的。为啥汇编语言这么难写,易错,不易调试?我认为是其中的细节太多了,一种语言表现力越强,功能越强,其运用的难度,学习的难度,必然提高。就像一个雕塑家雕一座雕像,他必然是先用斧子,锤子等重工具把石头大致砍成基础的形状再使用刻刀的。在汇编语言时代,程序员就是面临着使用刻刀雕刻一尊雕像的烦恼。而代码生成器就是程序员的开山斧,是程序开发初期的利器。

        所以,代码生成器必须比高级语言生成力更高,否则,您为何要使用它呢?有没有办法?也很简单,约定优先于配置,简化关系的描述,最重要的,就是数据驱动,把程序对操作的描绘,尽可能省略掉。我对此的理解是,需要使用一种生产力比高级语言高10倍乃至于100倍的超级语言驱动代码生成器,代码生成器才有真正的意义。现在动词算子式代码生成器使用的是一种称为标准生成器脚本(SGS)的自定义语言,非常简略和高效,并有可以使用与此种语言等效的Excel模板来生成代码的选项。

        超级语言还是一种编程语言,还是跳不出编译器的五指山。所以,编译器在拈花微笑。 

        希望上述文字解答了对代码生成器感兴趣的同学们的疑惑。如果您对动词算子式代码生成器感兴趣,请参考以下链接:

        https://gitee.com/jerryshensjf/InfinityJEEEU

        https://gitee.com/jerryshensjf/InfinitySimpleJEE

        https://gitee.com/jerryshensjf/PeaceWingSMEU

        https://gitee.com/jerryshensjf/InfinityGPGenerator

猜你喜欢

转载自my.oschina.net/jerryshensjf/blog/1822280
今日推荐