Python 之父考慮重構 Python 解釋器​​​​​​​

←手機掃碼閱讀     admin @ 2019-07-26 , reply:0

7 月 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 團隊不得不在代碼里增加一些不受歡迎的「特例」來處理這些邊緣情況。

Guido 說,Python 剛出現的時候,內存還很貴,使用 LL(1) Parser 是非常合理的。不過在現在這個內存以 G 為單位的時代,解釋器多增加幾百k甚至上兆的內存消耗,已經根本不算什麼了。所以是時候使用更理想的 PEG Parser 來重構 Python 解釋器了。

最後,也是大家最關心的問題,這個重構會對 Python 語言的開發者造成什麼影響呢?Guido 說,應該是沒有影響的,底層重構不會影響 Python 的語法。

看來,不管是多麼成功的項目,也存在著因為時代的限制而遺留的一些令人不快的問題,完美的設計和實現,從來不是一蹴而就的呀~

英文原文地址:https://medium.com/@gvanrossum_83706/peg-parsers-7ed72462f97c

轉載自:Python部落





[admin ]

來源:OsChina
連結:https://www.oschina.net/news/108532/guido-peg-parser
Python 之父考慮重構 Python 解釋器​​​​​​​已經有39次圍觀

http://coctec.com/news/all/show-post-210823.html