编程语言会过时,但它解决问题的思路常常换个地方继续用。本文挑出 ActionScript 3、Delphi/Object Pascal、Perl 三门语言——一门被官方停更,一门退到角落,一门还在缓慢下滑——追踪它们的强类型对象模型、组件与属性事件、正则表达式,怎样进入今天的 TypeScript、C#、Python 和 Ruby。边缘化的编程语言是指用户群大幅萎缩、官方维护停滞或生态基本冻结,却仍在特定场景里继续运行的编程语言。文中每个年代、版本和排名都附了可打开的出处,你可以逐条核对。

信息核验时点:2026-10-19。榜单取 TIOBE 2026 年 10 月期;Swift 当前稳定版为 6.4.1,其中 6.4.0 发布于 2026-09-15。


本文要点
  • 一句话定义:边缘化的编程语言是指用户群大幅萎缩、官方维护停滞或生态冻结、却仍在特定场景继续运行的编程语言。
  • 核心结论:语言会退场,写法不会。ActionScript 3 的强类型对象模型、Delphi 的组件与属性事件、Perl 的正则表达式,分别以相似形态出现在 TypeScript、C# 和你每天写的正则里。
  • 关键人物:Anders Hejlsberg 是 Turbo Pascal 与初代 Delphi 的设计者,1996 年底进微软后成为 C# 首席设计师、TypeScript 首席架构师;他本人说过 C# 的属性与事件设计受过 Delphi 影响。
  • 最容易搞错的三点:ActionScript 3 不是 ECMAScript 4 的"参考实现",两者是互相输入;ES4 下马不是被投票否决,而是主要厂商撤回支持后共识转向;Delphi 也没有"首创所见即所得",Visual Basic 早它四年。
  • 适用人群:维护遗留系统的开发者、做技术选型的人,以及想把编程语言史串成因果链的读者。
  • 边界:本文讲思想传承,不构成"老语言值得重新采用"的建议;遗留系统要不要迁移,取决于业务和成本。

边缘化的编程语言到底"死"在哪里?

边缘化的编程语言是指用户群大幅萎缩、官方维护停滞或生态基本冻结,却仍在特定角落继续运行的编程语言。它们通常不是被某种新技术一击致命,而是在生态、商业和平台迁移的连锁反应里慢慢失去了位置。

"死"至少分三层。语言还能编译运行,是技术层还活着;社区不再写新库、论坛没人答疑,是生态层死了;厂商停止更新、招聘市场不再出现相关岗位,是商业层死了。多数被称为"过时"的语言其实是后两层出了问题,技术层反而稳定得可怕——这也是大量银行、医院、工厂的老系统至今还在原语言上跑的原因:它没坏,只是没人再给它添新东西。

把这一层分开很重要,否则"某语言已经死了"这种话会被随手乱说。下面三门语言的处境刚好是三个不同的样本。

ActionScript 3:标准之战的输家,思路为什么还在

ActionScript 3 是 2006 年随 Flash Player 9 一起公布的强类型面向对象语言,由 Gary Grossman、Jeff Dyer、Edwin Smith 设计,运行在重写过的虚拟机 AVM2 上。Brendan Eich 和 Lars Bak 等人合著的《JavaScript: The First 20 Years》把它描述成一个"静态类型的、类 JVM 的虚拟机",语言层面支持类、接口、命名空间、包,以及可选的静态类型检查。事件模型也是完整的:Adobe AIR SDK 的官方文档写明事件分捕获、目标、冒泡三个阶段传播。这些能力在当时比 JavaScript 领先一大截。

它真正的野心在标准层面。Adobe 那时正推动 ECMAScript 4(ES4)成为下一代 JavaScript 标准,而 ActionScript 3 与 ES4 草案的关系极深。这里要纠正一个流传很广的说法:AS3 并不是 ES4 的"参考实现"——那份委员会认可的可执行参考实现是用 Standard ML 写的。真实关系是双向输入:委员会一开始就把 AS3 规范里描述的类型系统当设计输入,Adobe 又把自己的语言定义和虚拟机贡献给 ES4。上面那篇论文对这一段讲得很清楚。

