阅读更多

0顶
0踩

编程语言

转载新闻 为什么说Python4.0不会像Python3.0一样

2014-09-22 14:42 by 见习编辑 u012797015 评论(2) 有9991人浏览

python-ideas的新手会在没有为从目前合法的Python3代码提供一个清晰的迁移路径的向后兼容性改变提议时偶尔提到"Python 4000"的想法。毕竟,我们允许Python3.0不向后兼容,为什么我们不能允许Python 4.0也这样做呢?

 

我听到了很多质疑(包括"你造成过一次向后兼容的严重破坏,我怎么知道你不会再次破坏?"这样的心声),我想在此记录我的回答,以便日后可以向人们提及。

 

目前对 Python 4.0 有哪些期待?

 

我目前的期待是 Python 4.0 仅是"Python 3.9 之后的另一个发行",仅此而已。没有重大的语言改变,没有重大向后兼容性的破坏——从 Python 3.9 到 4.0 的平滑过渡应和从 Python 3.3 到 3.4(或者是从 2.6 到 2.7)一样。我甚至期待着稳定的应用二进制接口在过渡中可以保留。

以目前大概每十八个月的语言特性发行速度,我们将在2023年的一个时间见到 Python 4.0,而不是Python 3.10。

 

Python 会怎样继续演进?

 

首先也是最重要的,Python改进提议过程并没有改变——加入了新模块(如asyncio)和语言特性(如yield from)以改进Python应用性能的向后兼容一直在议程之上。随着时间的流逝,Python3凭借默认提供的性能将继续拉大与Python 2的差距,即使Python 2用户通过第三方模块或Python 3的补丁达到和Python 3一样的性能。

 

解释器的实现和扩展也会继续探索改进Python的不同方法,包括PyPy's对JIT-编译器和软件业务内存的探索,对科学的和数据分析社区在充分发挥现代CPU和GPU提供的向量性能的面向数组编程的探索。与其他虚拟机运行时的整合(如JVM和CLR)也会随着时间改进,尤其随着Python成功进入教育领域,使其作为运行在那些虚拟机环境中的大型应用中使用的嵌入脚本语言变得更加流行。

 

PEP 387 为向后兼容提供了一个在 Python 2系列使用多年并且今天仍然适用的合理的解决方案概览:如果一个语言特性问题重重,那么它可以被反对最终移除。

不管怎样,一些开发和发行过程的其他改变使得Python3系列之内不太可能存在被反对的语言特性:

  • CPython核心开发团队和Python Packaging Authoriy之间的协作,Python3.4+绑定的pip安装器,都更加强调的Python Package Index,减少了模块在适应相对较慢的语言更新周期中变得充分稳定之前向标准库添加模块的压力。
  • PEP 411引入的"临时API”概念使得向后兼容可能在受益于广泛反馈的库和API提供标准向后兼容保证之前对它们使用"安置"时间。
  • 在Python3的过渡中清除了过去积累的语言问题,并且Python新特性和标准库的需求比Python1.x和Python2.x时代更加苛刻。
  • 广泛的"single source"Python 2/3库和框架开发极大鼓励了"documented deprecation“在Python3中的使用,即使当特性被新的、首选的、可选的特性替代。在这些情况下,文档中写入了反对注释,意味着该方法是新代码的首选,但纲领性的反对警告没有加入。这允许Python2和Python3都支持的现存代码无需改动(需要新的用户在维护现存代码库时学习稍微多一些的"documented deprecation")。

从英语居多到全语言

 

Python3对向后兼容的破坏出乎意料也不值一提。在Python3中所有的向后兼容改变中,许多严重的迁移阻碍归罪于PEP 3100的一个小着重号(●):

  • 所有的字符串均使用Unicode字符编码,拥有一个单独的bytes()类型。新字符串类型将命名为'str‘。

PEP3100 是Python3的改变被认为最没有争议的终点——没有单独的PEP必需考虑。这个特别的改变被认为是没有争议的原因是我们在Python2上的经验表明web和GUI框架的作者们是对的:作为一个应用开发者敏感地处理Unicode意味着确保所有的文本数据从二进制尽可能的转换到系统边界,以文本来操作,再转换为二进制输出。

 

