这个消灭的编程语言,偶然间改变了环球步伐员的运气! ...

来自版块: 资讯
653
5

2016年,一个叫left-pad的小工具被删除,整个JavaScript生态刹时瘫痪。你能想象吗?这场“网络劫难”的源头,能不停追溯到1995年,谁人被忘记的编程语言——Perl,以及它发明的包管理体系CPAN。01CPAN的诞生Perl是一 ...

2016年,一个叫 left-pad 的小工具被删除,整个 JavaScript 生态刹时瘫痪。

你能想象吗?这场“网络劫难”的源头,能不停追溯到 1995 年,谁人被忘记的编程语言——Perl,以及它发明的包管理体系CPAN。

01

CPAN的诞生

Perl是一门古老的编程语言。

Larry Wall发明Perl的时间,目标非常单纯,资助本身做“陈诉天生和日记分析”。

以是他赋予了Perl无以伦比的文本处置惩罚本领,特殊得当处置惩罚正则表达式、日记文件、设置文本等。

Perl也不是为了优雅,而是为了“快速地搞定事变”,以是它的表达本领、信息压缩本领非常强。

Larry说:“做一件事不止一种方法”,鼓励步伐员用本身惬意的方式写代码。

于是有些Perl大家就写出了如许的代码:

#!/bin/perl -s-- -export-a-crypto-system-sig -RSA-3-lines-PERL
$m=unpack(H.$w,$m."\0"x$w),$_=`echo "16do$w 2+4Oi0$d*-^1[d2%Sa
2/d0 $n %0]SX$k"[$m*]\EszlXx++p|dc`,s/^.|\W//g,print
pack('H*',$_)while read(STDIN,$m,($w=2*$d-1+length$n&~1)/2)

短短的几行代码就实现了RSA算法!

其时美国当局有严酷的加密技能出口管制,有人将这几行代码印到了T恤上,于是T恤衫就酿成了克制出口的“军器”。

假如穿着它脱离美国,将被处以高额罚款和10年羁系。

1993年,Marc Andreessen发明白Mosaic欣赏器,网页开始真正盛行起来。

为了增长网页的动态性,有人提出了CGI脚本,可以在服务器端实行,根据用户的输入产生动态内容。

比方留言板,另有访问计数器:

CGI步伐员可以用各种语言编写,最早是用C语言,但很快各人就发现Perl更符合,由于CGI重要在处置惩罚HTML文本,恰好是Perl善于的范畴。

早期的互联网是免费分享的天国,各人创建了邮件列表,通过邮件的方式分享各种各样的Perl脚本。

Perl脚本多了以后,邮件分享就不方便了,有些“囤积者”就把本身网络的代码放到个人FTP站点上让各人下载。

FTP站点多了以后,有人就想:各人应该归并资源啊!要否则重复代码许多,找起来很贫苦。

最初,各人整理了一个列表,列出Perl模块的名称和下载地点,像如许:

张大胖写的计数器:ftp://xxx.xxx.xxx

赵铁蛋写的留言板:ftp://xxx.xxx.xxx

叫什么名称呢?有人发起“CPAN”(Comprehensive Perl Archive Network),灵感来自CTAN,即TeX和LaTex的代码库。(嗯,看来这才是真正的老祖宗)。


厥后各人以为用个人的FTP服务器欠好,万一down机了,就无法下载了,干脆会合到一起吧。

有两个人Andreas J. König 和 Jarkko Hietaniemi,创建了一个叫PAUSE(Perl Author’s Upload Server)的东西,即Perl作者上传服务器。

每个人都可以在这个服务器上注册,上传本身的Perl模块。

体系创建了一棵分类树,从原先按人名和文件简朴分组,酿成了“数据库模块”、“用户界面模块”、“文件处置惩罚模块”等等,如许各人找代码更方便了。

今后以后,用Perl办事,各人第一想到的是CPAN,由于那边有全部模块。假如找不到,大概你可以做一个再上传。

Perl 5发布以后,CPAN上的代码和模块激增。

到 1999 年,每个月约莫有 200 个包发布到 CPAN。到了 2001 年,这个数字凌驾了 500 个。

Perl成了首个拥有超大会合开源代码库的语言,CPAN成了一个强盛的生态体系。

不外,另有一个题目还没有办理:每个月都有这么多的新模块上传,另有成千上万的模块更新,怎么才气确定它们没有题目呢?

一样平常的Perl模块都包罗测试代码,用户把模块下载以后可以测试,而且反馈是“通过”照旧“失败”。

但是不大概让每个用户都这么干,于是CPAN计划了一个主动化的方案:志愿者可以贡献呆板,这些呆板会主动下载模块,运行测试,然后把效果传到一个叫CPAN Testers的网站。

用户只必要到网站上一看,就知道哪个模块在哪些体系上运行正常。

这实在就是一个环球分布式的连续集成体系(CI),现在CI很常见,但是很少有包管理体系像CPAN Tester那样,能使用志愿者的电脑,分布式地完成Perl代码跨版本、跨情况的测试。

Perl社区确实太了不得了!

从CPAN的发展汗青来看,是天然而然,水到渠成的事变,Perl得当写CGI脚本,厥后又是LAMP的紧张一员,在互联网早期非常盛行,用户浩繁,随着分享代码需求的出现,CPAN这这么一步步地成熟了。

02

"感染"其他语言

Perl语法机动,Perl社区黑客精力非常浓重,这些都是功德儿,但是对许多人来说,门槛就有点高了。

