写点什么

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

评论 1 条评论

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

如何提高一个研发团队的“代码速度”?

阿里技术

技术管理 技术人生 内容合集

在阿里,我如何做好技术项目管理?

阿里技术

技术管理 技术人生 内容合集

一周信创舆情观察(12.13~12.19)

统小信uos

短视频如何有效去重?vivo 短视频分享去重实践

Zilliz

数据库 Milvus Zilliz

一文带你了解什么是GitOps

华为云开发者联盟

DevOps 运维 测试 软件开发 gitops

华为超大云数据中心落地贵州,这些硬核技术有利支撑“东数西算”

华为云开发者联盟

服务器 数据中心 华为云 东数西算 云数据中心

为企业创建完美CRM系统策略

低代码小观

企业管理 CRM 客户关系管理 CRM系统 客户关系管理系统

在阿里做了五年技术主管,我有话想说

阿里技术

技术人生 内容合集

MySQL从入门到入魔之数据库连接池(04)

海拥(haiyong.site)

MySQL 数据库 28天写作 12月日更

为什么大部分人做不了架构师?这2点是关键

阿里技术

技术人生 内容合集

面对复杂业务,if-else coder 如何升级?

阿里技术

技术人生 内容合集

Python代码阅读(第71篇):检测一个平坦列表中是否有重复元素

Felix

Python List 编程 阅读代码 Python初学者

CSS之变量(四)悬浮跟踪按钮

Augus

CSS 12月日更

上百台linux服务器管理用什么软件好?谁给推荐一下!

行云管家

Linux 服务器 服务器管理

在高并发环境下该如何构建应用级缓存

华为云开发者联盟

缓存 高并发 负载 应用级缓存 缓存命中率

7 个建议让 Code Review 高效又高质

阿里技术

技术管理 技术人生 内容合集

Typora + picGo实现插入图片上传gitee图床

zdd

如何做好技术 Team Leader?

阿里技术

技术管理 技术人 内容合集

互联网时代,谁来保护我们的个人隐私信息?

郑州埃文科技

数据库 App IP 个人信息

拍乐云发布“融合语音通话”产品,实现多场景下VoIP和PSTN互通

拍乐云Pano

RTC PSTN VoIP 融合语音通话

如何成为优秀的技术主管?你要做到这三点

阿里技术

技术管理 技术人生 内容合集

自用学习资料,Linux内核之【内存管理】的一些分享

奔着腾讯去

内存泄露 C/C++ Linux内核 内存映射 内存池

Linux云计算有那么难学吗?Linux入门篇。系统常用函数的调用方法大全

学神来啦

MySQL nginx Linux Shell linux云计算

优秀工程师必备的一项技能,你解锁了吗?

阿里技术

技术管理 技术人生 内容合集

OPPO大数据离线任务调度系统OFLOW

安第斯智能云

后端 数据

互联网行业办理过等保业务,选择哪款堡垒机好?

行云管家

互联网 网络安全 堡垒机 云堡垒机

Linux环境变量配置

恒生LIGHT云社区

Linux 运维 环境配置 环境变量

RPA的定义

金小K

RPA 自动化 自动化平台 自动化运维

架构实战-模块七-作业

无名

架构实战营 「架构实战营」

毕业10年才懂,会升层思考,工作有多轻松?

阿里技术

技术管理 技术人生 内容合集

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