Python需要改变吗?

2020-10-25 15:53:20

开源编程语言Python已经成为少数几种不会很快消失的语言之一。在最著名的语言普及度指数中,它是最受欢迎的两种语言中的第一名或前两名之一,这些天来,它甚至看起来将击败Java。

但是35岁的巨蟒确实有它的弱点。不一定是针对围绕像NumPy和Skipppy这样的Python扩展构建的数据科学和机器学习社区,而是作为一种通用编程语言。

根据IEEE Spectrum‘s电气工程听众的说法,Python是最受欢迎的语言,但你不能在浏览器中运行Python,也不能轻易在智能手机上运行它。另外,现在没有人用Python构建游戏。

为了构建浏览器应用程序,开发人员倾向于使用JavaScript、微软的类型安全解决方案、TypeScript、Google Made Go,甚至是古老但值得信赖的PHP。在移动设备上,既然有Java、兼容Java的Kotlin、苹果的Swift或谷歌的Dart,为什么应用程序开发人员还要使用Python呢?

Python甚至不支持编译到WebAssembly运行时,WebAssembly运行时是由Mozilla、微软、谷歌、苹果、英特尔、Fastly、RedHat和其他公司支持的Web应用标准。

这些只是Armin Ronacher提出的一些限制,Armin Ronacher是一位在Python方面有很长历史的开发人员,他在10年前创建了广受欢迎的Flask Python微框架,以解决他在用Python编写Web应用程序时遇到的问题。

来自奥地利的Ronacher是美国初创公司Sentry的工程总监,这是一家开源项目和科技公司,GitHub、Atlassian、Reddit和其他公司的工程和产品团队使用它来监控由于前端、后端或移动应用本身出现故障而导致的用户应用崩溃。

“哨兵”的大部分内容都是用Python编写的,这让它与Instagram、Netflix和Dropbox等依赖Python的科技公司相提并论。一年前,Python的创始人吉多·范罗萨姆(Guido Van Rossum)宣布从Dropbox退休。2018年,他辞去了巨蟒慈善终身独裁者一职。

虽然罗纳赫今天对Flask贡献不大--因为他对Python新的数据科学功能不感兴趣--但它在部署机器学习模型方面变得很受欢迎,这要归功于大量的教程和教授机器学习的大学课程。在IDE制造商JetBrains的2018年Python开发者调查中,Flask是最受欢迎的Web框架,领先于Django。

Sentry中的Python大多是遗留代码,但它仍然用于后端,用于将Sentry与其他系统集成,例如当Sentry中的崩溃报告需要传递到Atlassian的Jira问题跟踪系统时。

罗纳彻告诉ZDNet,哨兵和吉拉之间的同步是用Python编写的。很多连接到Sentry前端的后端业务逻辑都是用Python编写的。由于性能原因,事件处理和所有的复杂性正在慢慢地转移到Rust中。";

Ronacher是Rust的忠实粉丝,Rust是Mozilla Research在五年前创建的一种编程语言。微软正将其视为Windows和Office中部分C和C++代码库的内存安全替代品。

尽管Python作为一种语言取得了成功,但罗纳赫认为,它有可能失去作为一种通用编程语言的吸引力,而被降级到特定的领域,比如沃尔夫拉姆(Wolfram)的MATHEMICA,它也在数据科学和机器学习领域找到了一席之地。

你的期望不会是我会用数学开发桌面应用程序,罗纳彻说。

目前,感觉Python的所有领域都非常适用,而且还在不断扩大,但我们已经可以看到,永远都会有智能手机--或者取代智能手机的东西--也会有浏览器应用程序。他说,Python现在不能提供这两种服务,而且有很多限制。

巨蟒(Anaconda)的联合创始人兼首席执行官彼得·王(Peter Wang)对Python在构建桌面和移动应用程序方面的局限性感到畏缩。巨蟒是广受欢迎的巨蟒Python数据科学发行版的开发商。

他告诉ZDNet,承认这一点令人尴尬,但使用Python构建和分发任何具有实际图形用户界面的应用程序都非常尴尬。

