不再流行的Perl,会消失吗?

原创 精选
开发
时至今日,开发者对于Perl的评价却是两极分化的:有人会郑重地纪念它的生日,有人却希望它快点“死去”。

作者:莫奇

审校:武穆

近日,Perl 5.36正式发布,新版本带来了许多便利的功能。Perl可以说是全球最常用的语言之一,在它全盛的时代,人们会经常用它开发网络程序,但时至今日,开发者对于Perl的评价却是两极分化的:有人会郑重地纪念它的生日,有人却希望它快点“死去”。

不可否认的是,Perl已经不再流行。从TIOBE 6月编程语言排行榜就可见端倪。大家更多关注的是时下最热门的语言,虽然Perl也是榜上有名的,但非常遗憾的是,Perl位列第17名(前20名的下游位置),几乎没有人会在讨论最佳编程语言时提到它。

TIOBE 6月编程语言排行榜(1-20名)

据了解,本次发布的Perl 5.36是自Perl 5.34以来较大的一次版本更新。更新后的Perl也给开发者带来了更良好的使用体验。比如新增的use x.xx 功能省略了代码顶部繁琐的功能模块声明;此外,稳定了布尔跟踪、正则表达式集、支持Unicode 14.0等功能;还增加了内置函数、单次迭代多个值、try/catch语法支持 finally 关键字等实验性功能。

也许很多人会问:这次版本更新能否挽救日渐没落的Perl?不再流行的Perl会逐渐消失吗?

三十余年坎坷路,Perl 7还在远方

编程语言Perl是“Practical Extracting and Reporting Language”的缩写,意为实用提取和报告语言。Perl的功能丰富,可以在超过100种计算机平台上运行。Perl最初是为文本处理而开发的,现在则多用于各种任务,包括网络编程、Web开发、系统管理、GUI开发等。

1987年12月18日,Perl 1.0正式发布,其最初的设计者是拉里·沃尔(Larry Wall)。Perl语言借鉴了C、Sed、awk、shell脚本语言以及很多其他程序语言的特性,其中最重要的特性是它内部集成了正则表达式的功能,以及巨大的第三方代码库CPAN。

Perl 2.0在1988年6月发布,Perl 3.0和Perl 4.0则分别在1989和1991年发布。1994年发布的Perl 5是最重要的一个版本,这个版本也成为使用最为广泛的版本。

2015年12月25日,开发了十多年的Perl 6在圣诞节正式发布。Larry Wall以Perl 6吉祥物Camelia的名义宣布Perl 6可以在产品中使用,但强调其仍然处于青春期,意味着它有几分成熟了,但依然存在一些问题。

进入到第四个十年的Perl,在这些年经历了太多的起起落落。根据Perl指导委员会的说法,尽管5.36.0的最终版本“指日可待”,但万众期待的Perl 7继续在远处闪烁。

Perl:不止一种方法可以做到

Perl是一种自然和智能语言,它能根据上下文环境解释执行,同时有大量省略写法。Perl语言的座右铭是:There’s More Than One Way To Do It (TMTOWTDI,有多种方法可以完成一件事,或者“条条道路通罗马”)。

如果你想使用sed、awk或sh来解决问题,但是却发现它们的能力不够,或者想运行得更快一点,却不想傻傻地用C来写,Perl将是很好的选择。Perl擅长于文本处理和系统管理,不适合于实时嵌入式系统编程、操作系统底层开发(比如驱动程序开发)、复杂的多线性共享内存应用以及较大的应用。

Perl拥有动态语言强大灵活的特性,并且从C/C++、Basic、Pascal等语言中分别借鉴了语法规则,从而可以提供很多冗余语法。或许正因如此,它被评价为“write-only”——虽然你可以写得很随意,但是可能会得到意料之外的结果而不报错。除此之外,让程序员感到头疼的还有它冗长的程序代码,实现相同功能的程序代码长度可能相差十倍百倍。

事实上,人们现在更习惯使用Perl来写服务器脚本。与多数的网页编程语言(PHP或JavaScript)相比,Perl是可以直接执行的。为了使源代码能够被直接翻译成机器语言,它在执行每一行代码之前都先翻译,因此省去了编译的时间。

Perl最强的一点在于,它可以执行用其他计算机语言所编写的代码或子程序。此外,它还能够利用处理器,让开发者可以在海量的库和模块中任意挑选;并且适用于各类数据库管理,支持SQL语句查询,通过DBI模块对返回结果进行处理。

另一个为人称赞的是,Perl只有三种数据类型,标量(scalar)、数组和哈希。其中,标量是最简单的数据类型,一般是指单个数字、整数、文本或者引用。一连串的标量可以有不同的处理方式,通常被称为数组。以特定形式将值键组合的数据形式被称为哈希。在Perl中,值键用标量表示,而类型则以文本字符串的形式表示。

下面罗列了一些关于Perl语言的优势与不足:

Perl语言的优势: 

*正则表达式:Perl最擅长的一件事,就是文本操作。许多语言都有正则表达式,但Perl几乎是他们的发明人。并且它是内置的,不需要任何模块。

