Python3 正在毁灭 Python的原因分析


Posted in Python onNovember 28, 2014

Python 3毫不费力地成为发生在Python社区里最糟糕的事。我还记得第一次使用Python的时候,我还在花大量时间在C++这块上,而Python就像是我的一次开光。我可以打开文本编辑器用几秒钟或者几分钟写出一个可以工作的程序,而不是用几小时或几天。我记得Python 2.5出来的时候,带来了一大堆崭新的简洁的语言特性。我爱Python,但是我承认它有弱点,但是没关系,所有编程语言都有。它强大的地方使其变得有趣。Python 3相比Python 2拥有一些小小的增量的改进,但同时却失去了很多Python 2强大的东西。

Python 2强大的一个地方是它身后巨大的第三方库,恩,可以做任何事。Python 3没有这个。是的,很多库已经移植了,但是仍然有数以十倍的库没有移植过去,而且也不太容易。举个例子,你需要解析X格式,而X解析起来并不简单,它不是常见的像YAML或JSON的格式。很有可能这个为X的解析器在Python 2里已经写好了,但是还没有移植到Python 3。另外,考虑到Python 2的字节字符串(str)和Python 3的字节字符串(bytes)之间的根本不同,移植起来将不会那么容易。事实上会很难移植,并且需要一点移植技巧,像维护Python 2和Python 3的兼容性那样。因此,你有一些选择,可以用Python 2(一个被弃用的语言)快速写你的app,导入一些库(还有它们所有的依赖),可能会有十倍之长;或者可以用另外的编程语言,它也有很多第三方库,但是不会面临Python 2/3的问题。第二个选择显然不是很流行,因为不然,我们就有大量Python 3写的app产品,然后Python 2的一大批库会被移植过来。(译者注:这个逻辑貌似有点问题?)这两种都没有发生。人们要么继续用Python 2写软件,要么选择另一个不自己打脸的语言。

另外一个Python 2的强大之处是用它写的程序几乎总是能够不用大量修改而运行在Python的下一个版本上。如果你的公司运营在用Python 2写的软件上(就像很多公司那样),移植到Python 3将会消耗大量资金,因为你的requirements文件可能十分大,并且充斥着各种还没有移植到Python 3的库。没有哪个理智的商业理由会花成百上千甚至百万美元价值的开发时间来移植到Python 3。如果相比更便宜的话,你都可能会要求某某把他们整个代码库移植到Ruby。现在如果你必须要重写你的软件的话,你会选择Python 3吗?不。

那些支持Python 2和3的比较流行的库几乎都只用该语言的子集,这样在两个平台上就都能运行。SQLAlchemy,我喜爱的Python库之一,它这样做的很好。Django也如此,但是做得不那么好。这个语言子集,我会称之为Python X,使用起来很没意思,需要一些奇淫技巧,并且通常没有Python 2或者Python 3强大。把Python 2的库移植到Python X有意思吗?很可悲的是一点意思都没有,因为令Python伟大的就是这些乐趣。

Python 2,很可悲,已经被弃用了。Python 3颓废得没人用。Python 3的改动不大。没有带来多少好处,但缺失去了很多。在过去的几个月,我用Python 3构建了一些项目和服务。我没有被它打败。这很像用Python 2写软件,除了只能获得很少的一些库。这里没有什么令人惊叹的事情。Python社区在过去的几年本应该转移到Python 3了,但是结果就是越来越明显看到人们转移到新的语言(或者重新发现的旧语言)上。这些语言有些也有很好的特性,像强大的输入系统,模式匹配,更出色的性能,更好的多线程和并发,更简单的外部函数接口(FFI),更漂亮的lambda语句等等。

一个方案是fork Python 2.7,然后继续发展这门语言,加入一些尽量向后兼容的特性,这样那些不能移植(由于一些财政方面的约束)的Python 2应用程序可以继续演进和改善,进而给那些投入如此多时间开发他们的公司或个人带来价值。这才是需要去做的正确的事(事实上,如果Guido和Python社区里其他主导人能够官方地做这件事,而不是强迫大家fork,那会是最好的)。Python 3里的特性可以向后移植到Python 2,然后发布Python 2.8。那些已经花时间用纯Python 3写新的软件的人可以使用例如3to2的工具变成与Python 2.8兼容。Python 3然后就可以为了Python库维护者们能够用Python 2代替Python X而安静地离去。

