写点什么

为什么 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:007352
用户头像
刘燕 InfoQ高级技术编辑

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

关注

评论 3 条评论

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

What's new in PikiwiDB(Pika) v4.0.0

apache/dubbo-go

服务韧性工程(SRE)论坛演讲实录 | 雅菲奥朗:SRE是数字化转型时代基础设施能力

雅菲奥朗

运维 可观测性 SRE #DevOps

供配电学习笔记 day1

万里无云万里天

电力 工厂运维

IDA Pro 7 静态反编译工具

Rose

开发PGC + UGC模式的体育赛事直播平台,推动行业创新与进步

软件开发-梦幻运营部

AI视频创作一条龙!达摩院“寻光”平台炸场WAIC,突破可控编辑难题

Openlab_cosmoplat

人工智能 AI 视频

服务韧性工程(SRE)论坛演讲实录 | 基于可观测性构建SRE运维体系经验分享

雅菲奥朗

运维 可观测性 SRE

2023首届服务韧性工程(SRE)论坛分会场:数据中心运维的新发展

雅菲奥朗

人工智能 大数据 运维 SRE

AI绘图实践-用人工智能生图助力618大促

京东科技开发者

word一键生成ppt!这2款AI转换工具值得推荐!

彭宏豪95

人工智能 职场 PPT AIGC AI生成PPT

iBarcoder for mac v3.15.5中文激活版 条形码生成工具

iMac小白

讯飞晓医APP再升级!上线数字健康空间,更懂健康更懂你

EVANjesse

智慧医疗 科大讯飞 AIGC 讯飞星火 医疗健康

托寄物智能识别——大模型在京东快递物流场景中的应用与落地

京东科技开发者

Go 语言性能优化技巧

左诗右码

Go

蓝易云 - 基于Ubuntu坏境下的Suricata坏境搭建

百度搜索:蓝易云

云计算 Linux ubuntu 运维 suricata

轻松应用RapidMiner 内置案例模板实现数据挖掘详解(上篇)

Altair RapidMiner

人工智能 AI 数据分析 可视化 altair

Go语言设计模式:使用Option模式简化类的初始化

左诗右码

Go

服务韧性工程(SRE)论坛演讲实录 | 浙江移动:运营商ICT项目SRE运维的探索与实践

雅菲奥朗

运维 SRE

IBM SPSS Statistics 26破解版下载 spss统计软件

Rose

助你升职加薪的浣熊表哥

石云升

数据分析 数据可视化 办公小浣熊

2023首届服务韧性工程(SRE)论坛分会场:聚焦SRE的实践和应用

雅菲奥朗

人工智能 运维 可观测性 SRE

蓝易云 - Ubuntu/linux系统环境变量配置详解

百度搜索:蓝易云

云计算 Linux ubuntu 运维 云服务器

蓝易云 - 流媒体服务器与视频服务器有什么区别?

百度搜索:蓝易云

云计算 服务器 云服务器 服务器租用 流媒体服务器

华为云发起,openGemini正式成为CNCF官方项目!

华为云开源

云原生 时序数据库 cncf openGemini 华为云开源

产品/项目经理必备:2024年最佳项目管理软件推荐

爱吃小舅的鱼

项目管理 项目管理软件

2023年首届服务韧性工程(SRE)论坛成功举办

雅菲奥朗

人工智能 云计算 大数据 运维 SRE

什么是 Flink SQL 解决不了的问题?

京东科技开发者

蓝易云 - Ubuntu升级Cmake、gcc、g++

百度搜索:蓝易云

云计算 ubuntu GCC cmake g++

Xliff Editor for mac 2.11激活版 Xliff编辑器软件

iMac小白

蓝易云 - linux如何抓包数据

百度搜索:蓝易云

云计算 Linux 运维 tcpdump 云服务器

你必须知道的职场晋升规则

老张

职场成长 职场晋升

为什么Python不是面向未来的编程语言?_AI&大模型_Rhea Moutafis_InfoQ精选文章