*灵活性:Perl具有三种基本的变量类型:标量、数组和哈希。你可以随意使用所有引用,而不必担心内存泄漏或整个PC崩溃的情况。

*Unicode支持(相对AWK与C) 

*可移植性:Perl在网络上运行良好。它在UNIX中效果很好。它甚至在Windows中也能很好地工作。它不是单一功能,而是“万事通”。

*CPAN:你可以找到所有你需要的东西。此外,通过CPAN安装任何模块都非常容易。直接从CPAN安装,在解决依赖关系方面,它与apt-get一样出色。

不足之处在于: 

*动态类型语言,不是很可靠;

*自然语言,是优点也是缺陷,使得Perl语言代码可能晦涩难懂; 

*智能语言,是优点也产生不足:根据上下文解释编程者之意,可能产生臆断,也因此产生很多编程陷阱;

*不是很优美,多种方法做事,有时会让编程者无所适从。 

*性能问题,Perl灵活的数据结构和处理性能通常不是很高(相对C/C++),若需要高性能的处理,有时需要使用其它语言重写。 

Perl语言的学习曲线浅而长。只要看看《Learning Perl》,就可以编写简单的Perl程序了,然而要深入掌握Perl,要使用Perl的复杂数据结构,进行面向对象编程、多线程编程则不是那么容易的事,需要很长的时间去学习和实践。 

Perl会消失吗?

十多年前,就有人问过类似这种问题,但是事到如今,Perl依然活得很好,并没有消失。Perl在文本处理、数据挖掘、运维、生物信息等众多领域均有不错的应用,只是它不像互联网热点被人们所关注罢了。

客观来说,Perl本身是一门古老的语言,但它拥有一个生机勃勃且生产效率很高的社区,其价值体现在CPAN库中。正如程序员Rox所说,几乎没有任何一种语言具有像CPAN一样广泛和全面的库,一切都近在咫尺。在CPAN中,你可以找到成千上万的模块和框架,并通过它们来完成你想象的任何事情。

需要网络服务器吗?有HTTP :: Server;需要一个独立的数据库吗?有Muldis :: DB。无论你的需求是什么,通常都可以找到几个满足您需求的模块,你只需要选择最适合你的应用程序的模块即可。

Rox表示,至于Ruby,Python和其他竞争对手,健康的竞争对Perl来说是巨大的好事。其他语言得到的任何东西,Perl社区都用Perl重写。例如,当Ruby在Rails的成功上飞速发展时,Perl有了Dancer,在许多方面都比Rails更好。

Perl不会死,也不会消失。周围没有什么浮华的事情,没有公司可以从炒作Perl中受益,因此它并没有引起媒体的广泛关注,也不是每个人都知道Perl,所以对此的讨论也较少。

另需说明的是,尽管Perl可能并不适用于应用类的开发,或者做CGI的Web开发,但是作为脚本语言在数据挖掘、Linux系统管理等偏重于面向过程的文本处理分析方面,仍然是非常顺手的工具,并且有很多自动化测试领域的工具都是Perl写的,所以Perl还是会活得好好的,只是逐渐淡出了为人们所熟知的Perl CGI开发而已。

开发者对Perl的评价

(图源:QA Stack)


(图源:知乎)


写在最后

客观来说,Perl仍然存在较大的价值和潜力,但也不得不承认它现在陷入了困境。未来,如果在不影响向后兼容性的情况下对其进行现代化改造,保持向后兼容性,促使它更易于使用现代功能,或许就能激发这门语言的更大潜力。正如程序员Nikos Vaggalis所说,无论什么情况下,Perl的长寿和繁荣都是有保证的。大家是如何看待Perl语言的?欢迎在下方留言讨论。


参考链接:

https://www.i-programmer.info/programming/perl/15105-perl-turns-34-a-retrospective.html?start=1

https://www.theregister.com/2022/05/26/perl_v7/

https://www.tiobe.com/tiobe-index/


责任编辑:莫奇 来源: 51CTO技术栈
相关推荐

2023-01-11 07:20:27

编程能力人工智能

2023-07-10 10:21:21

JavaScript模块化规范

2009-06-16 11:32:00

RoRJava

2022-07-21 13:36:39

API事件驱动Rest

2021-05-20 10:14:50

数字人民币ATM银行

2019-02-20 11:07:11

5G企业网络

2021-08-25 22:58:57

人工智能程序员机器语言

2013-08-20 09:48:59

2016-12-15 14:11:28

手工测试消失

2013-04-03 14:14:43

UbuntuWindows

2018-12-03 10:51:15

5GWiFi互联网

2013-05-24 13:21:23

jQuery

2020-06-17 08:02:37

运维容器云原生

2020-06-17 08:53:19

云计算运维云原生

2019-05-07 15:49:27

AI人工智能艺术

2011-12-02 09:57:50

存储虚拟化存储虚拟化

2014-05-23 10:38:46

智能路由器

2021-07-05 16:26:19

数据中心

2022-01-05 22:54:48

狗狗币加密货币货币

2021-04-11 11:10:19

数字人民币数字货币区块链
点赞
收藏

51CTO技术栈公众号