'Python之父談Python未來與解釋器重構'

Python 設計 瀏覽器 C語言 Guido 檸檬班軟件測試 2019-08-06
"

Python之父談Python未來與解釋器重構 !

一、Python的未來

2019年5月初,Python之父Guido van Rossum在今年的PyCon US大會上作了名為“Python Language”的演講。

近日,他又接受了IT媒體Infoworld的採訪,大談Python的未來,主要談論了以下幾個問題。

01、關於Python的性能提升

Guido:Python 3的性能已經跟上來了,比2012年時要快的多。

另外,還有像PyPy這樣的Python實現。有一些新版本的Python解釋器也在試圖提升速度。

其實,Python的性能並沒有人們說的那樣差,而且因為Python大部分是用C語言實現的,很多事情做起來可以和C語言一樣快。

我還是認為,Python對於大部分事情來說已經足夠快了。

儘管沒有往Python 3中新增特性以改善速度,但是我們已經讓語言的很多方面變快了。

比如,引用計數比以前快了些。主要還是優化現有的代碼,但是作為用戶來說,很難注意到區別。

而且如果你急需提升某個Python程序的速度,可以嘗試使用PyPy。

它已經足夠成熟,值得嘗試。

02、Python為什麼受歡迎?

Guido:主要是學習方便,使用方便,而且社區開放、樂於助人。

03、Python的開發工作

Guido:目前,以及過去五年多時間裡,主要是其他人在推動Python的發展。

我偶爾進行一些指導,判斷某個新想法是否值得接受,通常是設計是否要添加新語法時。在標準庫開發方面,我很少干預。

有時候,我也不得不讓大家停止討論,各自妥協。

04、Python在移動計算領域的應用

Guido:移動對Python來說仍是一個很難啃下來的平臺,但是並沒有瀏覽器平臺的難度大,因為Python實際上是可以運行在所有品牌智能手機上的。

你只需要找到懂得怎樣構建移動版本Python的人就行了。

標準的CPython源代碼幾乎可以編譯成能在安卓和蘋果手機上運行的二進制文件。有很多人在朝這方面努力,不斷貢獻著補丁包。

不過進展的速度比我希望的要慢一些。不過話又說回來,我本人並不開發移動應用,所以我沒有太多自己參與的動力。但是我很樂於見到這方面的進展。

二、Python解釋器重構

在本月的22日,Python之父Guido在Medium上發表了他的第一篇博文《PEG Parser》。

在該文中,Guido說他正在考慮使用PEG Parser代替現有的類LL(1) Parser(名為pgen),來重構Python解釋器。

原因是現在的 pgen 限制了Python語法的自由度,使得一些語法難以實現,也讓當前的語法樹不夠整潔,一定程度上影響了語法樹的表意,不能最好地體現設計者的意圖。

那PEG Parser和現有的LL(1) Parser有什麼區別呢?

可以這樣簡單地理解,PEG 語法解釋器在解析語法的時候,會一次性加載全部代碼,所以解釋器可以根據任意位置的符號來判斷語法的語義。

而目前的 LL(1) Parse 解析語法的時候只會向前檢測一個符號,來猜測語義,導致部分語法有二義性的表現,進而限制了Python語言的語法定義方式。

當然,一次性加載全部代碼,也意味著PEG Parser需要更大的內存來運行。

說當前解釋器限制了Python的語法實現,很多同學可能沒有明顯的感受。

所以Guido又舉了一個例子:

在Python3.8之前,下面這段代碼都是可以正常運行的,而不像大家直觀感受的調用函數時應該報錯。

"

Python之父談Python未來與解釋器重構 !

一、Python的未來

2019年5月初,Python之父Guido van Rossum在今年的PyCon US大會上作了名為“Python Language”的演講。

近日,他又接受了IT媒體Infoworld的採訪,大談Python的未來,主要談論了以下幾個問題。

01、關於Python的性能提升

