2023年InfoQ 主办的最后一场会议——QCon 全球软件开发大会·上海站,正在热卖中! 了解详情
写点什么

为什么 Python 不是面向未来的编程语言?

  • 2021-06-23
  • 本文字数:2941 字

    阅读完需:约 10 分钟

为什么Python不是面向未来的编程语言?

缓慢的速度、运行时问题和移动应用开发困境“毁掉”了 Python 的未来


编程社区花了几十年的时间才接纳了 Python。但自 2010 年初以来它一直在蓬勃发展,热度终于比肩 C、C#、Java 和 JavaScript。


但这种趋势会持续到什么时候?什么时候 Python 会被其他语言取代,为什么?


Python 的消亡时间是很难预测的,所以我不会给出确切的时间点,而是会评估当下正在推动 Python 普及的优势有哪些,将来导致它没落的缺陷又会是哪些。

哪些优势造就了 Python 今天的流行局面


Python 的成功从 Stack Overflow趋势中就能管中窥豹。这个趋势数据统计了平台上帖子中的标签数量。鉴于 Stack Overflow 的巨大规模,这是编程语言流行度的一个很好的指标。



StackOverflow 上各种编程语言的标签数量快照。


R 在过去几年一直处于稳定状态,其他很多语言的热度则在稳步下滑,但 Python 的增长似乎势不可挡。约 14%的 Stack Overflow 问题都被标记为“python”,而且这个趋势还在上升。


这种现象的背后有几个因素。

Python 历史悠久


Python 从 90 年代就出现了。这不仅意味着它有足够的时间来成长,还让它获得了一个庞大的支持社区。


因此,如果你在使用 Python 编程时遇到任何问题,都有很大几率通过一次谷歌搜索来解决它。因为很可能有人遇到过你的问题,并为此写了一些有用的方案。

它对初学者友好


这不仅是因为它已经存在了几十年,让程序员有时间制作精彩的教程。更重要的是 Python 的语法非常易读。


首先,它不需要指定数据类型。你只需声明一个变量;Python 会从上下文中理解它是整数、浮点值、布尔值还是其他值。这对初学者来说是一个巨大的优势。如果你用 C++编过程,你就会知道仅仅因为一个浮点数换成一个整数就让程序无法编译是多么令人沮丧。


如果你对比过 Python 和 C++代码,就会知道 Python 是多么容易理解。尽管 C++在设计时就考虑到了可读性,但与 Python 代码相比,它读起来还是相当费劲的。

它的用途广泛

由于 Python 已经存在了很长时间,开发人员已经为众多用途都制作了对应的包。如今,你可以找到几乎适用于所有事物的包。


想要处理数字、向量和矩阵?NumPy 是你的好帮手。


想为技术和工程行业做计算吗?请用 SciPy。


想在数据操作和分析方面大展宏图吗?试试 Pandas 吧。


想入门人工智能吗?为什么不用 Scikit-Learn 呢。


无论你尝试管理哪种计算任务,都可能有一个 Python 包可用。这让 Python 始终处于技术的最前沿阵地,从过去几年机器学习领域 Python 使用率的激增就可见一斑。

Python 的缺陷,它们是否会动摇根本?


如前文所述,你可以想象 Python 将在未来很长一段时间内保持很高的热度。但与所有技术一样,Python 也有其弱点。我会一一分析其中那些最重要的缺陷,并评估这些缺陷是否致命。

速度


Python 很慢,真的非常慢。平均而言,使用 Python 完成一项任务所需的时间是使用其他任何语言的 2 到 10 倍。


这种情况是多种原因造成的。其中之一是 Python 是动态类型的 — 请记住,你不需要像在其他语言中那样指定数据类型。这意味着它需要使用大量内存,因为程序需要为它可能用到的每个变量保留足够的空间。大量的内存使用就意味着大量的计算时间。


另一个原因是 Python 一次只能执行一个任务。这是灵活数据类型的后果——Python 需要确保每个变量只有一种数据类型,而并行进程可能会在这里出问题。


相比之下,你的常用 Web 浏览器可以同时运行十几个不同的线程。此外还有其他一些因素。


但归根结底,这些速度问题都不是很关键。计算机和服务器变得如此便宜,所以速度再慢也只是亚秒级的差距。最终用户并不那么关心他们的应用程序是在 0.001 秒还是 0.01 秒内加载。

