把代码看成一种文本,解析这个文本,生成数据结构,然后重新计算遍历,统计,生成新的代码,就是代码生成。
随着业务的扩展,需求的增加,代码量的扩张是不可避免的。为了能不断满足新的需求,就要不断用新的抽象降低项目的复杂程度,以便能让普通程序员进行维护。
总的来说,新的功能是旧的功能的叠加和演化:如果旧功能是函数,那么新的功能就是利用这些函数,生成新的函数。所以有人说:项目的扩展,就是在写一个 Lisp 语言的解释器。
只有将代码当成文本处理,才能让用代码描述的项目成为可以任意扩展的东西,否则,利用代码语言本身的各种模式,很难能大幅度降低项目的复杂程度。
所以,不断用新的语言,描述项目的需求,是保持项目扩展的最好途径。
那么,普通项目如何成为一个语言解释器呢?答案是不断设计代码生成器,用更抽象的描述,保持项目的可维护性。
代码作为软件企业的资产,有特定的运行环境,特定的应用场景,当有新的需求,新的环境,代码的可用性会大打折扣,因为运行的环境可能不同,版本可能会发生变化,这个问题怎么解决呢?
就是把代码标准化,让代码尽可能和语言无关,尽可能和环境无关,只是单纯的算法,这样在不同的语言环境中就可以增加可重用性。