在 2025 收官前,看清 Data + AI 的真实走向,点击查看 BUILD 大会精华版 了解详情
写点什么

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:224196

评论 1 条评论

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

哑面爽滑肤感胶浆

C13713145387

哑面爽滑肤感胶浆

Google官方关闭binary后,Android工程师怎么办?

Changing Lin

5月日更

夏季不塞网胶浆、夏季不堵网胶浆

C13713145387

夏季不塞网胶浆

水性硅胶防滑透明浆

C13713145387

水性硅胶防滑透明浆

INNOVATE 2021 圆满落幕,一起盘点那些 AI 前沿实例!

亚马逊云科技 (Amazon Web Services)

展开说说,Spring Bean IOC、AOP 循环依赖

小傅哥

Java spring 小傅哥 ioc 循环依赖

采取有效云网络安全策略的5个基本步骤

云计算

Java中用户线程和守护线程区别这么大?

王磊

Java 并发编程 多线程 5月日更

MySQL数据迁移那些事儿

Simon

MySQL 数据迁移

牛仔底色保护浆(喷砂工艺)

C13713145387

牛仔底色保护浆

不反粘水性台板胶Waterborne table glue

C13713145387

不反粘水性台板胶

Flink on Zeppelin 系列之:Yarn Application 模式支持

Apache Flink

flink

LiteOS内核源码分析:静态内存Static Memory

华为云开发者联盟

内存管理 LiteOS 静态内存 Static Memory Membox

负载均衡续:万亿流量场景下的负载均衡实践

Coder的技术之路

负载均衡 架构 高并发 负载均衡架构

融云亮相 CDEC2021 上海站 全场景通信能力赋能企业数字升级

融云 RongCloud

华云大咖说 | 安超DCM给数据中心“做主”

华云数据

4.2 Go语言从入门到精通:延迟函数 defer

xcbeyond

defer Go 语言 5月日更

NumPy之:结构化数组详解

程序那些事

Python 数据分析 Numpy 程序那些事

架构实战营模块三作业

日照时间长

架构实战营

【案例】新基建下星环科技城轨智能视频分析系统建设

星环科技

爽面弹力胶浆、哑面弹力胶浆

C13713145387

爽面弹力胶浆

哑面防水尼龙胶浆Nylon printing paste

C13713145387

哑面防水尼龙胶浆

Spring-技术专题-设计模式和研究分析

码界西柚

spring 设计模式 原理分析 5月日更

postgresql数据库 timescaledb 时序库 超级表 块的压缩(compress_chunk()的应用)

Yang

数据库 postgresql

OAuth 2.0 与 OIDC

Zhang

OAuth 2.0 OIDC

百分点大数据技术团队:政务数据安全管理实践

百分点大数据团队

一次过透气浆、印一次透气浆

C13713145387

透气胶浆 一次过透气浆

立体水性石头拉浆

C13713145387

弹力抗刮硅油布胶浆

C13713145387

弹力抗刮硅油布胶浆

聊聊我的编程时如何入门的

C语言与CPP编程

c++ 编程 程序人生 C语言 数据结构与算法

一文抽丝剥茧带你掌握复杂Gremlin查询的调试方法

华为云开发者联盟

调试 图数据库 Gremlin 遍历源 图遍历

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