作用域


一开始,Python 是动态作用域的。这基本上意味着,要评估一个表达式时,编译器首先搜索当前块,然后依次搜索所有调用函数。


动态作用域的问题在于每个表达式都需要在每个可能的上下文中测试 — 这很乏味。这就是大多数现代编程语言都使用静态作用域的原因。


Python 尝试过渡到静态作用域,但搞砸了。一般来说,内部作用域 — 例如函数内的函数 — 能够看到和改变外部作用域。在 Python 中,内部作用域只能看到外部作用域,而不能改变它们。这会导致很多混乱。

Lambda


尽管 Python 相当灵活,但 Lambda 的用法却相当有限。Lambda 只能是 Python 中的表达式,不能是语句。


另一方面,变量声明和语句始终是语句。这意味着 Lambda 不能用于它们。


表达式和语句之间的这种区别相当随意,在其他语言中不会出现。



空格让代码更具可读性,但更难维护。

空格


在 Python 中,你可以使用空格和缩进来表示不同级别的代码。这让代码看起来更美观且易于理解。


其他语言(例如 C++)更多依赖大括号和分号。虽然这可能不够美观,对初学者不够友好,但它让代码更易维护。对于更大的项目来说这种方法更好。


Haskell 等较新的语言解决了这个问题:它们依赖空格,但为那些希望不使用空格的人提供了另一种语法。

移动开发


当我们见证软件产业的主流从桌面转向智能手机时,很明显我们需要强大的语言来构建移动软件。


但使用 Python 开发的移动应用并不多。这并不意味着它做不到 — 有一个名为 Kivy 的 Python 包就是做这个的。


可是 Python 并不是为移动而设计的。因此,即使开发人员可能用它为基本任务做出可接受的结果,但最好的办法还是使用一种为移动应用开发而创建的语言。一些广泛使用的移动编程框架有 ReactNative、Flutter、Iconic 和 Cordova。


需要明确的是,笔记本电脑和台式电脑应该会继续存在很多年。但由于移动端的流量早已超过桌面端,可以肯定地说,只学习 Python 并不足以成为一个经验丰富的全能开发者。

运行时错误


Python 脚本不是先编译然后执行。相反,它每次执行时都会编译,因此任何代码错误都会在运行时显现出来。这会导致性能下降、耗费更多时间且需要进行大量测试。


这对初学者来说非常有用,因为测试可以教会他们很多东西。但是对于经验丰富的开发人员来说,用 Python 调试一个复杂的程序会让他们出岔子。这种缺陷是在 Python 上设置时间戳的最大因素。

哪种语言可以在未来取代 Python?


Python 在编程语言市场上有一些新生的竞争对手:


  • Rust 提供了与 Python 相同的安全性—任何变量都不会被意外覆盖。但它通过所有权和借用的概念解决了性能问题。根据 StackOverflowInsights 的说法,它也是过去几年最受欢迎的编程语言之一。

  • Go 非常适合喜欢 Python 的初学者。而且它非常简单,代码维护起来更容易。有趣的一点:Go 开发人员是市场上收入最高的程序员之一。

  • Julia 是一种非常新的语言,可以与 Python 正面竞争。它填补了大规模技术计算的空白:通常,人们会使用 Python 或 Matlab,并用大规模计算必需的 C++库修补整个过程流程。现在,人们可以使用 Julia,然后就用不着同时使用两种语言了。


虽然市场上还有其他语言选项,但 Rust、Go 和 Julia 成功弥补了 Python 的缺陷。所有这些语言都在新兴的技术领域有着出色表现,尤其是在人工智能方面。虽然它们的市场份额仍然很小(正如 StackOverflow 标签数量所反映的那样),但它们的趋势很明显:一路向上。



StackOverflow 上各种编程语言的标签数量快照。


鉴于目前 Python 语言无处不在,这些新语言中的任何一种都肯定需要五年甚至整个十年的时间才能取代它。


赢家将是哪种语言,是 Rust、Go、Julia,还是未来出现的某种新语言 ,目前还很难说。


但考虑到 Python 架构中的基本性能问题,总会有某种语言占据一席之地。


原文链接:


https://thenextweb.com/news/why-python-not-programming-language-future-syndication

2021-06-23 14:007127
用户头像
刘燕 InfoQ高级技术编辑