至于 ES4 怎么下马,也不是"投票否决"这么简单,而 JavaScript 的发明者 Brendan Eich 恰恰是整件事的转折点。他 2005 到 2008 年间是 ES4 最有力的推手之一(当时担任 Ecma TG1 召集人),但正是他在 2008 年 8 月 13 日那封 esdiscuss 邮件里宣布"分裂已经结束",并要求把包、命名空间、早期绑定这些 ES4 概念"从考虑范围内移除"。往前数:2008 年 6 月 Adobe 在电话会议里撤回对 ES4 的支持,7 月 23 至 25 日 TC39 在奥斯陆开会定调,8 月 19 日 Ecma 发出新闻稿。原来那条保守的 ES3.1 路线最终被命名为 ES5,2009 年 12 月定稿。

有意思的是,被否掉的条款后来一条条回来了。2015 年 6 月 Ecma 大会通过的 ES2015 补上了类和模块,而这两样正是 ES4 当年的核心诉求;TypeScript 则干脆走回"给 JavaScript 加静态类型"这条路,思路与 AS3 高度重合。但注意别写成"TypeScript 继承了 AS3"——微软公开记录里 TypeScript 的设计来源是 F# 等语言,中间环节是 Google 的 AtScript 并入。准确的表述是:AS3 早了六年多,把同一件事先做了一遍。 想看这条线今天怎么走,本站的 JavaScript 学习路线和 TypeScript 学习路线里有从 ES5 到现代语法的完整对照。

Flash Player 的故事有明确的终点。Adobe 官方的 Flash Player 管理指南写着:从 2020 年 12 月 31 日起停止支持(这个日期早在 2017 年 7 月就公布过),并从 2021 年 1 月 12 日起阻止 Flash 内容运行,最后一个版本是 32。微软这边的生命周期公告同一天终止支持,并说明组件会在 2021 年 7 月通过 Windows 更新从系统里删除。中国大陆由 flash.cn 取得授权延续,属例外情况。

Flash 的开发者没有消失,他们当中的一条线孵化了 Haxe。Haxe 官方手册的历史页写明:项目由法国开发者 Nicolas Cannasse 于 2005 年 10 月 22 日启动,是他此前那套开源 ActionScript 2 编译器 MTASC 的续作,之后才逐步支持编译到 Web、移动端和桌面。另一条线是 Apache Royale(前身 Apache FlexJS),官方口径是让你继续用 AS3 和 MXML 写代码、重新编译输出 JavaScript 与 HTML/CSS,把 Flex 项目迁到 Web 技术栈上。

Delphi 与 Object Pascal:同一双手怎么写出了 C#?

Pascal 是 Niklaus Wirth 在 1968 至 1969 年间设计、1970 年发表的语言,他本人的回顾文章开头就是这句话,最初定位是教学用途。Borland 在 1983 年把它做成商用产品 Turbo Pascal(这段历史由 Delphi 核心成员 Marco Cantù 在官方教程首页里梳理过),面向对象能力则在 1989 年 5 月的 Turbo Pascal 5.5 中加入,演进成 Object Pascal。1995 年 2 月 14 日,把 Object Pascal、可视化窗体和 VCL(Visual Component Library,可视组件库)绑成一体的 Delphi 1.0 发布。

Delphi 的核心卖点是 RAD(Rapid Application Development,快速应用开发):拖控件、改属性、写逻辑,界面和功能就出来了。但"RAD"这个词不是 Delphi 造的,学界一般归到 Barry Boehm 与 James Martin 在 1980 到 1990 年代的工作,Delphi 这一批工具是把它变成了人人可用的产品。同样要纠正的还有"它首创了所见即所得"——拖拽式窗体在 1991 年的 Visual Basic 1.0 里就已经是主打卖点,更早还有 Smalltalk。Delphi 的真实位置是:与 VB 同期,但给你原生编译、真正的数据库组件和更完整的语言。