还有一些其他的方案,但是拯救Python 2显然是要做的正确的事,所以也不值一提了。Python 2的拯救不会来自官方,因为负责这类事的人表现出了对Python 2使用者极大的鄙视。如果社区的人不团结起来拯救Python 2,Python 3数年之后会成为Python的标准,然后很多库将要被移植(尽管很多肯定不会),然后很多的投入也将会白费。社区那时候会大量的萎缩,并失去往日的光芒。参考Perl。人们将把它遗忘。

Python 相关文章推荐
pymongo给mongodb创建索引的简单实现方法
May 06 Python
Using Django with GAE Python 后台抓取多个网站的页面全文
Feb 17 Python
python3+PyQt5实现文档打印功能
Apr 24 Python
python多个模块py文件的数据共享实例
Jan 11 Python
PyTorch使用cpu加载模型运算方式
Jan 13 Python
基于python3的socket聊天编程
Feb 17 Python
在服务器上安装python3.8.2环境的教程详解
Apr 26 Python
Python 在 VSCode 中使用 IPython Kernel 的方法详解
Sep 05 Python
python计算auc的方法
Sep 09 Python
Django和Ueditor自定义存储上传文件的文件名
Feb 25 Python
python状态机transitions库详解
Jun 02 Python
详解如何用Python实现感知器算法
Jun 18 Python
关于你不想知道的所有Python3 unicode特性
Nov 28 #Python
Python 2.7.x 和 3.x 版本的重要区别小结
Nov 28 #Python
用Python编写一个国际象棋AI程序
Nov 28 #Python
Python中给List添加元素的4种方法分享
Nov 28 #Python
Python列表(list)、字典(dict)、字符串(string)基本操作小结
Nov 28 #Python
跟老齐学Python之使用Python查询更新数据库
Nov 25 #Python
跟老齐学Python之使用Python操作数据库(1)
Nov 25 #Python
You might like
PHP IN_ARRAY 函数使用注意事项
2010/07/24 PHP
解析PHP中一些可能会被忽略的问题
2013/06/21 PHP
php 输入输出流详解及示例代码
2016/08/25 PHP
TP5框架实现签到功能的方法分析
2020/04/05 PHP
用roll.js实现的图片自动滚动+鼠标触动的特效
2007/03/18 Javascript
silverlight线程与基于事件驱动javascript引擎(实现轨迹回放功能)
2011/08/09 Javascript
jQuery选择器简明总结(含用法实例,一目了然)
2014/04/25 Javascript
JS控制表格实现一条光线流动分割行的方法
2015/03/09 Javascript
如何提高javascript加载速度
2016/12/26 Javascript
JS遍历对象属性的方法示例
2017/01/10 Javascript
详解Node.js利用node-git-server快速搭建git服务器
2017/09/27 Javascript
JavaScript实现删除数组重复元素的5种常用高效算法总结
2018/01/18 Javascript
简单的三步vuex入门
2018/05/20 Javascript
Vue模板语法中数据绑定的实例代码
2019/05/17 Javascript
layui 表单标签的校验方法
2019/09/04 Javascript
vue el-table实现行内编辑功能
2019/12/11 Javascript
vue 使用localstorage实现面包屑的操作
2020/11/16 Javascript
[42:32]VP vs RNG 2019国际邀请赛淘汰赛 败者组 BO3 第一场 8.21.mp4
2020/07/19 DOTA
python reduce 函数使用详解
2017/12/05 Python
如何利用Boost.Python实现Python C/C++混合编程详解
2018/11/08 Python
对python3 Serial 串口助手的接收读取数据方法详解
2019/06/12 Python
详解Python Qt的窗体开发的基本操作
2019/07/14 Python
详解Python设计模式之策略模式
2020/06/15 Python
前端水印的简单实现代码示例
2020/12/02 HTML / CSS
Dogeared官网:在美国手工制作的珠宝
2019/08/24 全球购物
配置管理计划的主要内容有哪些
2014/06/20 面试题
有abstract方法的类一定要用abstract修饰吗
2016/03/14 面试题
如何打造一封优秀的留学推荐信
2014/01/25 职场文书
房地产财务部员工岗位职责
2014/03/12 职场文书
团日活动总结
2014/04/28 职场文书
绿色环保演讲稿
2014/05/10 职场文书
公证委托书标准格式
2014/09/11 职场文书
股份转让协议书范本
2015/01/27 职场文书
在项目中使用redis做缓存的一些思路
2021/09/14 Redis
sass 常用备忘案例详解
2021/09/15 HTML / CSS
MIME类型中application/xml与text/xml的区别介绍
2022/01/18 HTML / CSS