一步步前进的重要性(兼谈编译器的自举)

     这一段在一段代码的基础上开发一个增量的小功能,在过程中总是忍不住不成熟程序员的习惯冲动---不由自主地进行东一优化、西一棒子,到最后增量的小功能联调就卡壳的时间比较长。因为修改地方比较多,分辨不出来到底是优化的代码出现了问题,还是增量功能的代码出现了问题。由于当时此功能ld催的又很急,但是却又交不出来,当时那个后悔啊。。。。,悔不该如此费时费力。

   痛定思痛,想到了编程语言和编译器技术中“自举”,其实也是一个增量开发,尽量先保证正确性,后来通过多次自举,编译出来一个成熟和稳定的编译器出来。

  它的过程是这样的:我们先假设,利用一门已经存在编译器的语言,如果不存在的话,恐怕要第一次手工劳作了。但通常从历史发展来看,即使是手工劳作,最开始的语言一般都较简单,即使手工机器代码直接编写出编译器程序,也不是件非常难的事情。因为是机器代码,首先是程序,也是直接可以运行的代码!

   从已经存在编译器的语言开始,我们先为新语言撰写一个最基础功能的编译器程序。这个“太初”编译器(程序)只用保证正确性,可以是未优化和低效的。有了新语言的编译器后,我们可以利用新语言强大的语言能力,再次用新语言撰写新版的编译器程序。注意此处使用到的是自身语言,用自身语言来实现自己的编译器。通过“太初”编译器编译新语言的编译器程序后,我们就获得了功能和性能会更强一点的编译器。我们可以不断地重复此过程,最后会出现一个编译质量非常好的编译器出来:)

   很多时候,正确性往往是第一步和重要的。只有在此次基础上展开任何优化,都有一个正确的基础和可以检验,以及控制复杂度的。至少我可以回退到最初,就是一个可用的东西给“客户”。

     这是非常重要的一种编程习惯,后面可以吸取

  

 

你可能感兴趣的:(杂谈&随想)