1.1 为什么要制作编程语言
本书的主题是自制编程语言。单说现在被广泛使用的编程语言,就有C、C++、Java、C#、Perl、Python、Ruby、PHP、Lisp、JavaScript等。可能有人会质疑,既然已经有这么多语言了,真的有必要再特意创造一门新的语言吗?
实际上,自制编程语言还是大有益处的。
1.可以帮助理解编程语言的内部运行机制
编程语言是程序员每天都要使用的工具。深刻地理解这个工具,对程序员来说非常重要。
一般来说,重新编写一个与已有程序相似的程序会被说成是“重复发明轮子”,这在行业内是不被认同的。但本书中想要实现的,偏偏是在众多语言存在的前提下再制作一门新的语言,正是“重复发明轮子”。这是深刻理解编程语言的最佳途径(缺点是要花很多时间)。
2.能制作领域专用语言
比如在Unix的世界中,有sed和awk两种历史悠久的专为文本处理定制的语言(后来在此方向上发展出了Perl语言)。PHP则是专门面向Web程序开发的语言。如果掌握了制作编程语言的技术,就可以在必要的情况下制作出领域专用语言(DSL, Domain-Specific Language)。
领域专用语言不一定会像Perl与PHP那么复杂,在很多情况下,如果能书写条件分支或者简单语句的话会方便许多,这也可以看作是一种专用领域。
比如在业务流程处理等软件中,很多时候为了切换测试环境与生产环境的数据库,需要重写配置文件,而这一操作经常会引发问题(比如由于版本升级需要增加配置文件项目,此时必须与旧版本配置文件合并)。这时候我们可能就会想,如果能直接在配置文件中写if语句将其按域名分开就好了。
除此以外,我们在填写数据时可能希望能支持类似Excel的简单算术公式,在玩游戏时希望能把游戏中的对话导出到一个外部文件中,等等。这些都可以看作专用领域并制作对应的DSL。
3.可以用编程语言扩展应用程序
将以上两方面的考量进一步延伸,我们就会得到以通用语言扩展某个应用程序的构想。Emacs这个编辑器就内置了Emacs Lisp这种Lisp方言,从而为Emacs的自定义提供了无限的可能性。同理,Microsoft Office也可以使用VBA进行扩展。
对于这类应用程序扩展语言,当然完全可以使用某种已有的编程语言(Lua等就在向这个方向发展),也可以在编写应用程序时从底层到扩展全部自己实现。这样就无需担心使用其他编程语言在版本升级时引起的兼容性问题了。
4.说不定还会变成名人
如果自制的编程语言能在世界范围内得到广泛使用,那就太棒了。比如Ruby之父松本行弘先生就是世界名人。
不过坦白讲,通过自制编程语言来获得成功实在是太难了。即便语言被创造出来,如果没人用的话就不会产生相应的软件,这样就更不会有人用了。况且,即便真的因为发明了新的语言而变成了名人,通过这个赚到钱的希望也十分渺茫啊。其实我自己最近写的语法处理器都是免费发布的(不这样的话,语言没法普及呀)。
5.自制编程语言非常有趣
啰嗦了这么多,说到底其实是因为自制编程语言非常有趣。
自制一门编程语言确实是一件非常有意思的事。有人说过“想写出终极程序的程序员,最终都去写操作系统或者编程语言了”,你可以通过自制编程语言感受到接触最核心技术的乐趣。
让尽可能多的人感受到这种乐趣,这正是本书的目标。