写点什么

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

评论 1 条评论

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

ansible 模块:pause

ghostwritten

ansible

ansible 模块:template

ghostwritten

ansible

根因分析思路方法总结|保障IT系统及其稳定性

云智慧AIOps社区

算法 监控 根因分析 智能运维

ansible 模块:systemd

ghostwritten

ansible systemd

十、高可用之应急预案

穿过生命散发芬芳

5月月更 高可用设计

基于 Agora SDK 实现 iOS 端的多人视频互动

声网

视频 SDK教程

架构实战训练营毕业设计

刘帅

Native Flink on Kubernetes 在小红书的实践

Apache Flink

大数据 flink 编程 流计算 实时计算

数字化转型的理论体系与具体技术

小炮

数字化转型

元宇宙现阶段都支持哪些接入现实的活动?

CECBC

Web3:创作者经济的黄金时代

CECBC

spring中如何自己去实现一个starter

ZuccRoger

5月月更

ansible 模块:lineinfile

ghostwritten

ansible

40万年才能遇到外星人,是怎么算出来的?

脑极体

【愚公系列】2022年05月 二十三种设计模式(十)-外观模式(Facade Pattern)

愚公搬代码

5月月更

DDD实战(10):冲刺1战术之服务设计(下)及技术决策

深清秋

DDD 软件架构 软件设计 生鲜电商系统 5月月更

玩了一场剧本杀,同车队友“不是人”

白洞计划

厚积薄发——开源公司商业化之路

CnosDB

IoT 时序数据库 开源社区 CnosDB infra

真正深入底层!阿里巴巴2022最新版JDK源码剖析笔记太香了

Java全栈架构师

Java 源码 jdk 面试 程序人生

数据仓库规范的重要性

奔向架构师

数据仓库 5月月更

5月硬核预告!明晚开讲:Virtio 虚拟化技术趋势与 DPU 实践 | 第16 期

OpenAnolis小助手

云计算 直播 虚拟化 龙蜥社区 龙蜥大讲堂

ansible 模块:modprobe

ghostwritten

ansible

C语言-strlen与sizeof区别

芒果酱

c++ 编程语言 C语言 5月月更

最佳10大开源项目管理系统

爱吃小舅的鱼

iframe框架

恒山其若陋兮

5月月更

数据仓库ETL管理平台TASKCTL调度计划控制原理

敏捷调度TASKCTL

程序员 DevOps 分布式 数据仓库 ETL

深入了解 Flutter 的状态管理机制(下)

岛上码农

flutter 移动端 安卓开发 ios 开发 5月月更

Hadoop WordCount案例

Emperor_LawD

hadoop 5月月更

ansible 模块:include_tasks

ghostwritten

ansible

SOFA Serverless 体系助力业务极速研发

SOFAStack

开源 Serverless springboot GitHub、 SOFA

Web常见的漏洞描述与修复方案

网络安全学海

网络安全 信息安全 渗透测试 WEB安全 漏洞挖掘

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