5月中旬刚刚结束的Pycon US 2021上,Python之父Guido van Rossum提出要在未来四年内将CPython速度提升5倍。 而这一“Shannon计划”的参与者除了Guido本人之外,还有任职微软的CPython核心开发人员Eric Snow,以及Semmle的研究工程师Mark Shannon。 但在此之前,Guido可并不认为提升CPython的速度有多关键,因为“有其他方法可以获得更好的性能”,比如JIT编译的PyPy,或使用C语言编写扩展。 为什么要加速?Python真的慢吗? 不见得,开发效率和执行速度本就难以兼得。 而且发展到今天,Python已经是一个胶水语言的定位,主要用来快速构建系统的逻辑控制流,再把对性能要求高的部分丢给C/C 来实现。 不过如果只看标准版的语言实现本身的话……它的性能确实不怎么样。 动态语言的特性决定了Python会在C语言代码运行(runtime)上花费大量的时间,且难以使用JIT(Just-In-Time)进行优化。 在接受英国技术新闻网站The Register的采访时,对于“为什么开始关注CPython性能?”的问题,Shannon表示:
并且,Shannon之前参与的HotPy项目中所开发的解释器,比目前CPython解释器的纯Python代码快三倍。这证明了对CPython优化的可行性。 而在去年10月份的时候,耐不住退休寂寞的Guido又加入了微软: 再加上疫情的家里蹲buff,拥有了更多时间的大佬们一拍即合,决定Make Python Great Again。 加速之前的挑战Shannon坦言,向下兼容是加速Python的最大挑战。 其实不仅是对Python,90年代末libc的那次不兼容更新,直接导致所有应用程序都要重编…… 而现在已经凉凉的Pyston,官方文章里提到的Dropbox放弃Pyston项目的几大因素中,第一个也是: 这就是所有既试图兼容CPython,又想大幅提升性能的Python都会遇到的严峻问题。 因为Python的执行类似于HTML渲染:更多是对运行时应如何执行C库的描述,而非单步执行命令。 所以,Python性能提升的源头来自于这些C扩展模块。而CPython又有着超过400k的loc,这意味着要从底层去做优化是一项非常庞大的工程。 特别是对于过于动态的Python语言来说,语言的语义对优化的影响就更大了。 而现在加速的过程中,像是CPython的工具、调试器、配置文件,NumPy包,以及Cython这样的编译器,又会有多少涉及到CPython内部和底层的行为? 因此Shannon表示:
可能是五年前从Python2.x迁移到3的痛苦经历实在是有些刻骨铭心,Guido专门发推表示这次的迁移会更加平和。 而他也在Python峰会中承诺:不破坏stable ABI兼容性;不破坏limited API兼容性;不破坏或减缓extreme cases。 “总之,代码的可维护性才是第一要务。” Python的5倍速之路按照已在GitHub上发布的faster-cpython,Shannon计划具体分为四个阶段: Python 3.10 预计在今年10月发布,主要添加一个自适应、专业化的解释器(interpreter)。 解释器将不在运行时生成代码,而是利用程序中的类型稳定性,在执行过程中适应类型和数值。 Python 3.11 Guido提出要在3.11版本实现至少2倍的提速,为此,他已经和几位Python开发人员提出了一份增强功能的提案PEP 659。 这一提案中表示要增加适应性的字节码解释器,并且实施更有效的异常处理。 除此之外,还提出了优化帧堆栈、改变函数调用的方式、增加优化以加快启动时间,以及修改 .pyc 字节码缓存文件格式等工作。 Python 3.12 这一阶段使用针对小区域的JIT解释器,在运行代码时简单、快速地对小区域的专门代码进行编译。 Python 3.13 同样在代码运行时对扩展区域进行编译,增强编译器,以完成5倍的超级加速。 Guido表示此次围绕性能展开的 Python 变更,将主要服务于运行CPU密集型纯Python代码的开发者,以及内置Python网站的用户。 而在C语言代码(如 NumPy和TensorFlow)、I/O 绑定代码、多线程代码以及算法代码上,提升效果将会比较有限。 微软回馈Python其实,微软长期以来一直以多种方式为Python项目提供助力,包括在Azure云AI服务教程里发布免费的Python课程,以及通过VS Code Python扩展在Win10及以上版本支持Python。 自 2006 年起,微软还成为了Python软件基金会(PSF)的赞助商,并在今年出资15 万美元进行资助。 目前已有五位Python开发者社区的核心人员在微软任职,包括去年年底加入的Python之父,和这次Shannon计划里的三人之一Eric Snow。 Guido也在这次峰会里特地cue了一下微软,提出微软资助了一支小型Python团队“负责语言解释层面的性能改进工作”,以使他能携手微软同事持续对Python进行开发。 当然,对于3.11版本的短期目标,Guido还是在ppt中给自己兜了个底。 △“乐观一点,好奇一点总没错” 而对于那个四年五倍速的最终目标,Guido则表示“我们必须保持旺盛的创造力。” 参考链接: Python version 3.11.0 alpha 0: — 完 — 量子位 QbitAI · 头条号签约 关注我们,第一时间获知前沿科技动态 |
|