按语:这是我在幽暗的山洞里为「不懂编程的人」写的系列文章的第一篇,整理于此。在这篇文章以前,有一篇前言《程序的基本形状》,它也兼职了目录功能,便于让你纵览这个系列文章的全貌。git
不管怎么去看 Emacs,它都是一个可在计算机里运行的普通的程序。须要动用一点想象力,方能理解 Emacs 是一台计算机。否则,你会与许多人同样,会认为 Emacs 不过是一个文本编辑器。github
事实上,Emacs 分为两个部分,一部分是计算机,另外一部分是操做系统。现代的 Web 浏览器也算得上是一台计算机,只不过彷佛还缺一个 Emacs。编程
Emacs 的计算机部分,它的样子以及开机画面以下图所示。个人 Emacs 计算机可能与别人的不太同样,由于我对它略微做了一些定制。小程序
对计算机略微有一些了解的人会发出~噫~的声音。玩我呢吧!主板呢,CPU 呢,内存条呢,硬盘呢,主机箱呢,液晶显示器呢,电源线/信号线呢,鼠标呢、键盘呢……啥都没有,就一个灰乎乎的破窗口,这算啥计算机?segmentfault
这就是为何说这些人对计算机只是略微有一些了解。他们觉得本身平时看到的由那堆东西组装起来的那个东西才叫计算机。那个东西的确叫计算机,但它不表明全部的计算机都长成那样。浏览器
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 这样的计算机,也多是一个无形无质的理论意义上的而且永远不会坏掉的计算机。即便他们也要用那些通体都很硬还带电的计算机,但他们内心仍是以为本身用的是一个无形无质的理论意义上的而且永远不会坏掉的计算机。当这种通体都很硬还带电的计算机,身为计算机专家的他们也须要求助于计算机维修专家。
下一篇:第一声问候