真正决定后三十年走向的,是站在它背后的人。Anders Hejlsberg 1983 到 1996 年在 Borland,是 Turbo Pascal 编译器和初代 Delphi 的设计者,1996 年底离开加入微软。这里有个常见错误要指出:说他是 Delphi"前三版"的主架构师不成立——Delphi 2.0 发布于 1996 年 2 月,3.0 要到 1997 年 5 月,他离职时只覆盖了初代(Delphi 版本史可查)。到微软后他成为 C# 的首席设计师,后来又是 TypeScript 的首席架构师;TypeScript 官方博客的作者页给他的自我介绍是"Microsoft Technical Fellow and lead architect of TypeScript. Original designer of C#, Delphi, and Turbo Pascal"。

而 C# 里那些把方法伪装成字段的属性、把动作打包成事件的委托,不是看着像而已。Hejlsberg 在 2005 年的 Geek of the Week 访谈里说得很直接:C++ 和 Delphi 都影响了设计,尤其是"对属性、事件的一等支持,以及委托类型"。他想给 C# 的调子,用他自己的表述是同时拿到 C++ 的力量与表现力、以及 Visual Basic 和 Delphi 那样的易用性。这是"Delphi 的遗产进了 C#"最硬的一条证据,想接着往下看这套属性与事件模型在 C# 里长成了什么样子,可以读本站的 C# 学习路线。

Delphi 今天并没有彻底消失。在 2026 年 10 月的 TIOBE 榜单上,Delphi/Object Pascal 排第 19 位、占比 0.83%,去年同期是第 9 名;国内不少工业、医疗、金融企业的老系统仍在它上面运行。它掉队的原因普遍被认为在商业侧而非技术侧:付费授权挡住了新用户,产品重心长期留在 Windows 桌面,又赶上免费工具链把 RAD 的性价比重新定义了一遍——技术演进的速度,输给了商业节奏。至于当年中文开发者圈里流传的那句"聪明的程序员用 Delphi",那是那个年代的口头禅,不是厂商官方口号,别当广告词引用。想看名次背后的整体格局,本站那篇 2026 年 9 月编程语言排行榜全解读把 TIOBE 和 GitHub 两条榜放一起拆过。

Perl 退场了吗?为什么你写的正则还全是它的影子

Perl 由 Larry Wall 编写,官方版本史 perlhist 记录的第一版是 1987 年 12 月 18 日的 Perl 1.000,为文本处理而生。它真正超前的事,是把正则表达式提升成了语言的一等构造:在 perlop 里,=~ 是一个正式的"绑定运算符"(Binding Operators),模式匹配写在语法层,而不是标准库里一个外挂函数。

不过归属要划清三条线,别把整件事都算在 Perl 头上。第一,\d、\w 这类转义字符类确实是 Perl 的扩展——PCRE 官方手册在解释"word"这个概念时就直说这是一个 Perl extension。第二,回溯引用不是 Perl 发明的,它来自 Unix 第七版 regex 例程那条线,远祖可追到 Henry Spencer 的实现,Perl 是把它带成通用常识的那一个——perlre 自己也承认这套模式匹配是从 V8 的 regex 例程演化来的。第三,环视断言(lookahead、lookbehind)确实归 Perl,别处来得很晚:Emacs 社区 2012 年还在提交"把环视加进 Emacs 正则"的补丁请求。

Perl 那套语法之所以能活到今天,最关键的中转站是 PCRE。1997 年,剑桥大学计算服务的 Philip Hazel 写了 PCRE(Perl Compatible Regular Expressions),把 Perl 的正则方言做成一个可嵌入的开源库——pcre(3) 手册页的署名就是他和剑桥。它随后变成了基础设施的一部分:Apache 的 mod_rewrite 明确写着"基于 PCRE 正则解析器"(Apache 2.0 起采用),PHP 从 PHP 4 时代就把 PCRE 作为常开的核心扩展捆绑(现在换成了 PCRE2),NGINX 的 rewrite 模块同样直接用 PCRE。换句话说,你就算一行 Perl 都没写过,你配的每条重写规则都在说它的方言。本站的 PHP 学习路线里就有一整节讲这些正则函数怎么调。

命名捕获这个细节最能说明"遗产"长什么样。Perl 从 5.10 开始支持命名捕获,写法是 (?<name>...),取值用 %+(见 perl5100delta):

