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解释器相关推荐

  1. python核心理念_Python 之父谈放弃 Python:我对核心成员们失望至极!

    Python 之父讲述退位原因,以及 Python 的未来将何去何从. 在 Python 社区,Python 的发明者 Guido Van Rossum 被称为 "仁慈的终生独裁者" ...

  2. python部落稿酬_Python之父考虑重构Python解释器

    作者:佚名来源:Python部落 7月22日,Python之父Guido在Medium上发表了他的第一篇博文<PEG Parser>. 在该文中,Guido说他正在考虑使用PEG Pars ...

  3. python核心编程第三版_Python之父:自学python,这3本书能节约你一大半时间编程...

    今天给大家推荐三本书,有两本是属于一个系列,即<Python核心编程>第二版和第三版,一本讲基础和一本讲进阶,非常适合Python的初学者和有一定基础的学习者.还有一本书适合所有想学Pyt ...

  4. python编写异常处理_Python 简明教程 --- 23,Python 异常处理

    要么做第一个,要么做最好的一个. 目录 我们在编写程序时,总会不自觉的出现一些错误,比如逻辑错误,语法错误和一些其它的运行时错误等. 逻辑错误: 这种错误不会导致程序崩溃,它不容易被发现,只有在执行结 ...

  5. python流行趋势_Python流行度再创新高,学Python就从风变编程开始

    10月初,全球编程语言社区TIOBE公布了2020年10月编程语言排行榜,排名情况相较前几个月变化不大,前十名分别为C.Java.Python.C++ .C#.Visual Basic.JavaScr ...

  6. python开发全过程_python开发【一】python介绍

    本章内容: python 介绍 python 入门知识(流程控制) 练习题 一.python介绍 python的创始人为吉多·范罗苏姆("龟叔").1989年的圣诞节期间,吉多·范 ...

  7. python编译器是用来干嘛的-python编译器和解释器的区别是什么

    python编译器和解释器的区别是什么 发布时间:2020-09-09 13:53:59 来源:亿速云 阅读:109 作者:小新 小编给大家分享一下python编译器和解释器的区别是什么,相信大部分人 ...

  8. python模拟按键_python 模拟按键放在模拟器Python初学者的17个技巧

    Python初学者的17个技巧,有需要的朋友可以参考下. W WW.002pc .COM认为此文章对<python 模拟按键放在模拟器Python初学者的17个技巧>说的很在理. 交换变量 ...

  9. python爬虫机器_Python常用的机器学习库|python爬虫|python入门|python教程

    https://www.xin3721.com/eschool/pythonxin3721/ Python在科学计算中用途广泛:计算机视觉.人工智能.数学.天文等.它同样适用于机器学习也是意料之中的事 ...

最新文章

  1. 《游戏设计师修炼之道:数据驱动的游戏设计》一1.4小结
  2. Windows 11 上大招!正式支持安卓!
  3. 雷军公布小米高管团队:仅15位,常程位列其中
  4. nginx 负载均衡 最初级版本
  5. 一个模拟抛硬币的游戏
  6. 惠普m128fn中文说明书_惠普M128fn使用教程
  7. java抽象类和普通类_抽象类和普通类的区别是什么?java类和抽象类的区别
  8. 公司部门英文缩写简称收集
  9. Unity Spine 换装
  10. css3 cale()属性介绍以及自适应布局使用方法
  11. 十年终于读懂你——你从没见过的算法之美
  12. 可视化——Excel2进阶
  13. flv.js解决直播流延迟、断流重连以及画面卡死
  14. tensoflow2.6训练自己的图像分类
  15. Copyright 格式
  16. mt4支持python么_py-mt4
  17. UE5 官方案例Lyra 全特性详解 7.资源管理
  18. 商创网络带你看电商:租房免押金,你的芝麻信用多少分了?
  19. 设计模式(Java随笔)—备忘录模式
  20. java中 像素、英寸、厘米的换算

热门文章

  1. 015_获取并设置CSS类
  2. mysql数据库的增删改查命令_MySQL 初识别语句,数据库、表、行的增删改查
  3. response.setcharacterencoding 报错是缺哪个包_出街,你缺的是这一款包包...
  4. @mapperscan mapper还是无法引用_高能来了!Java的四大引用
  5. bread是可数还是不可数_小学英语语法名词 不可数名词详解
  6. arm linux移植jvm,JVM的ARM移植.PDF
  7. c语言简易绘图程序代码,简单的鼠标绘图程序
  8. java swing 表格不显示_JAVA SWING 表头不显示问题
  9. VS code 的变量设定
  10. 各种排序实现以及稳定性分析