在台式机上,Python从来不是操作系统的首选语言,它必须求助于第三方框架,如qt或wxPython。

在网络上,前端总是JavaScript或派生的。而在移动平台上,Python几乎不被使用。Python能出现在雷达上简直是个奇迹,更不用说跻身前三名了。具有讽刺意味的是,这在某种程度上证明了Python在后端和数据科学工作负载方面的能力和受欢迎程度。

Python社区意识到应用程序分发是它的致命弱点,但是Ronacher没有看到不分裂Python社区的前进方向。

Python开发人员上一次尝试引入重大更改是在2008年发布的Python3。然而到了2014年,范·罗萨姆几乎是在恳求开发人员转而使用Python3。在那个阶段,像Instagram这样拥有庞大Python代码库的公司还没有过渡到Python3。

Python将自己困在一个角落里,在这个角落里,它很难在不打破人们的代码的情况下进行创新。上一次有人试图对Python(即Python3)做一些更大的更改,很多人的代码都崩溃了。罗纳彻说,生态系统花了10年时间才再次痊愈。

根据Ronacher的说法,Python的限制归根结底在于设计,破坏生产系统中使用的Python代码的风险,以及疏远其庞大用户基础的相当大一部分的风险。

罗纳赫说,Python的解释器及其C语言应用程序二进制接口(ABI)和应用程序协议接口(API)阻碍了浏览器的创新。

虽然JavaScript开发人员可以将他们的代码嵌入到浏览器中,并让每个选项卡运行自己的JavaScript引擎,但Python不能,因为当前的ABI暴露于像NumPy这样的Python扩展。这可以防止它在同一进程空间中拥有两个版本的解释器,这就是所谓的全局解释器锁。

罗纳彻解释说,如果你有两个口译员,他们会共享同一个对象。因此,如果选项卡一会修改对象,选项卡二也会看到该修改。";

尽管他承认在浏览器中运行Python无论如何都是不受欢迎的,但这一限制对它的未来和作为一种通用编程语言的使用有其他影响。

如果我们可以运行多个进程,并将一个进程固定在一个CPU核心上,然后进行消息传递以获得全局解释器锁,那就太好了。但是,这个C API的公开基本上阻止了所有这些事情。

要实现这一点,您必须取消或更改C API,这将破坏Python最大的生态系统:NumPy、Skipppy和整个机器学习环境。

罗纳彻说,Python多年来一直像这样被困住了。一次又一次,取消全局解释器锁的努力都失败了,因为这会给像NumPy这样的扩展带来麻烦。

与其说这是一个核心技术挑战,不如说是让足够多的人足够关心一个群体的创新,而这可能会给生态系统中的另一个群体带来痛苦。

他指出,如果你正在做的事情会破坏NumPy,而这件事不会让NumPy社区受益,那么你是否会得到支持来执行这一点,这一点还不清楚。

取而代之的是,Python社区已经转向机器学习和数据科学,而机器学习和数据科学较少关注Python的性能问题,因为可以通过将代码移到GPU或许多进程独立运行的集群来克服这些问题。

但他说,这意味着Python不再用于电脑游戏,不会被编译到浏览器中,也不再经常用于网络应用程序中,他说,这意味着Python不再用于电脑游戏,也不再被编译到浏览器中,也不再经常用于网络应用程序。

王和罗纳赫一致认为,Python的继任者可能会出现-一个不受现有设计选择限制的Python的继任者,这些设计选择限制了Python在数据科学和后端系统以外的领域的使用。

蟒蛇的王说,如果Python想要与数据分析以外的其他应用程序开发语言长期竞争,它必须对自己所代表的东西有一个连贯的愿景,而且这种愿景必须有所区别。

程序员总是在寻找新的闪亮的对象,所以语言很少会因为做好很多事情而得到奖励。当然,Python作为后端系统自动化和脚本编写的通用语言的价值是难以取代的。但他补充说,不应仅仅满足于被降级到这一级别。

