当前位置: 首页 > 科技观察

Python之父考虑重构Python解释器

时间:2023-03-12 06:03:04 科技观察

7月22日,Python之父Guido在Medium上发表了他的第一篇博文《PEG Parser》。在文章中,Guido说他正在考虑重构Python解释器以使用PEG解析器而不是现有的类似LL(1)的解析器(名为pgen)。原因是目前的pgen限制了Python语法的自由度,使得一些语法难以实现,并且使得现在的语法树不整齐,一定程度上影响了语法树的表达,不能最好的体现设计者的意图。PEGParser和现有的LL(1)Parser有什么区别?可以简单理解为PEG文法解释器在解析文法时,会一次性加载所有代码,因此解释器可以根据任意位置的符号判断文法的语义。但是目前的LL(1)Parse在解析文法猜测语义时只向前检测一个符号,导致部分文法出现歧义,进而限制了Python语言的语法定义方式。当然,一次加载所有代码也意味着PEGParser需要更多内存才能运行。据说现在的解释器限制了Python的语法实现,很多同学可能没有明显的感受,所以Guido又举了个例子:在Python3.8之前,下面的代码可以正常运行,不像大家直观的感受第二行代码应该报错。这是Python解释器无法处理的后遗症。这也导致Python团队在代码中添加了一些不受欢迎的“特例”来处理这些边缘情况。Guido说,Python刚出现的时候,内存还是很贵的,用LL(1)Parser是很合理的。但是,在现在这个内存以千兆字节为单位的时代,给解释器增加几百千字节甚至兆字节的内存消耗根本不算什么。所以是时候重构Python解释器以使用更理想的PEG解析器了。最后,也是大家最关心的问题,这次重构对Python语言的开发者会有什么影响?Guido说应该不会有影响,底层重构不会影响Python的语法。看来再成功的项目,也因为时代的局限,留下了一些不愉快的问题。完美的设计和实现从来都不是一蹴而就的~英文原文地址:https://medium.com/@gvanrossum_83706/peg-parsers-7ed72462f97c