按語:這是我在幽暗的山洞裏爲「不懂編程的人」寫的系列文章的第一篇,整理於此。在這篇文章以前,有一篇前言《程序的基本形狀》,它也兼職了目錄功能,便於讓你縱覽這個系列文章的全貌。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 這樣的計算機,也多是一個無形無質的理論意義上的而且永遠不會壞掉的計算機。即便他們也要用那些通體都很硬還帶電的計算機,但他們內心仍是以爲本身用的是一個無形無質的理論意義上的而且永遠不會壞掉的計算機。當這種通體都很硬還帶電的計算機,身爲計算機專家的他們也須要求助於計算機維修專家。
下一篇:第一聲問候