不幸的是,Python2没有鼓励开发者那样写程序——它大范围地模糊了二进制数据和文本的界限,使开发者在头脑中区分这两者变得困难,更不用说他们的代码。所以web和GUI框架作者必需告诉他们的Python2用户"使用Unicode文本,否则会在处理Unicode文本输入时因为晦涩和难以追踪bugs受罪。"

Python3改进了这个问题:它在"二进制域"和"文本域"之间加入了强制分离,使编写普通应用更加简单,同时也使编写工作在二进制和文本数据的区别不是那么清晰的系统界限代码时更加困难。关于Python2和Python3之间的文本模型改变的更多细节我写在这里

 

Python的Unicode支持正在演进,这和计算文本操作从English-only的ASCII(1963年正式定义)开始,一路经过"二进制数据+编码声明"的复杂模式(包括二十世纪八十年末引进的C/POSIX locale和Windows code page系统)和Unicode标准的原始16位only版本(1991年发布),向相对广泛的现代Unicode代码点系统 (1996年定义,每几年发布重大更新)迁移的大背景相悖。

 

为什么提及这一点呢?因为这种“默认Unicode”的转变是Python3最具破坏性的向后兼容性改变,不同于其他更多是语言特定的改变,它是文本数据呈现和操作更广泛的行业改变的冰山一隅。随着通过Python3过渡时语言特定问题的清除,比早期的Python更高的语言特性门槛和没有其他从"二进制数据编码"向文本模型当前使用的Unicode编码这样大规模的行业范围迁移的转变,让我看不到会需要一个类似Python3的向后兼容性破坏和平行支持时期的改变到来。相反,我期待我们可以容纳任何正常改变管理过程中的未来语言演进,任何不能以这种方式处理的提议都将被当做强加在社区和核心开发团队上不可接受的高昂代价而被拒绝。

0
0
评论 共 2 条 请登录后发表评论
2 楼 ray_linn 2014-09-25 12:41
翻译如同狗屁,没那金钢钻别揽那个瓷器活。
1 楼 zhaozengguang 2014-09-22 16:29
好强的电子词典味道,直接放英文原版更加容易理解一点。

发表评论

您还没有登录,请您登录后再发表评论

