Python之父考虑重构Python解释器

新闻 后端
7月22日,Python之父Guido在Medium上发表了他的第一篇博文《PEG Parser》。

 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部落
相关推荐

2022-08-08 08:10:42

Antlr解释器工具

2016-09-12 14:05:27

PythonPython解释器Web

2015-08-21 10:14:17

Python 之父Python

2015-08-20 10:05:15

Python

2010-02-03 15:01:33

Python 解释器

2010-02-01 17:11:45

Python 解释器

2023-10-18 10:48:44

Python解释器

2022-01-05 08:58:08

Python解释器编程语言

2014-01-21 09:42:32

Python代码对象

2010-02-01 17:41:54

Python 解释器

2010-02-22 16:40:22

Python解释器

2010-03-04 11:07:21

Python解释器

2014-01-21 09:15:12

Python函数

2010-02-01 13:55:12

Python 解释器

2019-10-31 15:13:11

Python

2021-06-07 11:40:26

Python命令代码

2018-09-18 15:58:46

硬盘JVMPython

2023-06-25 11:36:00

Numpy数据分析场景

2013-09-03 10:20:10

SlashdotPythonPython之父采访

2021-05-26 16:10:00

Python 开发编程语言
点赞
收藏

51CTO技术栈公众号