[轉] Matz, Koichi訪談(一): Ruby虛擬機器

武衛東發表於2011-08-31

By Yuanyi ZHANG | Published: July 18, 2007 原文連結

這是一個系列訪談 ,採訪者為James Gray,內容涉及Ruby虛擬機器,多執行緒以及國際化等方面,接受採訪的Matz為Ruby語言的創造者,Koichi(以下簡稱ko1)是YARV專案 的主導者,YARV專案的目標是為Ruby開發高效的虛擬機器(Yet Another Ruby VM),YARV目前已合併入Ruby1.9,並將作為Ruby新核心在下一個版本中釋出。採訪採用了郵件方式進行,由於不是一開始就準備好了所有的問 題,所以整個訪談的時間跨度相當大,第一篇與最新的一篇相隔大約有5個月,訪談共有4部分,這裡是第一部分(發表於07年2月16日),主要是Matz和Koichi的自我介紹以及他們的Ruby虛擬機器的看法。

問:非常感謝兩位接受我的提問,在開始之前,兩位能不能先介紹下自己以及你們在Ruby開發中所擔當的角色?

Matz:我是Ruby語言的設計者以及第一個實現者,我的真名是Yukihiro Matsumoto,英語的讀音類似於You-Key-Hero Matz-Motor,但這個名字實在太長了,所以你們還是叫我Matz好了,

我從1993年開始開發Ruby,但是現在Ruby已經變得十分的複雜,並且存在嚴重的效能問題,其實,從很久以前我就動過重寫Ruby直譯器的念頭,但我總是沒法下定決心完全拋棄現在的實現,而從頭實現一個新的。

直到後來,我遇到了Koichi,我發現他的YARV專案比我的老古董實現要更有前途一些,於是我邀請他加入了Ruby的核心團隊。儘管我非常喜歡同時充當設計者和實現者的雙重角色,但我發現我在語言的實現方面實在是沒有多少才華,所以,當我發現YARV後,我想現在是時候將我的全部精力投入到Ruby語言的實現上了。

Ko1:非常感謝你對YARV和我產生興趣,順便說一下,我最近正在思考YARV的具體含義,有人說YARV不是另一個(Yet Another),而是指”YARV ain’t Ruby VM“,如果YARV不是一個Ruby VM,那它是什麼呢?

下面開始自我介紹,我叫Koichi Sasada,因為ichi在日語中是一的意思,所以我用了ko1作為我的暱稱,我是東京大學的一名助教,我的主要研究方向是系統軟體,包括作業系統,編 程語言,並行系統等等。我還是日本Ruby協會的成員,我曾經策劃過一些Ruby活動(比如 RubyKaigi2007),我還是Rubyist Magazine的一名編輯,同時,我還開發了Nadoka, Rava, Rucheme以及一些其他小專案,當然,我還是YARV的開發者:Yet Another Ruby VM。

至於我在Ruby開發中的角色?其實我一直在從Matz那竊取Ruby Hack的樂趣?

問:這次採訪的主要目的是探討Ruby直譯器的未來,所以你們能詳細講講YARV/Rite嗎?它們在設計上和老的Ruby直譯器有何不同?

Matz:事實上,我對設計的興趣遠遠大於實現,所以Ruby直譯器離它應該有的效能還相去甚遠,但是隨著Ruby語言的日益複雜,我發現要想讓Ruby直譯器的效能取得大的突破,必須重新實現直譯器的核心(core),所以在2001年的時候,我計劃發起一個新的Ruby直譯器專案,它的程式碼名稱就是Rite,但可能是我太忙了,也或許是太懶了,這個專案一直沒有啟動。

後來,Koichi出現了,他向我們展示了YARV,那時候有許多人想要實現Ruby直譯器,但是隻有Koichi完整地實現了整個特性集(當然,現在我們有了JRuby和RubyCLR,但那個時候只有YARV),所以我請求他加入到Ruby新核心(Rite)的開發中來,他答應了。

2007年1月1日,Koichi提交了YARV到Ruby的主幹上,現在它已經是Ruby1.9的官方核心了,原有的Ruby實現被轉移到了matzruby分支下,目前我還在這個老的分支下工作,主要是實現一些語言的新特性,但是最終我會轉移到新引擎上來。

關於YARV的細節,請Koichi作答。

問:這是不是說,Rite將退居幕後,改而使用YARV,還是說YARV終有一天將更名為Rite?

Matz:除非Koichi要求,否則將不會再使用Rite這個名字,我不確定Koichi是否還會繼續維護YARV,因為事實上,它已經是一個獨立的Ruby虛擬機器了。

Ko1: YARV已經不存在了。

事實上,我已經將YARV從結構體、函式以及檔案的命名中全部刪除掉了,YARV僅僅只是用來同matzruby進行區分的程式碼名稱,現在,YARV不再指另一個Ruby VM,我在後續的文字中將使用YARV來指代Ruby官方程式碼庫的主幹。

首先,YARV是一個簡單的執行偽順序指令(pseudo sequential instructions)的堆疊機器(stack machine),而老的直譯器(matzruby)需要遍歷整個AST(虛擬語法樹),這樣明顯很慢,YARV選擇將AST編譯成位元組碼然後再執行。

第二,YARV使用了原生執行緒(native thread)來實現Ruby Thread,這意味著你可以在擴充套件庫中執行阻塞任務(blocking task)(遵照Ruby spec,阻塞任務應當被Thread#raise中斷,更多細節,請參看[ruby-core:10252].), 由於線上程建立方面YARV要比matzruby慢,所以你不應該一次建立多個執行緒,並且支援原生執行緒也不意味著你的應用可以在多核機器上得到併發執行,目前的實現採用了一個大的全域性VM鎖來避免同步問題(因為許多擴充套件庫並不關心執行緒安全,比如array.c,string.c等等)。

第三,我針對一些特殊指令做了大量的優化,這些特色正是我開發YARV的目的,由於這些優化,至少基準測試顯示它比matzruby快了不少。

不過YARV並沒有對直譯器/語法/規範(Matz的工作),GC(垃圾收集及記憶體管理)以及擴充套件庫array/string/regexp等等進行改動,因此,如果你程式的瓶頸在於字串處理,那麼YARV恐怕幫不了多上忙。

問:祝賀你們完成了Ruby/YARV的合併工作,我想工作量一定很大吧?現在整個Ruby社群都為此感到興奮,不過,隨著合併的進行,你認為它會對Ruby核心的開發產生怎樣的影響呢?

Matz:這應該主要歸功於Koichi,他完成了大部分的工作,我目前正在從matzruby分支遷移到主幹上來,最近,我已經在主幹上實現了一些新的功能,比如class local instance variables以及新的local variable scope,遷移將在近期完成。

由於目前的主幹主要是Koichi的工作,所以我需要些時間來熟悉新的程式碼,我對老的直譯器相當熟悉,但是新程式碼的某些部分對我來說還很神祕,不過我對它很滿意,因為它很清晰,組織得也很好,並且很快。

ko1:謝謝,事實上我還是個Ruby開發新手(我還沒有CVS帳號,因此目前還無法遞交程式碼),所以我對這個問題就不發表看法了。

問:那麼基於YARV的Ruby版本會在什麼時候正式釋出呢?

Matz:簡單地說,就是現在。

具體點說,現在你就可以從我們的SVN倉庫中抽取(check out)YARV程式碼並使用它,但是我們的正式釋出版本預計要到07年的聖誕節左右,當然前提是我們能像我們設想的那樣勤奮。

相關文章