python 编译器重构_Python之父考虑重构Python解释器
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
【编辑推荐】
【责任编辑:张燕妮 TEL:(010)68476606】
点赞 0
python 编译器重构_Python之父考虑重构Python解释器相关推荐
- python核心理念_Python 之父谈放弃 Python:我对核心成员们失望至极!
Python 之父讲述退位原因,以及 Python 的未来将何去何从. 在 Python 社区,Python 的发明者 Guido Van Rossum 被称为 "仁慈的终生独裁者" ...
- python部落稿酬_Python之父考虑重构Python解释器
作者:佚名来源:Python部落 7月22日,Python之父Guido在Medium上发表了他的第一篇博文<PEG Parser>. 在该文中,Guido说他正在考虑使用PEG Pars ...
- python核心编程第三版_Python之父:自学python,这3本书能节约你一大半时间编程...
今天给大家推荐三本书,有两本是属于一个系列,即<Python核心编程>第二版和第三版,一本讲基础和一本讲进阶,非常适合Python的初学者和有一定基础的学习者.还有一本书适合所有想学Pyt ...
- python编写异常处理_Python 简明教程 --- 23,Python 异常处理
要么做第一个,要么做最好的一个. 目录 我们在编写程序时,总会不自觉的出现一些错误,比如逻辑错误,语法错误和一些其它的运行时错误等. 逻辑错误: 这种错误不会导致程序崩溃,它不容易被发现,只有在执行结 ...
- python流行趋势_Python流行度再创新高,学Python就从风变编程开始
10月初,全球编程语言社区TIOBE公布了2020年10月编程语言排行榜,排名情况相较前几个月变化不大,前十名分别为C.Java.Python.C++ .C#.Visual Basic.JavaScr ...
- python开发全过程_python开发【一】python介绍
本章内容: python 介绍 python 入门知识(流程控制) 练习题 一.python介绍 python的创始人为吉多·范罗苏姆("龟叔").1989年的圣诞节期间,吉多·范 ...
- python编译器是用来干嘛的-python编译器和解释器的区别是什么
python编译器和解释器的区别是什么 发布时间:2020-09-09 13:53:59 来源:亿速云 阅读:109 作者:小新 小编给大家分享一下python编译器和解释器的区别是什么,相信大部分人 ...
- python模拟按键_python 模拟按键放在模拟器Python初学者的17个技巧
Python初学者的17个技巧,有需要的朋友可以参考下. W WW.002pc .COM认为此文章对<python 模拟按键放在模拟器Python初学者的17个技巧>说的很在理. 交换变量 ...
- python爬虫机器_Python常用的机器学习库|python爬虫|python入门|python教程
https://www.xin3721.com/eschool/pythonxin3721/ Python在科学计算中用途广泛:计算机视觉.人工智能.数学.天文等.它同样适用于机器学习也是意料之中的事 ...
最新文章
- 《游戏设计师修炼之道:数据驱动的游戏设计》一1.4小结
- Windows 11 上大招!正式支持安卓!
- 雷军公布小米高管团队:仅15位,常程位列其中
- nginx 负载均衡 最初级版本
- 一个模拟抛硬币的游戏
- 惠普m128fn中文说明书_惠普M128fn使用教程
- java抽象类和普通类_抽象类和普通类的区别是什么?java类和抽象类的区别
- 公司部门英文缩写简称收集
- Unity Spine 换装
- css3 cale()属性介绍以及自适应布局使用方法
- 十年终于读懂你——你从没见过的算法之美
- 可视化——Excel2进阶
- flv.js解决直播流延迟、断流重连以及画面卡死
- tensoflow2.6训练自己的图像分类
- Copyright 格式
- mt4支持python么_py-mt4
- UE5 官方案例Lyra 全特性详解 7.资源管理
- 商创网络带你看电商:租房免押金,你的芝麻信用多少分了?
- 设计模式(Java随笔)—备忘录模式
- java中 像素、英寸、厘米的换算
热门文章
- 015_获取并设置CSS类
- mysql数据库的增删改查命令_MySQL 初识别语句,数据库、表、行的增删改查
- response.setcharacterencoding 报错是缺哪个包_出街,你缺的是这一款包包...
- @mapperscan mapper还是无法引用_高能来了!Java的四大引用
- bread是可数还是不可数_小学英语语法名词 不可数名词详解
- arm linux移植jvm,JVM的ARM移植.PDF
- c语言简易绘图程序代码,简单的鼠标绘图程序
- java swing 表格不显示_JAVA SWING 表头不显示问题
- VS code 的变量设定
- 各种排序实现以及稳定性分析