发布了 1112 篇内容, 共 474.3 次阅读, 收获喜欢 1954 次。

关注

评论 3 条评论

发布
用户头像
因为未来有未来的语言,infoq 最近的文章质量又掉下来了,一天天的讨论什么是世界上最好的语言,真无聊。
2021-06-30 16:21
回复
用户头像
这种话题最容易蹭热度
2021-06-28 14:22
回复
用户头像
好文章,可以转载吗?
2021-06-24 21:06
回复
没有更多了
发现更多内容

NineData,稳定、高效的Redis数据同步解决方案

NineData

redis 数据同步 迁移数据 数据同步工具 NineData

财务共享管理体系助力企业卓越发展

用友BIP

财务共享

什么样的企业需要建设财务共享服务中心?

用友BIP

财务共享

供应链中台管理系统开发私有化部署

薇電13242772558

供应链 管理系统

硬核!阿里P8呕心沥血5年总结的Java面试速成手册开源一天上榜首

Java你猿哥

Java 微服务 算法 多线程 ssm

测试同学职场成长的核心认知

老张

职场成长 认知

Simple Date Format类到底为啥不是线程安全的?

华为云开发者联盟

后端 开发 华为云 华为云开发者联盟 企业号 6 月 PK 榜

软件测试/测试开发丨App自动化测试学习笔记

测试人

程序员 软件测试 测试开发 app自动化测试

全量通过!华为云GaussDB首批完成信通院全密态数据库评测

轶天下事

GaussDB数据类型转换介绍

平平无奇爱好科技

软件测试/测试开发丨App自动化测试学习笔记分享

测试人

程序员 软件测试 测试开发 app自动化测试

阿里工程师手打的MySQL学习笔记,轻松拿捏MySQL

小小怪下士

Java MySQL 程序员

降本增效,StarRocks 在同程旅行的实践

StarRocks

数据库 大数据 数据仓库 湖仓一体 大数据 开源

GaussDB,连续五次No.1!

平平无奇爱好科技

重学 Java 设计模式:实战建造者模式

Java你猿哥

Java 设计模式 ssm 计算机

身未动心已远,AI带你流浪地球

华为云开发者联盟

人工智能 华为云 华为云开发者联盟 企业号 6 月 PK 榜

GaussDB数据类型介绍

轶天下事

GaussDB如何给世界一个更优选择?

平平无奇爱好科技

GaussDB为什么成为游戏行业的心头爱?

平平无奇爱好科技

亿视电子基于PolarDB-X打造能源数字基座实践

阿里云数据库开源

MySQL 数据库 分布式 阿里云; PolarDB-X

基于STM32+华为云IOT设计的智能温室大棚监控系统

DS小龙哥

6 月 优质更文活动

带你走进大数据 | 写给小白的大数据指南

Data 探险实验室

大数据 数据分析 数据处理 数据存储 数据发展

构建智能电商推荐系统:大数据实战中的Kudu、Flink和Mahout应用【上进小菜猪大数据】

上进小菜猪

大数据 6 月 优质更文活动

手把手实践丨基于STM32+NBIOT+华为云IOT设计智能井盖

华为云开发者联盟

云计算 华为云 华为云开发者联盟 企业号 6 月 PK 榜 智能井盖

后疫情时代,国际形势向好,企业出海如何把握风险管控?

用友BIP

中企出海

如何减少创建订单、支付等线上写场景漏测?去哪儿流量录制回放实践

TakinTalks稳定性社区

GaussDB存储过程介绍

平平无奇爱好科技

大型企业数智化关键举措太难懂?这本数智平台白皮书带你秒理解

用友BIP

白皮书 数智平台 平台白皮书 数智平台白皮书

全面数据管理 DBeaverUltimate最新中文安装包

真大的脸盆

Mac 数据库管理工具 数据库管理 Mac 软件 管理数据库

Ambient Mesh:Istio 数据面新模式

华为云开发者联盟

云原生 华为云 华为云开发者联盟 企业号 6 月 PK 榜

中国振华刘昕:携手用友打造电子行业的数智化平台,服务全行业

用友BIP

2023用友BIP技术大会

  • 扫码添加小助手
    领取最新资料包
为什么Python不是面向未来的编程语言?_AI_Rhea Moutafis_InfoQ精选文章