if ($text =~ /(?<year>\d{4})-(?<month>\d{2})/) {
    print "年份是 $+{year}\n";
}

Python 的 re 模块文档第一句就承认自己是"与 Perl 中相似的正则表达式操作",但它给命名捕获选的记号不一样,是 (?P<name>...),取值用 group('name'):

import re
m = re.search(r'(?P<year>\d{4})-(?P<month>\d{2})', '2026-10')
print(m.group('year'))   # 输出字符串 '2026'

思路同源、拼写各走一路。想动手跑一遍,可以直接照本站 Python 学习路线 里 re 模块那节改两行试试。

Ruby 为什么既是 Perl 的学生,又是它的反面

Ruby 由松本行弘(Matz)设计。Ruby 官方 FAQ引他本人的话,Ruby 生于 1993 年 2 月 24 日;对外发布是 1995 年 12 月把 0.9x 版贴到日本国内新闻组。谈 Perl 他不含糊,原话是"Then, I reorganized the features of Perl into a class library, and implemented them"(我把 Perl 的特性重新整理进一个类库,然后实现了它们);同一页 FAQ 的编写者说得更直白:许多许多东西是直接从 Perl 搬过来的。

具体到语法,Ruby 确实接过了 Perl 的几样东西:$_ 这个默认变量、=~ 匹配运算符、/pattern/ 字面量写法。但"原样保留"这个说法说过头了,两处要分开看。字符串插值在 Perl 里是 "$var",在 Ruby 里变成 "#{expr}",官方那份从 Perl 迁移到 Ruby 的指南专门点出了这个差异;grep、map、sort 在 Ruby 里是 Enumerable 的方法,属于通用迭代器设计,不是照抄 Perl 的同名函数。准确的说法是概念一一对应、拼写各自改写。

理念上两者正好相反。Perl 的官方术语表里就收着 TMTOWTDI(More Than One Way To Do It,the Perl Motto);Ruby 走另一头,Matz 认的原则是"最小惊讶原则"。这里要顺手纠正一个流传很广的误解:有人因此说 Ruby 把 Perl 的隐式行为改成了显式接口——事实恰恰相反,Ruby 的隐式更多,方法调用的圆括号可以省、接收者也可以省略(默认是 self)。它真正想收敛的不是隐式,而是 Perl 那种"同一个功能十种写法、符号密到读不出意图"的自由度。想直接上手感受这种取舍,本站的 Ruby 学习路线从语法到生态都有。

Swift 为什么被说成"收下最多遗产"的那门语言

如果说前几门是"遗产的捐赠者",Swift 就是收下最多的那个新人。苹果在 2014 年的 WWDC 上发布 Swift,主导者是 Chris Lattner,他的个人主页至今写着"I built, managed, and launched the Swift programming language",同一页列出了 Swift 受益的语言清单:Objective-C、Rust、Haskell、Ruby、Python、C#、CLU——注意里面并没有 JavaScript。

Ruby 和 Perl 留下的痕迹最具体。Swift 5.7 实现了正则字面量,直接用 /.../ 作定界符。SE-0354 提案原文把这条脉络写得毫不含糊:斜杠与正则的绑定"可以追溯到 1969 年的 ed,第一个 Unix 编辑器",被 less 和 vim 这些交互工具继承,再由 sed 传给 Perl,然后到 Ruby 和 JavaScript。Swift 的 map、filter、reduce 那套集合操作风格,也和 Ruby、Perl 一脉相通。

从 C# 那边学走的是类型安全:可选类型(Optional)把"有值"和"无值"变成类型系统里的强制区分。但 ?. 这个写法的传播方向别写错——不能说"Swift 发明、C# 和 TypeScript 随后采用"。真实时间线是:Swift 2014 年用上 ?.;C# 6 在 2015 年 7 月带来 null 传播运算符(C# 版本史可查);CoffeeScript 的存在运算符、Kotlin 的安全调用各自独立存在;TypeScript 3.7 在 2019 年 11 月随 ECMAScript 标准落地(官方发布公告)。能说的是:TC39 那份可选链提案在动机部分把 Swift 列为先行例子。同一时期多门语言各自收敛到同一个写法,这件事本身就足够说明问题。

