1. 程式人生 > >[翻譯] Emacs改變了我的人生 (發生在Emacs和Ruby之間的故事)

[翻譯] Emacs改變了我的人生 (發生在Emacs和Ruby之間的故事)

轉自:http://ruby-china.org/topics/2262

得益於 @fly2never的分享, 我看到一個有關松本行巨集先生當年如何使用Emacs, 以及如何使用Emacs實現Ruby的PPT演示稿, 其中講了許多我原先不知道的, 發生在Emacs和Ruby之間的故事.

我相信不是每個人都願意去讀英文. 我就毛遂自薦, 為大家翻譯了, 之所以做這件事情, 我想主要是PPT的內容引起了我強烈的共鳴的緣故吧. 雖然使用Emacs(以及Ruby)的層次和水平我和Matz相差比天高, 不過, 這並無法阻止我發自內心的喜歡Ruby, 喜歡Emacs.

事實上, 我在給Ruby新人的公開信就有提到, 我的Ruby程式設計之路, 是始於Emacs的學習與使用. 而且在我個人身上, 真真切切的發生了一件和Matz非常相似的事情. 那就是: 在使用Emacs之前, 接觸過很多IDE, 也曾是Borland的忠實粉絲, 但是很多年, 我一直對程式設計提不起興趣或無法堅持, 主要原因, 應該是我像電影裡演的那樣, 那些黑客的那種噼裡啪啦如行雲流水一般

的感覺. 真正的改變, 發生在使用Emacs以後, 找到了一種久違的寫字的感覺. 我使用org-mode記筆記, 以及GTD整理我的思緒, 並樂此不疲的折騰再折騰, 說白了就是為了這種傳說中的feeling. 隨心所欲的feeling, 自由的feeling.

我承認也許Emacs只是碰巧在我人生試圖發生改變的時候, 碰巧發生在了我的面前, 但不可否認的是, Emacs最為個人未來程式設計生涯的一個起點, 而且顯而易見, 現在我每天做的每件事情, 幾乎都跟它有關(離不開它), 從這個意義上來說, Emacs對我個人而言, 正如matz那樣, 一個新的開始, 而現在看起來, 也是一段美好的回憶.

下面正文開始:

Emacs改變了我的人生 原著: Yukihiro Matsumoto(松本行巨集), 翻譯: zw963

在1980年.

我開始程式設計...

(出現了一個夏普計算器的影象)

400 steps (應該是那個計算器的型號, 表示那時候計算機還很初級.)

到了1988年.

在一臺SUN-3型計算機上, 我遇到了Emacs.

同學們之間相互分享這個東西.

我也嘗試著使用它.

但是我無法真正使用它.

因為Emacs在系統內被禁止使用的.

因為它佔用了太多的寶貴記憶體. (現在絕大多數的程式設計師應該無法想象當年節省1kb記憶體對於一個程式來說多麼重要)

但是我們可以自由下載, 因為它是自由軟體.

我下載了Emacs原始碼.

開始研究...

Emacs是我使用過的地一個Lisp直譯器.

從Emacs中, 我瞭解到很多很多有關語言的實現.

embedding integers in pointers (如何在指標的低位嵌入目標型別)

(使用Mark and Sweep的方式來處理垃圾收集問題)

C 和 Lisp 之間的呼叫約定.

我實實在在的懂得了Lisp如何工作.

我沉迷於Lisp物件, 以及如何通過C來實現Lisp.

這一年, 我開始使用Sparc工作站.

我終於開始使用Eamcs.

Emacs變成了我的一部分.

我可以隨心所欲的改變任何不喜歡的地方.

Emacs的所有東西都是完全可配置的.

Emacs, 讓我實現了作為一個程式設計師可以實現的所有一切.

我可以隨心所欲的換綁任意按鍵.

離開Emacs, 我不想寫任何東西.

包括程式, 文件還有Mail.

所以我寫了我自己的Mail Lisp客戶端.

它叫做cmail. 在Emacs下使用.

這是我寫的第一個(不算太小的)Emacs-Lisp 程式.

我每天都在使用它.

到了1993年. (地球人都知道, 1993年發生了什麼)

我開始了Ruby直譯器的開發.

受到Emacs直譯器的影響.

Integers are coded in tagged points (還是不明白, 整數被硬編碼為tagged指標?)

我使用了簡單的mark以及垃圾收集機制.

我使用了類似於Lisp的物件模型.

並借鑑了Smalltalk一切都是物件的理念.

在語法上, 我借鑑了Algol, Ada, Eiffel.

但是, 作為一個沉溺於Emacs的癮君子, 我還需要一個用於編寫Ruby程式碼的mode.

首先, 自動縮排必要的.

在1993年, 還沒有針對Ruby這類語法(以end作為結束)的自動縮排模式.

所以, 我嘗試寫了一個ruby-mode.el

基本上就是處理emacs lisp正則表示式之類的概念.

整整花了我一個星期...

用盡各種辦法, 我愣是給實現了程式碼自動縮排功能.

現在回想起來, 如果(當時)我無法讓ruby-mode開始工作.

現在Ruby的語法也許會被改變.

也許會變的更像C一些.

或者和其他指令碼語言更相似.

如果那樣做了, 我想Ruby一定沒有現在這麼受歡迎.

總結

Emacs教會了我自由軟體精神.

Emacs教會了我如何讀程式碼.

Emacs教我領略了Lisp的威力.

Emacs教會了我如何實現一個語言核心.

Emacs教會了我如何實現垃圾收集.

Emacs幫助我編碼和除錯.

Emacs幫助我寫, 編輯文字, 郵件, 文件等等.

Emacs使我成為一個高效的程式設計師.

Emacs使我成為了一個hacker.

Emacs改變了我的生活.

永遠...

感謝Emacs.