時間:2019-07-28 15:38:03 作者:Dorise 瀏覽量:53
大家好!小編在大學的時候?qū)W過C語言,但感覺太難了,學的馬馬虎虎,我們經(jīng)常說Python,那么Python是什么?其實Python就是一個編程語言,現(xiàn)在,全世界差不多有600多種編程語言,但流行的編程語言也就那么20來種,總的來說,這幾種編程語言各有千秋。C語言是可以用來編寫操作系統(tǒng)的貼近硬件的語言,所以,C語言適合開發(fā)那些追求運行速度、充分發(fā)揮硬件性能的程序。而Python是用來編寫應用程序的高級編程語言。
PYTHON解說器將被重構?圖1
在7 月 22 日,Python 之父 Guido 在 Medium 上發(fā)表了他的第一篇博文《PEG Parser》。在該文中,Guido 說他正在考慮運用 PEG Parser 替代現(xiàn)有的類 LL(1) Parser(名為pgen),來重構 Python 解說器。原因是現(xiàn)在的 pgen 約束了 Python 語法的自由度,使得一些語法難以完成,也讓當時的語法樹不行整齊,必定程度上影響了語法樹的表意,不能最好地體現(xiàn)設計者的目的。
那 PEG Parser 和現(xiàn)有的 LL(1) Parser 有什么區(qū)別呢?能夠這樣簡略地了解,PEG 語法解說器在解析語法的時分,會一次性加載全部代碼,所以解說器能夠根據(jù)任意位置的符號來判別語法的語義。而現(xiàn)在的 LL(1) Parse 解析語法的時分只會向前檢測一個符號,來猜測語義,導致部分語法有二義性的體現(xiàn),進而約束了Python言語的語法定義方式。當然,一次性加載全部代碼,也意味著 PEG Parser 需要更大的內(nèi)存來運轉。
說當時解說器約束了 Python 的語法完成,很多同學可能沒有明顯的感觸,所以 Guido 又舉了一個例子:在 Python3.8 之前,下面這段代碼都是能夠正常運轉的,而不像我們直觀感觸的第二行代碼應該報錯。
PYTHON解說器將被重構?圖3
這就是 Python 解說器處理不了帶來的后遺癥。這也導致 Python 團隊不得不在代碼里添加一些不受歡迎的“特例”來處理這些邊緣情況。
PYTHON解說器將被重構?圖4
Guido 說,Python 剛呈現(xiàn)的時分,內(nèi)存還很貴,運用 LL(1) Parser 是非常合理的。不過在現(xiàn)在這個內(nèi)存以 G 為單位的時代,解說器多添加幾百k甚至上兆的內(nèi)存消耗,現(xiàn)已底子不算什么了。所以是時分運用更抱負的 PEG Parser 來重構 Python 解說器了。
PYTHON解說器將被重構?圖5
最后,也是我們最關心的問題,這個重構會對 Python 言語的開發(fā)者形成什么影響呢?Guido 說,應該是沒有影響的,底層重構不會影響 Python 的語法。
看來,不管是多么成功的項目,也存在著因為時代的約束而留傳的一些令人不快的問題,完美的設計和完成,歷來不是一蹴而就的呀~