Snail的编程感悟

      一个又一个版本的更新,CSDN和我一起见证着Snail Language的长大。从2013年到2014年,从未停止过编写代码的步伐,从未停止过为它添加新功能的想法。写Snail的目的何其简单,只是为了学习语言的意义;写Snail的过程何其快乐,来自从无到有功能的喷发。

    我的职业不是做编译器(做编译器的也没有我业余)。Snail  Language并没有涉及到编译器的后端(也就是中间语言以后的部分),只处于解析执行的初级阶段。Snail的理想由来已久,很早很早以前我就向往有一款属于自己的语言,但是一直停留在想想阶段。直到看到了AHK的源码,我才对一门语言的实现来了兴趣。去翻看尘封已久的龙书,将每个知识点一一验证。以前学过一个学期的课程,但基本上处于什么都不懂的阶段。此时,大学时代播下的种子,似乎到了目前才发芽生长。

      看了AHK的实现原理,才觉得原理语言这么简单。后来参考了一点Lua的代码,让自己对虚拟机等语言的本质有了更深的认识。从编码的角度看,AHK的代码很直观,代码里面充斥着大量的注解,而且用VS开发。比起AHK来,Lua的代码不适合初学编译器的人,因为代码过于简洁,甚至函数的命名都简洁到了极致,所以不是很好理解。从语言的角度看,Lua比AHK优秀很多,Lua实现了一门语言应该具备的一切,比如虚拟机、自己的OpCode和一些Lua版本对JIT的实现;而AHK只是一门Windows上解析语言。总之,AHK适合入门,Lua适合深入。

      后来开发的过程都如实的记录在我的博客上。众多功能陆续的实现,如分支语句、循环、函数调用、作用域、字典数,以及调用C#函数,都按照自己的想法去实现。随着代码越写越多,代码结构也变的原来越乱,大量使用全局变量的代码,几乎不可能实现多线程调用。现在已经是积重难返,期待有时间进行一次大的重构。

      最近的一个功能是让Snail  Language支持C#调用,上面一篇博客已经提到过程和结果。这个功能也让我觉得是语言发展过程中的里程碑,语言的开发过程进入一个新的阶段,一个摆脱Toy语言的阶段。兼容C#能使语言功能将变得异常的强大,可以不断的从C#中吸收养分,但是不能变成C#,否则语言就失去了存在的必要。可能担心成为C#还为时过早,因为目前对C#的兼容能力还是非常有限,还是基于对字符串的识别,然后调用C#函数。这中方法肯定不是最佳的方法,我目前所能想到的最终形式是在中间代码上的统一,即我一开始就追求的目标——CIL,成为一款.NET语言。

      开发一门语言需要很长时间的摸索,如Python发展了二三十年,Lua也接近二十多年,就如国产的快手aauto语言花了七年时间才有现在的强大功能。我的理想不是让Snail成为它们,而是在Snail上实现它们具备的功能,这也是人生一大乐趣。沿着自己的想法去追求,正如我头像上的这只蜗牛,敢于和赛车奔跑;别担心怀有梦想被嘲笑,因为坚信Snail也有未来。


你可能感兴趣的:(Snail的编程感悟)