为什么 Python 4.0 会与 Python 3.0 不同?

不管我们如何希望PHP永远天下第一,亦或是Java永久无敌,更或者希望C语言永远是最好的语言。

然而,笔者今天搜索百度指数得知,Python的指数,已经高于Java和PHP的指数之和。

而Python的版本迭代也是嗖嗖的,那么新版本4.0和3.0究竟有什么区别呢?今天分享一篇Python软件基金会的董事会成员、CPython的核心开发人员Nick Coghlan的文章,希望你会感兴趣。


笔者今天在百度指数的搜索结果


一些刚刚接触Python思想的人,会提出无法向后兼容的修改建议,这些建议并没有针对,当前合法的Python 3代码,给出明确的移植方案,而他们偶尔会提及Python 4000的思想。毕竟,Python 3.0时,我们允许了这类改动,为什么Python 4.0就不允许呢?

这样的问题我已经听过很多次了(包括有人非常担心地说:“你已经让向后兼容性遭到了一次破坏,我怎么知道你还会不会再来一次?”),我觉得我应该把我的答案写下来,将来有人问及,我就可以让他们来看这篇文章。


01:Python 4.0目前的期望是什么?

我目前的期望是:Python 4.0仅仅只是“Python 3.9之后的一个版本”。仅此而已。语言没有深刻的变化,也没有重大的向后兼容性问题,从Python 3.9到4.0,应该像从Python 3.3到3.4(或从2.6到2.7)一样平安无事。我甚至希望在版本升迁之际,应用程序的二进制接口(PEP 384引入的功能),能够保持稳定。

按照目前的语言功能的发布速度(大约每18个月发布一次),这意味着我们可能会在2023年看到Python 4.0,而不会有Python 3.10了。


02:那么Python将如何继续发展呢?

首先,也是最重要的,PEP流程没有任何变化,仍将持续提出向后兼容的更改,并将添加新模块(如asyncio)和语言功能(如yield from)等,以增强Python应用程序能够使用的功能。

随着时间的推移,Python 3在功能方面,将领先Python 2越来越多,即使Python 2用户,可以通过第三方模块或Python 3的后向移植,获得同等功能,也无法赶上Python 3的功能。

不同解释器实现和扩展的互相竞争,将继续探索增强Python的不同方法,包括PyPy关于JIT编译器生成和软件事务内存的尝试,以及科学和数据分析社区,对面向数组编程的探索(这种方式充分利用了,现代CPU和GPU所提供的向量化功能)。

与其他虚拟机运行时(如JVM和CLR)的集成,也有望随着时间的推移,而改进,尤其是在教育领域取得的进展,可能会让Python作为更受欢迎的嵌入式脚本语言,在更大的应用程序中运行。

对于一些无法向后兼容的更改,PEP 387提供了一个合理的方法,该方法在Python 2系列中使用多年,并且今天仍然适用:即如果认为某个功能,会引起很大的问题,那么可以将其标记为弃用,最终将其删除。

但是,开发和发布过程中,发生的许多其他更改,并不太可能在Python 3系列中被标记为弃用:

• 这里主要强调一下Python包仓库,这是CPython核心开发团队和Python Packaging Authority通力协作的成果,而且Python 3.4+捆绑了pip的安装程序,减少了向标准库添加模块的难度,即使你还不确定它们,足够稳定以适应相对较慢的语言更新周期。

• “临时API”概念(由PEP 411引入),可以在提供标准的向后兼容性保证之前,允许你设置“过渡期”来获得更广泛的回馈,从而有助于库和API的构建。

• 很多累积下来的遗留行为,在Python 3转换过程中,得到了确实的解决,现在对Python和标准库新增功能的要求,也比Python 1.x和Python 2.x时期要严格得多。

• “单一来源”的Python 2/3库和框架,被广泛接受,极大地鼓励了在Python 3中使用“弃用功能文档”,即使这些功能被新的、更好的功能替代。在这些情况下,文档中设置的弃用通知,会建议新代码应当使用的方法,但不会产生程序上的弃用警告。这样一来现有代码(包括支持Python 2和Python 3的代码),可以保持不变(相应的代价是:新用户在面对维护现有代码库的任务时,可能需要学习的内容会稍微多一些)。


03:从英语到所有语言

还有一点值得一提的是,Python 3本来没打算,像现在这样具有破坏性。在Python 3中所有无法向后兼容的改变中,许多严重阻碍代码移植的困难,都可以归结为PEP 3100中的一点上:

• 让所有字符串都变成Unicode,并且拥有单独的bytes()类型。新的字符串类型将被称为'str'。

PEP 3100汇总了Python 3中所有争议性不大、从而没有必要单独建立PEP的改动。这个特殊的变化,被认为无争议的原因是:因为我们使用Python 2的经验表明,Web和GUI框架的作者是正确的,即作为应用程序开发人员明智地使用Unicode意味着,确保所有的文本数据,都可以从二进制尽可能地转换为系统的文本操作,然后在输出时转换回二进制。

遗憾的是,Python 2并不鼓励开发人员,以这种方式编写程序,这大大模糊了二进制数据和文本之间的界限,并使开发人员很难将两者区分开,更不用说代码了。

因此,Web和GUI框架作者,必须告诉他们的Python 2的用户“使用Unicode文本。否则你就会在处理Unicode输入时,遇到捉摸不定、难以跟踪的bug”。

Python 3则不同:它在“二进制”和“文本”之间,做了更大的分离,使得编写正常的应用程序代码更加容易,但也使得在那些二进制和文本数据的区别,不那么清晰。

Python对Unicode的支持的这场革命,针对的是更大的关于计算文本操作移植的背景:从只有英文的ASCII(1963年正式定义),到“二进制数据+编码声明”模型(包括20世纪80年代后期,引入的C/POSIX语言环境和Windows代码页系统),以及最初的16位Unicode标准版本(1991年发布)到相对全面的现代Unicode代码点系统(1996年首次定义,每隔几年都有一次最新的主要更新)。

为什么要提这一点?因为改变到“默认使用Unicode”,是Python 3中最具有破坏性的、无法向后兼容的改动,而且与其他(更依赖于具体语言特性的)改动不同,它只是如何表示和操作文本数据这项大范围的改动中的一小部分。

随着Python 3转换清除了一些语言特定的问题,与Python早期相比,新的语言功能的门槛提高了很多,而且没有任何波及业界的移植的规模,比得上目前正在进行的,从“带编码的二进制数据”到用于文本建模的Unicode的切换。

所以我并不觉得,以后会有任何改动,能像Python 3这样,造成破坏向后兼容、并且需要并行支持期间。相反,我希望我们,能够在正常的变更管理流程中,适应任何未来的语言演变,任何无法以这种方式处理的提案,都会被拒绝,因为它会给社区和核心开发团队,带来高得令人无法接受的成本。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 195,898评论 5 462
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 82,401评论 2 373
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 143,058评论 0 325
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,539评论 1 267
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,382评论 5 358
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,319评论 1 273
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,706评论 3 386
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,370评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,664评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,715评论 2 312
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,476评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,326评论 3 313
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,730评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,003评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,275评论 1 251
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,683评论 2 342
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,877评论 2 335

推荐阅读更多精彩内容