Slashdot對Python之父的采訪

jopen 11年前發布 | 11K 次閱讀 Python

        Python 之父 Guido van Rossum 在 2013 年 1 月正式從 Google 離職后并正式加入 Dropbox。2013 年 8 月 19 日,Slashdot 網站發起了一個對 Guido 的訪談主題帖,網友在評論中提問。8 月 25 日,Slashdot 在另外一個帖子中匯總了“面向對象、函數式編程、PyPy、Python 3”等問題和回復。

Slashdot對Python之父的采訪

        從 Google 到 Dropbox

        nurhussein 提問:“Hi,是什么促使離開 Google 去 Dropbox 的?你之前在 Google 主要做什么?以后在 Dropbox 會做什么?”

        Guido:在 Google 呆了 7 年之后,我已經準備好生活里有一些變化,而這時 Dropbox 的工作機會正好契合了我的想法。以較高的層次來看,我的工作仍然沒有什么變化:

  • 花費一半時間來做作為 Python 的 BDFL 需要做的事情
  • 在公司里作為一名普通的工程師(不是一名經理或者團隊領導者)
  • 做什么代碼審查,架構和設計工作
  • 處理很多 email
  • 用 Python 來完成我的很多工作
  • </ul>

            一些細節當然是不同的。我在 Google 只做了兩件事:最開始的兩年我從事在線代碼審查工具 Mondrian 的開發。這個工具從來沒有被開源,但是它促使了 Rietveld 的產生,它被 Python,Go 和 Chromium 社區使用。在我加入 Google App Engine 后,我做了很多不同的事情,大部分是 Python 方面的事情。我 Python 的最后一個大項目是一個新的 Python 數據庫 API,NDB。

            我已經來 Dropbox7 個月了,我在這主要的工作是設計 Dropbox 數據存儲 API。用到這個詞來描述這個數據存儲有點諷刺,但是不是我的錯——Dropbox 數據存儲和 Google App Engine 數據存儲有一點重疊。

            更諷刺的是,即使我做了如此多的設計工作,用 Python 完成了兩個原型,但是我們上個月發布的 SDK 里面只支持 Java,Object-C 和 Javascritp。不過我正在完善它,這次采訪拖累了我的進度。

            為什么 Python 避開了一些常見的面向對象風格

            由 i_ate_god 提問:“接口,虛類,私有成員,等等…為什么 Python 沒有這些特性”

            Guido:我能想到的有兩個原因:你并不是真的需要它們,并且如果沒有編譯時的類型檢查會很難實現。 Python 是作為一個臭鼬工廠的項目開始做的(沒有被管理層支持和鼓勵但也沒有阻止),并且我希望能夠快點出一些成果。這指引我移除了一些不是真正需要或者繼續的特 性;這也讓我進行運行時的所有類型檢查,它限制了 Python 能夠支持的特性。我也不是面向對象的忠實信徒——我只是想要一個簡單的語言,它因為意外或多或少地變得有一些面向對象。

            在現代的 Python 里,針對這些特性有一些粗糙的等價語法,但是它們并不是一直很好的工作,或者它們導致了一大堆的上面的執行,所以它們一般是被避免的,但是它們也有其用處。

            函數式語言

            由 ebno-10db 提問:“有些人提出,Python 是,至少一部分,是一種函數式語言。你不同意,我也是。只是有一些 map 和 filter 類型函數并不會讓它成為函數式語言。以我的理解,這些函數是被一些思念 list 的人加到庫里的,并且你已經嘗試了幾次去掉它們。總的來說,你不是一個函數式編程的粉絲,至少從 Python 上來看不是。

            問題:你是否感覺函數式編程方法總的來說不是特別有用,或者它不是十分適合 Python?很希望聽到你不同方面的原因。”

            Guido:我并不是把一個想法做到極致的信徒,我試著在設計選擇的時候走實用主義的路子(但不是“太”實 用主義)。我會衡量現實代碼的可讀性和可用性。有些地方 map ( ) 和 filter ( ) 是適合的,但是另一方面 Python 有列表推導。我不再討厭 reduce ( ),因為我曾經只用 (a) 來實現 sum ( ),或者用(b) 可讀性不好。所以我們添加了內建的 sum ( ),將 reduce ( )移除出內建函數,移到了一個工具函數里。

            我對函數式語言的看法,就是它們都用非常強大的編譯器,比如 Haskell。對這樣的一個編譯器,函數式泛型是非常有用的,因為它讓大量的轉變成為可能,包括并行化。但是 Python 解釋器并不清楚你的代碼的含義,這也是很有用的。所以,我不認為把一下函數式的思想加入 Python 是合理的,因為這些在函數式語言里是很有用的,但是不適合 Python,并且這會讓代碼對不使用函數式編程的人非常不具有可讀性(這里指的是大部分程序員)。

            我也不認為現在函數式語言的成果已經讓它準備好成為主流。不可否認的是,我對于 Haskell 一些相關的領域并不是很了解,但是任何沒有 Haskell 流行的語言都有它的實際用處,我也沒有聽過有別的函數式語言比 Haskell 更流行。對于 Haskell,我認為讓很多編譯器技術得到證明是非常棒的,但是它的“純凈”會是它被人接受的最大障礙。它的單一讓它對于大部分人是不適合的。

            多行 lambda 表達式

            由 NeverWorker1 提問:“對于 Python,有一個最常見的抱怨就是它的對于 lambda 表達式的限制,也就是說一行里不能賦值。很明顯,Python 對空格的處理是導致這樣的主要原因。我已經花了一些事件思考實現多行 lambda 表達式的可能性,然后我能想出的最好方法是硬塞進一些不用的符號,比如C語言風格的大括號,這樣最多有點亂。有沒有更好的方法,你覺得這個功能會被添加上 嗎?”

            Guido:真的?我基本上從來沒聽到過那些抱怨,除了在 Slashdot 采訪里提問題的人。

            這確實是更好的方法,這里使用 def 關鍵字在本地作用域定義一個正規的函數。這個被定義的函數對象變成了一個本地變量,而這根使用 lambda 是相同的語義,除非這里用到了一個本地變量,并且這里沒有任何語法的限制。例如,以下兩種寫法的語言是相同的:

            def make_adder (n):
    
            __def adder (x):
    
            ____return x + n
    
            __return adder

            然后這是使用 lambda 的表達式:

            def make_adder (n):
    
            __return lambda x: x + n

            Andrew Koenig 有一次向我指出了在一種場景下,lambda 是非常適合的,那就是你有你個很長的 list 或者 dict 包括很多 lambda 表達式,因此如果你想不用 lambda 實現的話,那么定義一大堆函數,給它們命名,然后用 list 或 dict 里的名稱來引用它們就會讓你受不了。但是,在那種情況下,lambda 表達式是足夠簡單的,如果你有一些異常,在 list 或 dict 之前使用 def 才是一種好的妥協。

            PyPy

            由 Btrot69 提問:“你覺得 PyPy 代表未來的發展方向嗎?你是否對此表示懷疑?如果是,為什么?”

            Guido:我對此仍然持懷疑態度,有兩個原因:(1)它們還不支持 Python3。(2)還有很多擴展模塊不能很好的支持。但是我希望它們能修復那些問題。作為 PyPy 項目的競爭者,Jython 和 IronPython 會讓 CPython 項目保持其發展勢頭。

            瀏覽器運行 Python?

            多年以來,曾經嘗試幾次創建一個沙箱版本的 Python,使之能夠運行在瀏覽器上。主要是因為 Javascript 的問題。而現在針對 Javascript 做的工作,我們有了一個很好的替代品 CoffeeScript——那現在是不是已經是時候來實現讓 Python 運行在瀏覽器里的功能了?

            Guido:我在 1995 年就放棄了這件事。并且請不要把 Python 編譯成 Javascript。它們的語義非常不同,結果是你用 Javascript 寫了一個 Python 運行時,它會讓運行變得太慢。

            Python3

            由 MetalliQaZ  提問:“你對目前向 Python 3 的遷移的遷移感覺怎么樣?從一個用戶的角度來看,一些流行的庫的轉變還差得很遠,而這阻礙著這種過渡。在我的專業所及的地方,基本上我用的所有系統都沒有 安裝 3.x 解釋器。事實上,2.7 也很少,我想聽聽你的看法。”

            Guido:很好奇你在哪工作。我同意向 Python3 的遷移會持續很長時間,但是如果你的系統還沒用上 2.7 版本的話,那就真是有點古老了!在我離開 Google 的時候,所有向 Python2.7 過渡的工作全部完成了(在前幾年已經成功的從 2.4 遷移到 2.6),在 Dropbox 這里,客戶端和服務器端都是用的 2.7。這兩個公司都在考慮 Python3 的問題了。

            再來說向 Python3 的遷移,我實際上是相當樂觀的。很多流行的庫都開始著手做這件事。它確實會持續很長時間,但也有很多進展,過幾年之后,我希望所有的代碼都能遷移到 Python3 上來。完全根除 Python2 的使用可能會花更多的時間,但是呢,Windows XP 不也是沒完全死掉嗎。

    英文原文: Interviews: Guido van Rossum Answers Your Questions

     本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
     轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
     本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!