2000年左右,有着更清楚语法,更当代面向对象的Python和Ruby崛起,Perl终于让出了王者宝座。

许多Perl步伐员转入Python和Ruby阵营,也把Perl的良好理念给带来过来。

2003年,Python的包管理器PyPI对外发布。

2004年,Ruby的包管理器RubyGems对外发布。

而Java颠末了10年发展以后,也通过Maven在2004年创建了本身的中心堆栈。

随后,CPAN就像病毒一样,感染了各个编程语言,JavaScript、Go、PHP、Rust都有了本身的包管理体系。

它乃至入侵了微软,.NET,也创建了NuGet作为包管理体系。

这此中以JavaScript的npm最吓人,我看到2023年的一个数据,说npm有300多万个软件包!

JavaScript特殊自由旷达,特殊推许“一包一事”,鼓励将功能高度拆分为独立模块,哪怕只是几个字符的功能。

这导致了许多“微型”“极简”的软件包,此中只有几行乃至一行代码。

比方判定一个数字是否是偶数:is-even

module.exports = function(n) {
   return n % 2 === 0;
};

另有最为着名的,让真个互联网都颤动的left-pad:

它的作者Azer不光写了left-pad,还写了其他273个软件包,是npm一个相称大的贡献者。

这273个软件包中有一个叫做kik,这个名称和加拿大一家叫做Kik Interactive的公司雷同,这家公司要求Azer Koçulu放弃对kik的控制权,由于该公司拥有Kik商标。

Azer固然不肯意放弃,复兴了一个 fuck you 的邮件就不搭理他了。

没想到Kik公司找到了npm的CEO,也是首创人 Isaac Schlueter ,留意,npm和CPAN差别,这是一家贸易实体,是要红利的。

Kik威胁说要告状npm,Isaac Schlueter怕了,就把全部权给了Kik公司。

Azer Koçulu看到npm竟然站在对方那一边,一气之下把本身的273个软件包都删除了,此中就包罗left-pad。

这一下子捅了马蜂窝,由于别看left-pad很简朴,却是JavaScript的一个焦点包。

Babel在用它,Webpack在用它,React也在用它,left-pad被下载利用了1500万次!

left-pad被删除,“整个互联网被摧毁了”!

以是你看,会合式软件包管理给步伐员们带来了无数的便利,但一旦失事儿,就是大事儿。

03

缺席的C和C++

故意思的是,C/C++不停没有盛行的包管理体系。

2008 年,Linux内核开辟者Rusty Russell在开源开辟者大会 和CPAN 管理员Adam Kennedy偶尔相遇,相谈甚欢,归去以后就创建了CPAN的C语言版本 :CCAN(Comprehensive C Archive Network)。

但是CCAN从来没有盛行起来,倒是微软,在2016年创建了vcpkg这个C和C++的包管理体系,收录了2613个着名软件包,另有JFrog创建的Conan,也有几千个,这规模完全无法和 npm 或 pip 那种“几百万包、全民利用”的盛况相比。

C/C++ 是如今这个状态,我以为大概有这么两个缘故原由:

1.语言计划哲学差别

C 和 C++ 夸大底层控制、编译独立性宁静台适配性,给了步伐员最大水平的控制权。

它们不是“一站式生态”,而是答应开辟者自由决定怎么构建和链接依靠。

以是各人都是手动下载源码包、makefile、自界说构建。

2.二进制兼容性难以同一

脚本语言(如 Python、JavaScript)模块多为纯文本,自然跨平台。

而 C/C++ 的模块多是静态链接库(.a/.lib)和动态链接库(.so/.dll),这意味着编译器(gcc、clang、MSVC)不同等会导致兼容性题目,差别平台、架构、选项会天生差别的二进制文件,纵然源代码同等,也大概因构建参数不一而举动差别。

这极大增长了构建和分发的复杂性,也使得尺度化包管理器难以一统江湖。

C/C++ 没有同一包管理器,大概不是一种“当代开辟者风俗”的友爱体验,但却是一种“体系编程者文化”的真实写照。

04

总结

Perl 大概早已退出了主流舞台,但它偶然间种下的种子——CPAN,初次界说了“会合式代码共享”的范式,让步伐员们不再孤军奋战,而是可以或许站在相互的肩膀上协作创新。

它引发了Python的 PyPI,开导了 RubyGems,影响了Java的 Maven,乃至在JavaScript中演化成了如当代界最大的软件堆栈 npm。

绝不浮夸地说,整个编程天下的生态,环球步伐员的工作方式,被Perl永世地改写了。

全文完,以为不错的话就点个赞大概在看吧!


路过

雷人

握手

鲜花

鸡蛋
看帖是喜欢,评论才是真爱:

全部回复(5)

我要评论
    小小吴
    这种都是生手的看法!起首,就给你一点点工时…肯定用最快方法搞出来!其次,不重复造轮子是很正常的!
    2025-8-11 11:38
    良辰余辉
    步伐员不再研讨算法,不再研究怎样以最简代码实现最高效盘算。转而化大量时间去消化架构和调用现成的包。编程失去了创造力,该死被AI代替。
    2025-8-11 11:26
    吖潆ing
    我1988年上高中开始学Basic,1991年上大学,学了汇编语言。
    2025-8-11 11:14
    梅目如画
    我艹,老法师啊。
    2025-8-11 11:02
    @Xizi_aCmicjkp
    我只看得懂basic
    2025-8-11 10:50
2025-8-11 10:38

热文

  • 3 天
  • 7天
返回顶部