Guido:Python 3的性能已經跟上來了,比2012年時要快的多。

另外,還有像PyPy這樣的Python實現。有一些新版本的Python解釋器也在試圖提升速度。

其實,Python的性能並沒有人們說的那樣差,而且因為Python大部分是用C語言實現的,很多事情做起來可以和C語言一樣快。

我還是認為,Python對於大部分事情來說已經足夠快了。

儘管沒有往Python 3中新增特性以改善速度,但是我們已經讓語言的很多方面變快了。

比如,引用計數比以前快了些。主要還是優化現有的代碼,但是作為用戶來說,很難注意到區別。

而且如果你急需提升某個Python程序的速度,可以嘗試使用PyPy。

它已經足夠成熟,值得嘗試。

02、Python為什麼受歡迎?

Guido:主要是學習方便,使用方便,而且社區開放、樂於助人。

03、Python的開發工作

Guido:目前,以及過去五年多時間裡,主要是其他人在推動Python的發展。

我偶爾進行一些指導,判斷某個新想法是否值得接受,通常是設計是否要添加新語法時。在標準庫開發方面,我很少干預。

有時候,我也不得不讓大家停止討論,各自妥協。

04、Python在移動計算領域的應用

Guido:移動對Python來說仍是一個很難啃下來的平臺,但是並沒有瀏覽器平臺的難度大,因為Python實際上是可以運行在所有品牌智能手機上的。

你只需要找到懂得怎樣構建移動版本Python的人就行了。

標準的CPython源代碼幾乎可以編譯成能在安卓和蘋果手機上運行的二進制文件。有很多人在朝這方面努力,不斷貢獻著補丁包。

不過進展的速度比我希望的要慢一些。不過話又說回來,我本人並不開發移動應用,所以我沒有太多自己參與的動力。但是我很樂於見到這方面的進展。

二、Python解釋器重構

在本月的22日,Python之父Guido在Medium上發表了他的第一篇博文《PEG Parser》。

在該文中,Guido說他正在考慮使用PEG Parser代替現有的類LL(1) Parser(名為pgen),來重構Python解釋器。

原因是現在的 pgen 限制了Python語法的自由度,使得一些語法難以實現,也讓當前的語法樹不夠整潔,一定程度上影響了語法樹的表意,不能最好地體現設計者的意圖。

那PEG Parser和現有的LL(1) Parser有什麼區別呢?

可以這樣簡單地理解,PEG 語法解釋器在解析語法的時候,會一次性加載全部代碼,所以解釋器可以根據任意位置的符號來判斷語法的語義。

而目前的 LL(1) Parse 解析語法的時候只會向前檢測一個符號,來猜測語義,導致部分語法有二義性的表現,進而限制了Python語言的語法定義方式。

當然,一次性加載全部代碼,也意味著PEG Parser需要更大的內存來運行。

說當前解釋器限制了Python的語法實現,很多同學可能沒有明顯的感受。

所以Guido又舉了一個例子:

在Python3.8之前,下面這段代碼都是可以正常運行的,而不像大家直觀感受的調用函數時應該報錯。

Python之父談Python未來與解釋器重構

這就是Python解釋器處理不了帶來的後遺症。

這也導致Python團隊不得不在代碼裡增加一些不受歡迎的“特例”來處理這些邊緣情況。

Guido說,Python剛出現的時候,內存還很貴,使用LL(1) Parser是非常合理的。

不過在現在這個內存以G為單位的時代,解釋器多增加幾百k甚至上兆的內存消耗,已經根本不算什麼了。

所以是時候使用更理想的 PEG Parser 來重構Python解釋器了。

最後,也是大家最關心的問題。

這個重構會對Python語言的開發者造成什麼影響呢?

Guido表示:底層重構不會影響Python的語法。

本文由檸檬班木森老師整理,如有侵權,請聯繫刪除!

"

相關推薦

推薦中...