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

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

因为工作需要,今年早些时候,我不得不对一家古老公司的几个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/perl
use 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 cgi
import 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

<?php
foreach($_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的个人攻击,而是由统计数据得出的结论。

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

原文链接Perl is dying quick. Could be extinct by 2023.

  • 发表于:
  • 本文为 InfoQ 中文站特供稿件
  • 首发地址https://www.infoq.cn/article/mhzB5OjZz9xswDDipQRo
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券