QCon 演讲火热征集中,快来分享技术实践与洞见! 了解详情
写点什么

Perl 正加速走向死亡,也许 2023 年就会消失

  • 2019-10-24
  • 本文字数:2384 字

    阅读完需:约 8 分钟

Perl正加速走向死亡,也许2023年就会消失

本文最初发布于 THEHFTGUY 博客,经原作者授权由 InfoQ 中文站翻译并分享。


本文是一些关于编程语言进化和死亡或个人思考


因为工作需要,今年早些时候,我不得不对一家古老公司的几个 Perl 脚本进行逆向工程并使其退役。


我不禁就想,还有谁还在使用 Perl?有吗?我都记不起上次听说这件事是什么时候了。

Perl 是什么?

如果你想立即看到相关数值,请直接跳到下一节。


对于那些可能从未听说过它的年轻读者,请继续阅读本节。大约 30 年前,Perl 是一种流行的编程语言。


  • COBOL 1959

  • BASIC 1964

  • C++ 1985

  • Perl – 1987

  • Python – 1989

  • Delphi – 1995

  • PHP – 1995

  • JavaScript – 1995

  • Java – 1996

  • C# – 2001

  • Ruby on Rails – 2005


几十年来,我使用过许多种语言,有的专业些,有的不那么专业(C、c++、Java、python、Haskell、Ada、PHP)。Perl 非常独特,因为它真的异乎寻常。


例如,它不支持带参数的函数,不像现在的主流语言。它还基于符号的广泛使用,而今天的语言更多的使用字母(关键字、变量名、函数名等)。我认为,公平地说,Perl 是一种神奇的符号,它能做很多事情,以至于93%的随机字符都是有效的Perl程序


下面是一些用 Perl、Python 和 PHP 编写的 CGI 脚本示例,以供比较。直接从 perl.com 和 Stack Overflow 复制/粘贴过来的。你能理解它们在做什么吗?


令人吃惊的是,Stack Overflow 的答案是永远不会工作,这次也不例外。你能找到错误吗?(最后回答)


来源:https://www.perl.com/article/perl-and-cgi/


#!/usr/bin/perluse strict;use warnings;use CGI;
my $cgi = CGI->new;my %param = map { $_ => scalar $cgi->param($_) } $cgi->param() ;print $cgi->header( -type => 'text/plain' );print qq{PARAM:\N};for my $k ( sort keys %param ) { print join ": ", $k, $param{$k}; print "\n";}# PARAM:# foo: bar
复制代码


来源:https://stackoverflow.com/questions/3582398/getting-http-get-arguments-in-python


import cgiimport cgitb; cgitb.enable() # Optional; for debugging only
print "Content-Type: text/html"print ""
arguments = cgi.FieldStorage()for i in arguments.keys(): print arguments[i].value
复制代码


来源:https://stackoverflow.com/questions/2160382/how-do-i-grab-all-parameters-from-a-url-and-print-it-out-in-php


<?phpforeach($_GET as $key =&gt; $value){    echo $key . " : " . $value . "<br /&gt;\r\n";}?&gt;

复制代码


Bug 在哪?


HTTP 头必须以行结束符\r\n 分隔。


这些脚本只有在 Linux 上运行时才会执行基本的 print()操作,生成\n。因此,输出是无效的,尽管 CGI 服务器有可能对特定的问题有一定的鲁棒性。注意,PHP 不会暴露原始头文件,完全避免了此类问题。

统计

下面的图表显示了编程语言的受欢迎程度。数据来自谷歌趋势。

最常用的语言

谷歌趋势链接:Perl, PHP, Python, Java, C++



从这个图表中可以看到,20 年前 Perl 还是非常流行的,与 C++相当。当时,它被认为是主要的编程语言之一。


Perl 的衰落已经有一段时间了。从上图可以看出,从 2018 年开始,它在谷歌趋势上已接近于零,即它的市场份额已接近于零。


我认为,可以公平地说,Perl 已死。它绝对不适合用于新项目。

小众语言

我们把 Perl 和其他采用率比较低的小众语言做个比较。


谷歌趋势链接:Delphi, Haskell, COBOL, Perl, Rust



好吧,还是比 COBOL 流行的!


COBOL:在大型机上运行的金融应用程序使用的一种编程语言。它针对整数算术、交易和记录进行了专门的设计。它们通常被视为遗留系统,但是,由于这些典型的应用程序过于庞大、陈旧和重要,所以很难迁移。


Delphi:一种基于基于 Pascal 的编程语言和 IDE,就像 C++是基于 C 语言一样。它设计用于编写桌面应用程序。该 IDE 有一个 GUI 编辑器用来拖放小部件,非常高效且易于使用。它可能是第一个提供这种功能的编辑器。关于它如何在过去 20 年中被 C++、C#和 Java 所取代,有一个好故事。



与此同时,在一个 Perl 会议上。

生存期预测

想知道 COBOL、Delphi 和 Perl 之间谁消失得更快吗?让我们找出答案。


下图显示了每种编程语言的线性趋势和多项式趋势。



注意,对于 COBOL 来说,这两条回归曲线正好重合。实际上,它是一种稳定和可预测的语言。


如果我们相信线性预测,那么 Perl 可能会在 Delphi 之后的几个月,即 2023 年死亡。COBOL 将比这两种语言都存在得更久,将持续到 2030 年。