Python的许多核心概念和对象本质上都与单节点PC计算模型捆绑在一起。真正的下一代语言必须超越这种范式。

罗纳赫乐观地认为,Python可以被重新发明,但也指出了Perl的命运。Perl在21世纪初因网络编程而大受欢迎,但现在远远超出了Tiobe的前10名。由于社区内部对Perl的未来和遗产存在分歧,Perl现在被称为Raku。

使用Perl作为衡量标准说明了为什么弯曲Python的未来需要一个勇敢而坚定的角色。

我并不是说你不能修复Python。罗纳切尔说:我认为你可以制作一个新版本的Python来修复其中的许多问题,但总得有人进来说,我们可以规划出一条通往未来版本的、不兼容的Python语言的道路。

人们试图这样做的一些努力最终导致了社区的分离。Perl6甚至不再被称为Perl,因为社区从未完全订阅它,而升级到新版本的成本是从头开始编写代码。

另一个重大突破性变化的风险是,以前的一种语言的狂热爱好者只是简单地转向了一种现代的替代语言。

当你说,我们可以做这个非常酷的Python版本来解决所有这些问题的时候吗?罗纳赫说,那就是它看起来不再像Python了,而且没有明确的迁移路径,这就是说,我们可以做这个非常酷的版本来解决所有这些问题吗?罗纳赫说,那就是它看起来不再像Python了,而且没有明确的迁移路径。

人们完全使用另一种语言的风险总是存在的。我不知道这条路会是怎样的,但如果Python想要成为一种普遍适用的语言,那么它可能需要开始探索一些根本性的改进。

Ronacher说,他使用Rust的感觉和他开始使用Python时一样积极。然而,铁锈有年轻的一面,这使得它非常受欢迎,但没有被广泛使用。

您可以做出贡献,这是令人兴奋的工作,每隔六个星期,您就会得到编译器的更新,并且您会阅读ChangeLog。它能让你高兴地升级,而且它周围有一个非常好的生态系统。

Ronacher认为,Rust的使命声明对它的受欢迎程度至关重要,尽管采用率很低,因为它有助于定义语言的哪些部分适用于某些开发人员,而不适用于其他开发人员。

我认为社区自我隔离成可以和不能使用铁锈的人。他说,多年来,Python从未做到过这一点。

Ronacher指出了Python对Windows的支持。例如,直到2019年5月的Windows101903年更新之前,Windows是唯一一个没有配备Python解释器的主流操作系统。

他说,这些都是独立的社区努力,从来没有感觉到它是语言的一部分。

这是一个不同的故事与铁锈,因为它没有行李和它的使命宣言,根据罗纳赫。

他说,当人们开始将Rust移植到Windows上工作时,这真的成为了这门语言的核心努力。

例如,有一个由Rust贡献者组成的团队,他们负责确保它在Windows上工作,其中包括Rust赞助商微软的支持。

但在Python中,罗纳赫说,像将其移植到Windows上这样的项目总是事后才想到的。

这就像是,如果有人愿意做,我们就会做,但如果不愿意,这也不是一个问题。你感觉到了。在“铁锈”一书中,他们认为良好的包装对于语言来说是必要的,所以即使有一个单独的团队来做这件事,这也成了每个人的责任。

Python在数据科学领域也有新兴的竞争对手,比如诞生于麻省理工学院CSAIL人工智能实验室的Julia语言。但它还没有得到主流的欢迎。

王认为Julia很有吸引力,它的制作人将其定位为像Python一样易于使用,但具有R用于统计和Matlab用于代数的最佳品质。然而,他认为Python和R&R的受欢迎程度对已经了解这些语言和生态系统的开发人员来说是一个障碍。

朱莉娅作为一种语言有很多好的特点。但语言是一项病毒式的技术,因为它存在网络效应,王说。

在一定比例的用户群积极使用它并将其推向他们的朋友和团队之前,采用它是非常缓慢的。朱莉娅面临的一个挑战是,对于许多团队来说,Python和R已经存在,虽然它们远不完美,但它们可能已经足够好了。