按语:这是我在幽暗的山洞里为「不懂编程的人」写的系列文章的第一篇,整理于此。在这篇文章之前,有一篇前言《程序的基本形状》,它也兼职了目录功能,便于让你纵览这个系列文章的全貌。
无论怎么去看 Emacs,它都是一个可在计算机里运行的普通的程序。需要动用一点想象力,方能理解 Emacs 是一台计算机。不然,你会与许多人一样,会认为 Emacs 不过是一个文本编辑器。
事实上,Emacs 分为两个部分,一部分是计算机,另一部分是操作系统。现代的 Web 浏览器也算得上是一台计算机,只不过似乎还缺一个 Emacs。
Emacs 的计算机部分,它的样子以及开机画面如下图所示。我的 Emacs 计算机可能与别人的不太一样,因为我对它略微作了一些定制。
对计算机略微有一些了解的人会发出~噫~的声音。玩我呢吧!主板呢,CPU 呢,内存条呢,硬盘呢,主机箱呢,液晶显示器呢,电源线/信号线呢,鼠标呢、键盘呢……啥都没有,就一个灰乎乎的破窗口,这算啥计算机?
这就是为什么说这些人对计算机只是略微有一些了解。他们以为自己平时看到的由那堆东西组装起来的那个东西才叫计算机。那个东西的确叫计算机,但它不代表所有的计算机都长成那样。
Emacs 里有一个俄罗斯方块的游戏,在 Emacs 中输入 M-x tetris
指令可以开启它,结果如下图所示。倘若 Emacs 不是计算机,那么它是如何执行这个俄罗斯方块程序的呢?
当然,单纯能够运行俄罗斯方块游戏,不能说明 Emacs 是一台计算机。不过,除了俄罗斯方块,Emacs 里还有贪吃蛇、五子棋、乒乓球之类的小游戏。在 Emacs 中,功能性的程序,像日历、计算器、音乐播放器、视频播放器、邮件客户端、网络即时聊天客户端、终端、文件管理器、网页浏览器等等,数不胜数。微信团队能把「小程序」的概念炒作得如火如荼,而这种事在 Emacs 的世界里,数十年来微不足道。
精力旺盛的 Emacs 爱好者用 Emacs Lisp 语言编写了一个图灵机模拟程序 [1]。鉴于目前,只有图灵机可以模拟图灵机,并且通常所谓的计算机,本质上都是图灵机,因此完全可以断言,Emacs 就是一台计算机。
图灵机,听起来非常深奥,至少与我们见过的所有计算机差不多深奥吧?事实上并非如此。城市里各个路口的红绿灯系统在某种意义上就是图灵机。它运行的程序就是红灯与绿灯的轮回切换,通过路口的车辆与行人是这个图灵机的输入与输出。完全可以认为,这个图灵机在路口的一端擦除了车辆或行人,而在路口的另一端写入了车辆与行人。
我听到有人会继续发出~噫~的声音。发出这种声音的人会说,红绿灯系统充其量只是一个功能固定的有限状态机。对此,我只能说,不妨将通过路口的男人视为 1,女人视为 0,将马路视为图灵机的纸带,将车流与人流所形成的运动视为纸带的相对移动……还有,随着时间的变化,车流与人流终归会对红绿灯切换过程产生影响,这是因为红绿灯的时长由一段时间里的车流与人流的统计结果来确定。当红绿灯的时长发生变化的时候,相当于红绿灯系统执行了一个新的程序。
只要你愿意,完全可以将 Emacs 计算机与你所熟知的计算机架构对应起来。上文中给出的运行俄罗斯方块游戏的 Emacs 界面,显示俄罗斯方块的部分就是显示器。我们所用的键盘与鼠标,就是 Emacs 的输入设备。同理,我们所用的内存条与硬盘,它们也能作为 Emacs 的存储器。
那么 CPU 呢?Emacs Lisp 的解释器就是 CPU。它始终都处于在读取程序、执行程序、输出结果这三个步骤构成的轮回中。
上文,我在 Emacs 中输入 M-x tetris
指令,Emacs 便会从硬盘读取俄罗斯方块程序,然后执行它,最后输出结果。对于俄罗斯方块程序,Emacs 最终给出的输出结果是什么呢?就是终局的成绩。
对于一个不会编程的人而言,可能读完这篇文章,能够有所理解,计算机专家为什么不会修计算机,甚至连计算器都修不好。因为对于计算机专家而言,他们的计算机可能是 Emacs 这样的计算机,也可能是一个无形无质的理论意义上的并且永远不会坏掉的计算机。即使他们也要用那些通体都很硬还带电的计算机,但他们心里还是觉得自己用的是一个无形无质的理论意义上的并且永远不会坏掉的计算机。当这种通体都很硬还带电的计算机,身为计算机专家的他们也需要求助于计算机维修专家。
下一篇:第一声问候
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。