当然,语言不会“灭绝”。可以把它理解为开发人员的数量减少到了一个数量级,直到开发人员的数量所剩无几。通常那些制造/销售语言/工具的人会是最后知道它的人,以及一些好奇的人通过谷歌了解它。


由于硬件和软件的发展,所有没人维护的软件都会“衰退”,直到它“突然”停止工作,变得“不可修复”。例如,无论出于什么原因,可执行文件不能在 Windows 12 或 Ubuntu 24 上运行了,仔细研究一下,编译器也不能再运行了,哎呦。


软件生命周期与开发和运行它的平台的生命周期是耦合的,因此,使用很少使用或弃用的平台存在很大的风险。

Perl 什么时候消失?

Linux 一直预装 Perl 和 Python。如果我没记错的话,实际上有一个 Posix 规范或其他的要求。


不过时代已经变了,主流操作系统都在积极地移除它们。


苹果公司已经正式宣布弃用所有解释器(Perl、Python、Ruby),MacOS 的下一个版本将不再提供这些解释器。


RedHat 已经正式宣布,在 RHEL 8 和未来的版本中将不再提供开箱即用的 Python。


其他发行版的跟进只是时间问题。下一个合乎逻辑的步骤是让 Perl 消失,惟一的问题是什么时候?


苹果公司的公告:macOS的未来版本默认不会包含脚本语言运行时Hacker News上的讨论


RedHat 公司的公告:RHEL 8中的Python

小结

如果你正在考虑学习 Perl 或开始一个新的 Perl 项目,你可能需要重新考虑。


这并不是针对 Perl 的个人攻击,而是由统计数据得出的结论。


原文链接


Perl is dying quick. Could be extinct by 2023.


2019-10-24 15:223764

评论 1 条评论

发布
用户头像
我们的项目里还在用,写一些测试的bench,还不错吧
2023-12-16 10:47 · 江苏
回复
没有更多了
发现更多内容

从四种时序数据库选型中脱颖而出,TDengine在工控领域边缘侧的应用

TDengine

数据库 大数据 tdengine 物联网

基于实例数据详解准确率和召回率

华为云开发者联盟

数据集 AUC 信息检索 准确率 召回率

开源demo| 智慧协同demo升级——协同更直观方便

anyRTC开发者

音视频 白板 智慧协同 开源demo 远程协助

openGauss数据库源码解析系列文章——存储引擎源码解析(五)

openGauss

工具 | 如何对 MySQL 进行 TPC-C 测试?

RadonDB

MySQL RadonDB

workflow 之 Prefect 基本用法(qbit)

qbit

工作流 pipeline workflow 数据流

效果提升28个点!基于领域预训练和对比学习SimCSE的语义检索

百度大脑

人工智能

为什么零售业需要借助CRM系统蓬勃发展

低代码小观

企业管理 CRM 企业管理系统 CRM系统 企业管理软件

斯图飞腾数据分析平台Stratifyd获评“2021大数据产业创新服务产品”

InfoQ_967a83c6d0d7

使用 Simple Replay 实用程序简化 Amazon Redshift RA3 迁移评估

亚马逊云科技 (Amazon Web Services)

mad

助力产教融合,夯实数据库产业人才基座!openGauss社区分委会正式成立

openGauss

恒源云(GPUSHARE)_语音识别与语义处理领域之低资源机器翻译综述

恒源云

机器翻译 语音识别

【网络安全】你必须知道的几个网络安全概念

行云管家

运维 网络安全 防火墙 IT

Linux云计算好学吗?Linux云计算运维学习资料 vim编辑器和恢复ext4下误删文件

学神来啦

MySQL高级特性篇教程

编程江湖

MySQL

前端开发之动态管理Nginx集群的方法

@零度

nginx 前端开发

低代码实现探索(十四)工程化思想提高项目质量与可维护性

零道云-混合式低代码平台

使用Amazon Redshift Simple Replay实用程序简化Amazon Redshift RA3迁移评估

亚马逊云科技 (Amazon Web Services)

mad

中山市政务服务数据管理局党组书记叶永忠:积极构筑智慧联接新底座,打造中型智慧城市标杆

InfoQ_967a83c6d0d7

skywalking核心概念

淡泊明志、宁静致远

在Spark Scala/Java应用中调用Python脚本,会么?

华为云开发者联盟

Python spark python脚本 Spark Scala Java应用

3个重点,20个函数分析,浅析FFmpeg转码过程

奔着腾讯去

音视频 WebRTC ffmpeg RTMP RTSP

霸屏综艺,牵手明星,扩列神器皮皮APP的出圈始末

联营汇聚

linux系统管理与自动化运维工具用哪款好?

行云管家

Linux 运维 IT运维 自动化运维

【量化】量化交易入门系列6:量化交易学习书籍推荐(二)

恒生LIGHT云社区

量化策略 量化投资 量化交易 量化

风口上的“低代码”,是时候来系统学一学了!

博文视点Broadview

万字详解 Spark 数据倾斜及解决方案

五分钟学大数据

spark 1月月更

openGauss 助力邮储银行分布式新核心迈向智能运维时代

openGauss

低代码实现探索(十五)安全检查报告提高低代码数据安全性

零道云-混合式低代码平台

面试官惊叹,好小子!你这多线程基础可以啊!

XiaoLin_Java

1月月更

Mysql索引

zdd

MySQL

Perl正加速走向死亡,也许2023年就会消失_语言 & 开发_Thehftguy_InfoQ精选文章