我喜欢文本处理,之前热衷于使用数据库技术。如今用 Vim 和 Perl。 我能够不假思索的用 Vim 写 Perl 代码。像聊天同样。Perl 语言的全部特性我都熟悉,几乎不用查询帮助文档。 其余语言中关于文本处理,正则表达式的函数和算法,我都比较感兴趣。 拥有不一样语法的语言,我也当成一种文本。正则表达式
我愈来愈发现,天天处理的大都是语言自己形成的问题。 彼此之间有着语法和文化的鸿沟,互相之间充满了误解。算法
我决定写一个通用的语言解析算法,可让不一样的语言能够相互转换。数据库
这是一个巨大的挑战,但无论多困难,都是值得的。编程
第一阶段. 我打算将 BNF 语言描述的语法做为配置文件进行解析,并生成相应的规则。网络
很快发现,太多的精力放在解析这门语言上,BNF 语系有太多的不一样,难道我要用那么多精力,累死在作 BNF 的语言转换器的路上吗?数据结构
由于转换 BNF 到数据结构,只是时间上的问题,技术不是问题。何须浪费时间在这上面呢?必定有许多人能够把这个作的很好。函数
既然解析语言是为了转换成内部数据结构,我为何不用表示数据结构的语言来作个人配置文件呢?测试
我决定用数据结构的表示形式来作配置文件。设计
进度加快了,但又遇到了问题,因为调试的问题,我须要在数据结构中加上暂停和注释的功能.调试
因为动态规则的问题,我须要对这个数据结构进行动态生成,而个人数据结构没有什么规则可言,不久,关键字和操做符也要加到这门语言当中,我忽然意识到,我居然在设计一门语言?
我曾经发过誓,再也不发明什么新的语言,只是转换旧的。怎么违背了当初的誓言呢?
但能解决我问题的语言是什么呢?我列举了几个特性:
听闻 Lisp 就是这样的语言,但看看 Lisp 艰深的书籍和各类像机器码同样的程序,就从内心否认了继续研究 Lisp 的想法。
社区里不少人喜欢 Emacs, 时常看他们贴出 Elisp 的代码。这些表示法和 lisp 语言同样像一件古董。Lisp 除了能作 Emacs 的配置语言外,还能作什么呢?
《黑客和画家》改变了个人想法,原来 Lisp 能够作网络商店,并且开发效率那么高?这门语言真的那么神奇,难道 Lisp 真的就是我内心想要的那门语言吗?
经过使用函数和宏不断提升程序的抽象程度,用更精炼和直白的配置语言完成更高层次的开发需求。无论程序多复杂,只要正确的对函数进行命名,细致的设计宏,就能让个人配置文件始终简单易懂。
坚持使用函数编程范式,尽可能不用有反作用和依赖全局变量的函数,除了迭代器以外。让系统的每个组件都是单独可测试的。(迭代器就是作一次列表解析, 绝对没有反作用,是不可能的。)
通过屡次的研读 Lisp 的书籍,我如今能够确认,是的,没错。Common Lisp 就是那个能帮助我实现理想的语言。惟有 Common Lisp 能知足个人要求。