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 相关文章推荐
编写同时兼容Python2.x与Python3.x版本的代码的几个示例
Mar 30 Python
python在windows下创建隐藏窗口子进程的方法
Jun 04 Python
git使用.gitignore设置不生效或不起作用问题的解决方法
Jun 01 Python
python简单鼠标自动点击某区域的实例
Jun 25 Python
python中的反斜杠问题深入讲解
Aug 12 Python
Python使用mongodb保存爬取豆瓣电影的数据过程解析
Aug 14 Python
简单了解python装饰器原理及使用方法
Dec 18 Python
python 实现在无序数组中找到中位数方法
Mar 03 Python
Python子进程subpocess原理及用法解析
Jul 16 Python
详解python datetime模块
Aug 17 Python
Pytorch实现WGAN用于动漫头像生成
Mar 04 Python
Python实现查询剪贴板自动匹配信息的思路详解
Jul 09 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
模拟OICQ的实现思路和核心程序(三)
2006/10/09 PHP
PHP 数字左侧自动补0
2008/03/31 PHP
防止用户利用PHP代码DOS造成用光网络带宽
2011/03/01 PHP
php 随机排序广告的实现代码
2011/05/09 PHP
php 生成签名及验证签名详解
2016/10/26 PHP
浅谈php中curl、fsockopen的应用
2016/12/10 PHP
php 与 nginx 的处理方式及nginx与php-fpm通信的两种方式
2018/09/28 PHP
Laravel5.5 手动分页和自定义分页样式的简单实现
2019/10/15 PHP
javascript css在IE和Firefox中区别分析
2009/02/18 Javascript
理解JavaScript的caller,callee,call,apply
2009/04/28 Javascript
让alert不出现弹窗的两种方法
2014/05/18 Javascript
JavaScript之Object类型介绍
2015/04/01 Javascript
JQuery boxy插件在IE中边角图片不显示问题的解决
2015/05/20 Javascript
分享一个精简的vue.js 图片lazyload插件实例
2017/03/13 Javascript
Vue中使用clipboard实现复制功能
2018/09/05 Javascript
vue中导出Excel表格的实现代码
2018/10/18 Javascript
vue限制输入框只能输入8位整数和2位小数的代码
2019/11/06 Javascript
Vue.js 实现地址管理页面思路详解(地址添加、编辑、删除和设置默认地址)
2019/12/11 Javascript
如何解决jQuery 和其他JS库的冲突
2020/06/22 jQuery
[01:03:27]NAVI vs EG 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/17 DOTA
Python查看多台服务器进程的脚本分享
2014/06/11 Python
Python的Flask框架中SQLAlchemy使用时的乱码问题解决
2015/11/07 Python
详解Python操作RabbitMQ服务器消息队列的远程结果返回
2016/06/30 Python
python数据结构学习之实现线性表的顺序
2018/09/28 Python
对pytorch网络层结构的数组化详解
2018/12/08 Python
Python机器学习之scikit-learn库中KNN算法的封装与使用方法
2018/12/14 Python
python实现QQ空间自动点赞功能
2019/04/09 Python
pycharm中导入模块错误时提示Try to run this command from the system terminal
2020/03/26 Python
python如何实现读取并显示图片(不需要图形界面)
2020/07/08 Python
python 无损批量压缩图片(支持保留图片信息)的示例
2020/09/22 Python
浅谈关于html5中图片抛物线运动的一些心得
2018/01/09 HTML / CSS
小学节能减排倡议书
2014/05/15 职场文书
网站推广策划方案
2014/06/04 职场文书
捐款感谢信
2015/01/20 职场文书
python实战之一步一步教你绘制小猪佩奇
2021/04/22 Python
numpy array找出符合条件的数并赋值的示例代码
2022/06/01 Python