Swift 现在还在往底层走,但版本要对号入座,别把不同来源的事拼成一版。当前稳定版是 6.4.1,其中 6.4.0 发布于 2026 年 9 月 15 日。6.4 里与 C++ 有关的那条,是把 C++20 的 std::span 与 Swift 的 Span 双向桥接;而"直接从 Swift 调用 C++"这个能力本身是 Swift 5.9 引入的(见 官方 C++ 互操作文档)。另一个常被误算进语言新版本的,是 TrueType 字体解释器重写:那是 Apple 安全团队为 2025 年秋季的 iOS 与 macOS 版本、把 TrueType hinting 解释器改用 Swift 重写,swift.org 在 2026 年 6 月 12 日的博文里介绍,并给出这个 Swift 版解释器比它替换掉的 C 版快 13% 这个数字——它是 Apple 平台内部的改动,不是 Swift 语言发行版的功能,那个 13% 也只指这一个解释器,不能外推成"Swift 6.4 性能提升 13%"。

三门外语的遗产,放在一张表里看

下表把三门语言的活跃期、留下的东西、今天还能见到它的地方放在一起对照。归属这一列刻意写得保守:能查到人家的话才写,查不到的只写"思路相似"。

语言公布/首发大致活跃期留下的东西今天在哪里还能见到
ActionScript 32006 年随 Flash Player 9 公布2007—2010 年脚本语言的强类型对象模型、三阶段事件模型思路相近的 TypeScript;同源的 Haxe;ES2015 起的类与模块
Delphi / Object Pascal1995 年 2 月 14 日1995—2005 年可视化窗体+原生编译+VCL 组件;属性与事件C# 的属性、事件、委托(设计者亲述受过 Delphi 影响);RAD 范式
Perl1987 年 12 月 18 日(1.000)1987—2005 年把正则写进语法、\w 类字符类、环视断言PCRE 与 PHP/Apache/NGINX;Python、Ruby、Swift 的正则与惯用法

常见问题

ActionScript 现在还值得学吗?

不值得当成求职技能去学。它的官方维护早已停摆,Flash Player 在 2020 年 12 月 31 日终止支持、2021 年 1 月 12 日起被阻止运行,招聘市场基本不再出现相关岗位。但如果你手上有一批 Flash 时代的遗留项目,值得了解的是它的两条出路:Haxe 走的是 MTASC 那条线,能把同一份代码编译到多个平台;Apache Royale 则允许你继续用 AS3 和 MXML,重新编译输出 JavaScript。前者是换语言,后者是原地续命,选哪条取决于项目里 Flex 组件用得多不多。

Perl 是不是已经没人用了?

它退出了舞台中央,但没有消失。在 2026 年 10 月的 TIOBE 榜单上,Perl 排第 17 位、占比 0.88%,去年同期是第 12 名。更实在的证据是它的写法活在哪里:PCRE 被 PHP、Apache、NGINX 拿去当正则引擎,Python 的 re 模块官方自称与 Perl 相似,Ruby 的默认变量和匹配运算符直接来自 Perl,Swift 的正则字面量提案一路追溯到了 ed。像生物信息学这类长期项目里,BioPerl 这样的工具链至今仍在维护。至于"运维日志里还剩多少 Perl 脚本",我没有找到可靠的量化数据,那只能算行业印象,别当数字引用。

想亲手验证这些遗产,该从哪儿下手?

三步,每步都很快出结果。第一,在 Python 里用 (?P<name>...) 写一条命名捕获并 group('name') 取值,再对照 Perl 的 (?<name>...) 与 %+{name},你会立刻看出"同源不同拼写"是什么意思。第二,打开 SE-0354 提案原文搜"1969"那一段,看 Swift 官方自己怎么把斜杠正则一路追溯到第一个 Unix 编辑器。第三,去 TIOBE 首页记下 Delphi 和 Perl 的当期名次与占比,隔一个季度再看一次——你会发现"边缘化"是渐变,不是断崖。

本文数据核验于 2026-10-19,版本与榜单一律以官方页面为准。

发表评论

验证码图片,点击可更换