相关推荐

  • Hadoop生态圈技术栈(上)---hive

    第一部分 Hive安装与配置 第 1 节 Hive安装配置 Hive官网:http://hive.apache.org ...安装前提:3台虚拟机,安装了Hadoop 安装软件:Hive(2.3.7) + MySQL (5.7.26) 备注:Hive的元数据默认存储在自带的 derby 数

  • 这一年,这些书:2021年读书笔记

    Note: 以下 markdown 格式文本由 ...出版社:北京十月文艺出版社 出版日期:2019-02-28 图书标签:张爱玲,短篇小说,文学,红玫瑰与白玫瑰,小说 豆瓣地址: https://book.douban.com/subject/30294358/ 阅读日期:2021-01

  • HTTP/2 基础教程

    2012 年 10 月,HTTP 工作组被授权发布 HTTP/2,使用 SPDY 作为起点。之后的两年间,来自各个公司和开源项目的代表在各地碰面讨论这个新的协议,解决其中的问题,并确保彼此的实现能互相兼容。 在这个过程中,我们有...

  • Hive入门详解操作

    FaceBook网站每天产生海量的结构化日志数据,为了对这些数据进行管理,并且因为机器学习的需求,产生了hive这门技术,并继续发展成为一个成功的Apache项目。hive是一个构建在Hadoop上的数据仓库工具(框架),可以将...

  • Hive函数

    Hive函数整体分类 Hive官方文档地址: https://cwiki.apache.org/confluence/display/Hive/LanguageManual+UDF 转载地址: ... 1、Hive函数介绍以及内置函数查看 ...1)查看系统自带的函数 ...3)详细显示自带的函数的用

  • hive 函数汇总

    本文主要涉及以下几个大面: 一、Hive函数介绍以及内置函数查看 内容较多,见《Hive官方文档》 https://cwiki.apache.org/confluence/display/Hive/LanguageManual+UDF 1)查看系统自带的函数 hive> show ...

  • 【2021首发】《2020博客之星年度总评选》拉票ing...

    16年12月份正式加入CSDN,四年来,凭借坚持与热爱,以文字的方式分享所玩、所想、所思、所悟,截止目前累计更新博文数量达800余篇,受益人次达131万余次,涉及领域包括但不限于物联网开发、单片机开发、Linux驱动...

  • Hive从入门到高级

    目录 一、Hive的简介 1.1 出现的原因 1.2 hive是什么 ...三、hive的安装模式 3.3 远程模式 3.3.1 概念 3.3.2 hive的服务端的配置 3.3.3 服务项的启动操作 3.3.4 客户端连接hiveserver2 3.3.5

  • 【转】真正的ACMer

    真正的ACMer 上海交大 戴文渊 大牛写的东西,建议大家看看 yiyiyi4321 2007-07-10 13:49:30.0..._c=BlogPart&partqs=cat%3d%25e7%25ab%259e%25e8%25b5%259bup yiy...

  • JAVA开发常见单词(*)

    3.scan:浏览、扫描。4.Interval:间隔、间歇。5.load:负载、装载、加载。6.balance:平衡、均衡。7.idle:懒惰的、闲置的。8. retry:复审、重试。9.attempt:企图、试图。10.sentinel:哨兵。11.charts:图表,...

  • 传智播客 .NET面试宝典(2015版)

    1.众所周知,随便拿出一个中等大小的项目,也需要好多个熟练的开发人员开发好多个月才能勉强做得差不多,培训期间没有这么多时间,并且你还要先学会了很多技术后才能开始做项目。 2.一个项目中的很多东西都是重复性...

  • .Net工程师面试笔试宝典

    .Net工程师面试笔试宝典 传智播客.Net培训班内部资料 ... 这套面试笔试宝典是传智播客在多年的教学和...很多学员面试回来都会说“这次面试出的题几乎都在面试笔试宝典上有”,比如下面就是一个老学员的来信: ...

  • 传智播客 .NET面试宝典(2014版)

    由于这套面试题涉及的范围很泛,很广,很杂,大家不可能一天两天就看完和学完这套面试宝典,即使你已经学过了有关的技术,那么至少也需要一个月的时间才能消化和掌握这套面试宝典,所以,大家应该早作准备,从拿到这...

  • C#笔试面试精华 转

    //因为两个3被装到了两个箱子中,所以是false Equals ==的关系 12、CTS、CLS、CLR分别作何解释(*)把英文全称背过来。 C#和.Net的关系。 C#只是抽象的语言,可以把C#编译生成Java平台的二进制代码,也...

  • 创业圣经《从0到1》读书笔记合集

    九十年代末互联网泡沫 互联网泡沫(又称科网泡沫或dot泡沫)指自1995年至2001年间的投机泡沫,在欧美及亚洲多个国家的股票市场中,与科技及新兴的互联网相关企业股价高速上升的事件,在2000年3月10日NASDAQ指数到达...

  • .net 基础面试题

    1、简述 private、 protected、 public、 internal 修饰符的访问权限。 private : 私有成员, 在类的内部才可以访问。 protected : 保护成员,该类内部和继承类中...2、ADO.NET中的五个主要对象 Connection:主...

  • 分享DotNet面试宝典

    学历一栏怎么着也不能写为高中,起码也要写个大专或以上,毕业院校编个二线城市的不知名的小学院,如果你不愿意去做假证,等到别人面试你时,再说“闲弃以前上的学校不好,因为对编程太感兴趣,就辍学了!...

  • .NET工程师面试宝典

    .Net工程师面试笔试宝典 传智播客.Net培训班内部资料 ...很多学员面试回来都会说“这次面试出的题几乎都在面试笔试宝典上有”,比如下面就是一个老学员的来信: 这套面试题主要目的是帮助那些还没有.Ne...

  • C#笔试面试宝典值得收藏1

    因为两个3被装到了两个箱子中,所以是false Equals == 的关系 12 、CTS、CLS、CLR分别作何解释(* )把英文全称背过来。 C#和.Net的关系。 C#只是抽象的语言,可以把C#编译生成Java平台的二进制...

  • 面试加笔试大全

    第三个想法是利用lambda表达式,先与委托挂接,同时利用局部变量的调用,来实现参数传递到sendResponse函数中,以便后续操作。 代码如下:  private void test(Socket requestHandleSocket) { linkOuterSocket....

Global site tag (gtag.js) - Google Analytics