32

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

 4 years ago
source link: https://www.tuicool.com/articles/aumMreu
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

本文最初发布于 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/perl
usestrict;
usewarnings;
useCGI;

my$cgi = CGI->new;
my%param =map{ $_ =>scalar$cgi->param($_) } $cgi->param() ;
print$cgi->header(-type =>'text/plain');
printqq{PARAM:\N};
formy$k (sortkeys%param ) {
printjoin": ", $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;fordebugging only

print"Content-Type: text/html"
print""

arguments = cgi.FieldStorage()
foriinarguments.keys():
printarguments[i].value

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

复制代码

<?php
foreach($_GETas$key => $value){
echo$key ." : ". $value ."<br />\r\n";
}
?>


Bug 在哪?

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

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

统计

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

最常用的语言

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

rUV7buB.png!web

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

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

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

小众语言

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

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

AfyUJzv.png!web

好吧,还是比 COBOL 流行的!

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

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

ZzmqUbA.png!web

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

生存期预测

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

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

uiYni2B.png!web

注意,对于 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 的个人攻击,而是由统计数据得出的结论。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK