Python 3 这十年
本来想写点关于 Andrew Godwin - Taking Django Async 这个视频的,但是因为这个视频信息量太大,还在多刷之中,所以我决定写另外一个视频的解析
来自 CPython 核心开发者的一个分享 Python 3这十年
Python 3 在 2008 年正式发布,风风雨雨也走过了整整十年。同时官方早已宣布,在 2020 年对 Python 2.x 停止维护。所以某种意义上来讲,今年的 PyCon 2018 的这个 Topic 是一个非常具有特殊意义的分享
初始之地
故事开始于那个难忘的夏天
在 2006 年,PEP 3000 正式提出,旨在于解决一些 Python 2 中的遗留问题
-
大整数与整数的分裂,新式类与旧式类的分裂
-
除法的实现谁的姿势水平更高一点
-
Unicode / str 傻傻分不清楚
-
相对引入和绝对引入
在经过社区的辛勤工作后,在 2008 年,Python 3 正式发布
正当开发者们欢天喜地的庆祝 Python 3 发布的时候,他们没有注意到,事情正在起变化
凛冬将至
Python 3 首当其冲的问题便是版本割裂,开发者们的迁移代价十分的巨大。分享里,开发者讲了一个冷笑话。
在早期 Python 3.x 和 Python 2.x 都没有引入一些兼容特性的时候,对于社区而言,版本割裂似乎是无可避免的一件事
在当时 Python 2.6 和 Python 3 中,如果想进行迁移,可能会面临这样一些问题
这样的问题,导致在 Python 3 最开始推出的时候,基本没有包能去兼容他
同时开发者举了两个当时的老大难的例子,一个是 Django,一个是 Twisted
为了不被人砍死,社区一度有人喊出了 Python 2.8 的口号!
但是随着情况的改善,社区喊出了「2.8是不可能的,这辈子都是不可能」的口号
知春到
随着 Python 3 的逐渐迭代与妥协,凛冬已过。首先开发者解决了第一个大问题:包管理
同时社区也正式给出了一些真正可行的迁移建议
同时针对于历史代码比较多的情况,也给出了相对应的 tips
(注:这一点,instagram 起了一个好头,参见 Lisa Guo, Hui Ding Keynote PyCon 2017)
同时社区的开发者,也在对 Python 3 进行一些迭代,以减少大家的迁移负担
其中包括但是不仅限于 PEP 414 重新引入 u''
,PEP 461 重新引入 b'%'
。
社区的努力没有白费,在迁移成本减小,利好增加的情况下,2/3 割裂的情况得到了极大的改善
在 2018 年所做的一个调查中,支持 Python 3 的包所占的比例已经达到了 90+%
社区的迁移动力来自于三方面,一方面是 Python 3 的性能实打实的提升,开发者举了两个例子,
另外一个是 instagram 给出的数据:
第二个方面是修复了过去 Python 2.x 中遗留下的一些坑
包括不仅限于 Python 2 中的随机数种子并不是真的随机等等。
另一方面是 Python 3 中所引入了很多全新的东西,来帮助开发者更好的写代码,比如在 Python 3 中引入了这样一些新的 module
其中比较重头戏的几个就是,PEP 3156 引入的 asyncio , PEP 3148 引入的 future 模型,PEP 557 引入的 DataClass
等等
于此同时,Python 3.x 除了引入新的 module 以外,还不断地带来了新的语言特性
比如 PEP 498 引入 f-string , PEP 492 引入 async/await , PEP 484 引入 Type Annotation(再次安利这货啊,可以单独写文章介绍了,简直神器)等等
最后,分享者给大家分享了一下 Python 2 现在的境况。
To Be Continued
Python 2/3 的这十年,无疑是 Python 史亦或者是计算机史上最重大的一次事件之一。我们见证了 Python 的成长,也见证了 Python 开发组们的前辈的成长。所以这十年,对于我们每一个 Python 开发者而言都是意义重大的十年。
不管 Python 的未来会怎么样,下一个十年里,Python 又会变成什么模样。衷心祝愿我们每一个人都能一如既往的尽情享受写 Python 的乐趣与成就感。
Life is simple, We use Python !
近期评论