Python 之父Guido思量重构 Python 注释器

Python 之父Guido思量重构 Python 注释器

火狐浏览器即将增添新功能阻挡社交网络媒体制作的隐私追踪器

克日,Python之父Guido在Medium上揭晓了他的第一篇博文《PEG Parser》。在该文中,Guido说他正在思量使用PEG Parser取代现有的类LL(1) Parser(名为pgen),来重构Python注释器。原因是现在的 pgen 限制了Python语法的自由度,使得一些语法难以实现,也让当前的语法树不够整齐,一定水平上影响了语法树的表意,不能最好地体现设计者的意图。

Python 之父Guido思量重构 Python 注释器插图

PEG Parser简介

那 PEG Parser 和现有的 LL(1) Parser 有什么区别呢?可以这样简朴地明白,PEG 语法注释器在剖析语法的时刻,会一次性加载所有代码,以是注释器可以凭据随便位置的符号来判断语法的语义。而现在的 LL(1) Parse 剖析语法的时刻只会向前检测一个符号,来预测语义,导致部门语法有二义性的显示,进而限制了Python语言的语法界说方式。固然,一次性加载所有代码,也意味着 PEG Parser 需要更大的内存来运行。

说当前注释器限制了Python的语法实现,许多同砚可能没有显著的感受,以是Guido又举了一个例子:在Python3.8之前,下面这段代码都是可以正常运行的,而不像人人直观感受的第二行代码应该报错。

微软推出的航行模拟器(Microsoft Flight Simulator)已最先约请用户测试

>>> def a(p=1):
... print(p)
...
>>> a((p)=3)
3

这就是Python注释器处置不了带来的后遗症。这也导致Python团队不得不在代码里增添一些不受迎接的“特例”来处置这些边缘情形。

Guido说,Python刚泛起的时刻,内存还很贵,使用 LL(1) Parser 是异常合理的。不外在现在这个内存以G为单元的时代,注释器多增添几百k甚至上兆的内存消耗,已经基本不算什么了。以是是时刻使用更理想的 PEG Parser 来重构Python注释器了。

重构Python有没有什么影响?

最后,也是人人最体贴的问题,这个重构会对Python语言的开发者造成什么影响呢?Guido说,应该是没有影响的,底层重构不会影响Python的语法。

看来,不管是何等乐成的项目,也存在着由于时代的限制而遗留的一些令人不快的问题,完善的设计和实现,从来不是一蹴而就的呀~

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

建立可指导的 macOS 10.15 Catalina 启动器 省掉预约 Genius Bar 的烦恼

分享到 :
相关推荐

发表评论

登录... 后才能评论