Python創始人訪談:Python沒想象中的那麼慢
原文(第一次翻譯訪談類文章,裡面口語化東西如果處理得不好請不吝賜教,我盡力把意思表達清楚。)
Guido van Rossum創造了Python語言(當下流行的動態語言之一,Google和NASA這樣的組織都在使用)。上週日,Google資深軟體工程師van Rossum出席了在矽谷的PyCon會議,並與我們InfoWorld編輯Paul Krill探討了Python的成長和質疑。
InfoWorld: 你曾經回答過那些批評Python太慢的人。你說:每當你需要用Python寫點什麼時候,都覺得它已經足夠快了。(既然如此)為什麼還有質疑它太慢的批評之聲呢?
van Rossum: 人們通常會那麼做:他們找一個工具,然後把它打造得不可思議。在這不可思議軟體的某一部分,他們正在幹著瘋狂的事情,有的時候一些瘋狂的事情包括一個完整的計算分支,比如遍歷一個有十億節點的圖或者分析百萬兆的email資訊等等。
有些時候,會因為系統的一小部分原因而中止整個系統。如果你僅僅寫一些頭腦簡單的Python迴圈語句,可能會發現那就是你係統的瓶頸。我們通常可以把那部分用很少的C或C++替換掉,而不是用一個更快的語言重寫整個系統,因為大多數你所做的事情與程式語言的速度無關。
InfoWorld: Python語言目前的最新版本是多少?
van Rossum: 目前有兩個不同的版本。我們正在嘗試最終將這兩個版本統一在一起。我們正在嘗試砍掉Python 2的分支,所以在Python 2分支上的最後一片葉子是Python 2.7。但是現在你仍可以看到許多Python 2.6和2.5的分支。在Python 3的分支上,目前的釋出版本是3.2,最近幾個月我們僅僅釋出了一個3.3的alpha版,3.3不久會正式釋出。
InfoWorld: Python 3分支最吸引人的地方在哪裡?
van Rossum: Python 2已經累計了許多方式去做同一件事情。同樣,Python 2已經引入了一種處理Unicode的方式;在2000版本引入它時,我們對於能夠支援Unicode並且能夠向後相容表示非常自豪。過了06至07年之後,我們意識到需要一種完全不同的方式去處理Unicode。同樣我們找不到一種能讓新的正確支援Unicode的方法與過去版本語言相容。
因為這件事,我們想:與其發一個受到嚴格相容限制的版本,不如直接做一個新的釋出版(Python 3)。之後,我們清理了一堆東西,丟掉了許多過時的特性。雖然使用者被告知Python 3不與Python 2相容,但是它們依然“像”是同一門語言【1】。
InfoWorld: 如果不相容的話,你是否不得不重新編譯Python 2的應用?(譯註:小編貌似不太熟悉動態語言,動態語言是不需要編譯的--至少不需要自己來編譯)
van Rossum: 大多數情況下,你不得不修改該原有的Python 2應用的程式碼。我們提供了一個從2升級到3的工具,它可以自動完成大多數的改動。但是仍有許多事情是不能自動化的,所以你必須手動修訂。因此,人們按照一些策略,編寫受限制的Python 2程式碼(通過不適用某些特性),然後他們的程式碼就魔術般地相容了Python 3。
InfoWorld: 你談到關於反對動態型別的爭執。你說:如果你相信編譯器可以找到程式中的所有bug,那你幹軟體開發一定沒多久。所以你對Python的動態性感到很滿意是麼?
van Rossum: 完全如此。程式語言的基本哲學就是:不要去修改。我從沒看到Python突然增加了某個靜態特性或者有向這方面發展的特性。
InfoWorld: 你提到過:從某些角度上來說,你希望對python程式進行一個全域性的靜態分析【2】將會是很現實的。這麼做對Python開發者有什麼好處?
van Rossum: 全域性靜態分析能幫你找到某種型別的bug。另一件你可以做的事情是優化。
InfoWorld: Python的GIL【3】(Global Interpreter Lock)是否是一個多核處理時的障礙?
van Rossum: 或多或少有一點。如果你使用多核處理器,就不能並行地執行Python位元組碼,因為Python位元組碼需要GIL才能執行,而只有一個核可以擁有GIL。當Python執行緒沒有獲得GIL的時候,它們能做的也只有等待I/O,或者也可以呼叫C/C++程式碼。
舉個例子,在NumPy中做大型矩陣操作,當你給NumPy一個矩陣或者大型陣列時,然後你可以讓它完成1000個資料計算,NumPy會釋放GIL。我不清楚NumPy是否有並行機制,但是你可以想象,如果有10個核,你可以把工作並行在10個核上,每個核上處理不同的資料塊,沒有一個核需要GIL,因為它們都不會處理Python物件。
譯註: 【1】Python的版本:Python的兩大版本是讓很多初學者頭疼的東西。Python 2和Python 3還是有不少差異的,這就導致兩個版本是沒法互相相容的。目前的很多開源工程還是基於Python 2系列來寫的。 【2】靜態分析:在不執行程式碼的情況下對程式碼進行檢查,寫過Java的同學應該知道,比如FindBugs。這些工具主要檢查程式碼中有沒有明顯的bug,比如死迴圈,使用一個沒賦值的變數,等等。 【3】GIL:Python虛擬機器的一個核心部件,稱為全域性直譯器鎖,Python的位元組碼只有獲得GIL才能執行,而GIL一個Python虛擬機器只有一個,所以理論上說,同一時刻,只有一個Python程式能執行。當然Python同樣有執行C/C++語言的能力,執行這些程式碼不需要獲得GIL。GIL是Python語言中一個爭議很大的東西。
相關文章
- Wikipedia創始人訪談
- Java轉python機器學習,並沒有大家想象的那麼美好!JavaPython機器學習
- 全球“萬人迷”MySQL或許並沒有想象中的那麼“香”MySql
- Python語言的創始人解釋為什麼Python陣列的索引從0開始Python陣列索引
- Python 語言的創始人解釋為什麼 Python 陣列的索引從0開始Python陣列索引
- 相親原始碼中移動支付的實現,沒有想象中那麼難原始碼
- 為什麼你寫的Python執行的那麼慢呢?Python
- 在遊戲裡新增簡單模式,沒有想象中那麼簡單遊戲模式
- 【IT生活】成長,沒有想象的那麼迫切 ——葉紹琛
- CSS創始人之一Bert Bos訪談問題有獎徵集(圖靈訪談)CSS圖靈
- Bleeding Edge創始人Troy Mott訪談問題有獎徵集(圖靈訪談)圖靈
- 想拿到BAT的前端開發崗offer,並沒有想象中的那麼難!BAT前端
- [譯] 為 Django Framework 貢獻你的力量並沒有想象中的那麼難DjangoFramework
- 基本型號 14 英寸 MacBook Pro 可能沒有您想象中那麼快Mac
- Netty快速上手:Netty沒有你想象的那麼難Netty
- Git 10 週年之際,創始人 Linus Torvalds 訪談Git
- 復刻或重製老遊戲,可能並沒有想象中那麼簡單遊戲
- 專訪ThinkPHP創始人劉晨PHP
- 解讀 App Store 稽核黑箱政策 —— 遠沒有你想象的那麼邪惡APP
- “科技貓”聯合創始人古茜:懂科技的女生更性感(圖靈訪談)圖靈
- 專訪集智俱樂部創始人張江:衝破藩籬,敢想敢為(圖靈訪談)圖靈
- 開源:比想象中大,也沒想象中重要
- 利用Python寫個開心消消樂小遊戲,並沒有想象中的複雜Python遊戲
- 為什麼Python這麼慢?Python
- 為什麼 Python 這麼慢?Python
- Facebook創始人祖克伯談團隊管理
- Flexport創始人談美國物流供應鏈的問題FlexExport
- SphereEx 創始人張亮雲咖訪談回顧:構建資料服務的新思路
- 【Python】淺談python中的jsonPythonJSON
- 為什麼那麼多零基礎人員學習Python?Python
- 為什麼 python 那麼熱門Python
- Scrum創始人的故事Scrum
- 探尋 Linux 背後的“美麗心靈”——Linux 創始人 Linus Torvalds 訪談錄Linux
- Excel 中的 VLOOKUP 函式,沒你想的那麼難Excel函式
- axon框架創始人談微服務與事件驅動框架微服務事件
- 談一談Python中的裝飾器Python
- CSS創始人之一Bert Bos:CSS只是進化的一部分(圖靈訪談)CSS圖靈
- 圖靈訪談 : CSS創始人之一Bert Bos:CSS只是進化的一部分圖靈CSS